About the VIEWPORT matrix, how does it works?

Started by
1 comment, last by tirengarfio 17 years, 7 months ago
Hi to all, i have a code with this line to get the value of the VIEWPORT matrix: glGetIntegerv but when i print the values i only get this matrix:

[0]
[0]
[0]
[0]
First doubt: I was waiting for finding some data about the size of the window i create (glViewport (0, 0, 200, 200)) but i dont see anything. Just 0's... Second doubt: As you see, Im supposing the VIEWPORT matrix is a 4x1 matrix, is that true? Any information about how VIEWPORT matrix is made will be wellcome.
Advertisement
Can you post your exact code, including where you set up the viewport initially?
#include "stdafx.h"#include "GL/glut.h"#include "GL/glaux.h"#include "GL/glu.h"#include "stdio.h"typedef struct // Utilizamos esta estructura{GLubyte *imageData;GLuint bpp;GLuint width;GLuint height;GLuint texID;} Imagen;/*---------------------Carga_TGACarga un TGA en memoria. El TGA debe cumplir las siguientes características:Ser de 24 bits + Canal ALPHA. (32 bits) y SIN COMPRIMIREl tamaño debe ser cuadrado (x=y) y 32x32 o 64x64 o 128x128 o 256x256Devuleve un puntero a la imagen y el tamaño (variable tam) de la imagen-----------------------*/GLubyte *CargaTGA(char *filename,int *tam){GLubyte TGAheader[12]={0,0,2,0,0,0,0,0,0,0,0,0};GLubyte TGAcompare[12];GLubyte header[6];GLuint bytesPerPixel;GLuint imageSize;GLuint temp,i;GLuint type=GL_RGBA;Imagen texture;GLubyte *aux;FILE *file = fopen(filename, "rb");if (file == NULL)printf("Error1");/* Esto abre y comprueba que es un TGA */fread(TGAcompare,1,sizeof(TGAcompare),file);if (memcmp(TGAheader,TGAcompare,sizeof(TGAheader))!=0)printf("Its a TGA file");/* Leemos la cabecera*/fread(header,1,sizeof(header),file);/* Determinamos el tamaño */texture.width = header[1] * 256 + header[0];texture.height = header[3] * 256 + header[2];/* Vemos las características y comprobamos si son correctas*/if( texture.width <=0 ||texture.height <=0 ||texture.width >256 ||texture.height !=texture.width ||( header[4]!=32)){fclose(file);printf("Error - >  Las caracteristicas de la imagen no son las correctas.");}/* Calculamos la memoria que será necesaria */texture.bpp = header[4];bytesPerPixel = texture.bpp/8;imageSize = texture.width*texture.height*bytesPerPixel;/* Reservamos memoria */texture.imageData=(GLubyte *)malloc(imageSize);/* Cargamos y hacemos alguna comprobaciones */if( texture.imageData==NULL ||fread(texture.imageData, 1, imageSize, file)!=imageSize){if(texture.imageData!=NULL)free(texture.imageData);fclose(file);printf("Error6");}/* El TGA viene en formato BGR con, lo pasamos a RGB */for(i=0; i<(GLuint)(imageSize); i+=bytesPerPixel){temp=texture.imageData;texture.imageData = texture.imageData;<br>texture.imageData = temp;<br>}<br>fclose (file);<br><br><br><span class="cpp-comment">/* Ahora, cambiamos el orden de las líneas, como si hiciesemosun flip vertical. */</span><br>aux=(GLubyte *)malloc(imageSize);<br><span class="cpp-keyword">for</span>(i=<span class="cpp-number">0</span>; i&lt;texture.height; i++)<br>memcpy(&amp;aux[imageSize-((i+<span class="cpp-number">1</span>)*texture.width*<span class="cpp-number">4</span>)],&amp;texture.imageData[i*texture.width*<span class="cpp-number">4</span>],texture.width*<span class="cpp-number">4</span>);<br><br><br><span class="cpp-comment">/* tam devolverá el tamaño */</span><br>*tam=texture.width;<br><br><br><span class="cpp-comment">/* Liberamos memoria */</span><br>free(texture.imageData);<br><br><span class="cpp-comment">/* Todo fue bien!*/</span><br><span class="cpp-keyword">return</span> aux;<br><br><br>}<br><br><br><br><span class="cpp-keyword">void</span> RenderScene (<span class="cpp-keyword">void</span>)<br>{<br>	<br><br>	<br>    <span class="cpp-comment">// Borra la ventana con el color de borrado actual</span><br>    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);<br>    <br>    <br>	<span class="cpp-comment">//Establecemos el color del cuadrado que queremos dibujar.</span><br>	glColor3f(<span class="cpp-number">1</span>.0f, <span class="cpp-number">0</span>.0f, <span class="cpp-number">0</span>.0f);<br>	<br><br>	<span class="cpp-comment">/*glBegin (GL_QUADS);<br>		<br>		glTexCoord2f(0.0f, 1.0f); <br>		glVertex3f(-100.0f, -100.0f, 0.0f);<br><br><br>		glTexCoord2f(1.0f, 1.0f); <br>		glVertex3f( 100.0f, -100.0f, 0.0f);<br><br>		glTexCoord2f(1.0f, 0.0f); <br>		glVertex3f( 100.0f, 100.0f, 0.0f);<br><br><br>		glTexCoord2f(0.0f, 0.0f); <br>		glVertex3f(-100.0f, 100.0f, 0.0f);<br><br>	<br>	<br><br>	glEnd();<br><br>	*/</span><br><br><br><br>	<span class="cpp-comment">//glRotatef(45.0f, 4.0f, 2.0f, 6.0f);</span><br><br>	<span class="cpp-comment">//Hace que el cubo tenga aspecto de alambre (wire)</span><br>	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);<br><br><br><br><br>	glBegin(GL_QUADS);		<span class="cpp-comment">// Draw The Cube Using quads</span><br>    glColor3f(<span class="cpp-number">0</span>.0f,<span class="cpp-number">1</span>.0f,<span class="cpp-number">0</span>.0f);	<span class="cpp-comment">// Color Blue</span><br>    glVertex3f( <span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Top Right Of The Quad (Top)</span><br>    glVertex3f(-<span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Top Left Of The Quad (Top)</span><br>    glVertex3f(-<span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Bottom Left Of The Quad (Top)</span><br>    glVertex3f( <span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Bottom Right Of The Quad (Top)</span><br>    glColor3f(<span class="cpp-number">1</span>.0f,<span class="cpp-number">0</span>.5f,<span class="cpp-number">0</span>.0f);	<span class="cpp-comment">// Color Orange</span><br>    glVertex3f( <span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Top Right Of The Quad (Bottom)</span><br>    glVertex3f(-<span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Top Left Of The Quad (Bottom)</span><br>    glVertex3f(-<span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Bottom Left Of The Quad (Bottom)</span><br>    glVertex3f( <span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Bottom Right Of The Quad (Bottom)</span><br>    glColor3f(<span class="cpp-number">1</span>.0f,<span class="cpp-number">0</span>.0f,<span class="cpp-number">0</span>.0f);	<span class="cpp-comment">// Color Red	</span><br>    glVertex3f( <span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Top Right Of The Quad (Front)</span><br>    glVertex3f(-<span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Top Left Of The Quad (Front)</span><br>    glVertex3f(-<span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Bottom Left Of The Quad (Front)</span><br>    glVertex3f( <span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Bottom Right Of The Quad (Front)</span><br>    glColor3f(<span class="cpp-number">1</span>.0f,<span class="cpp-number">1</span>.0f,<span class="cpp-number">0</span>.0f);	<span class="cpp-comment">// Color Yellow</span><br>    glVertex3f( <span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Top Right Of The Quad (Back)</span><br>    glVertex3f(-<span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Top Left Of The Quad (Back)</span><br>    glVertex3f(-<span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Bottom Left Of The Quad (Back)</span><br>    glVertex3f( <span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Bottom Right Of The Quad (Back)</span><br>    glColor3f(<span class="cpp-number">0</span>.0f,<span class="cpp-number">0</span>.0f,<span class="cpp-number">1</span>.0f);	<span class="cpp-comment">// Color Blue</span><br>    glVertex3f(-<span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Top Right Of The Quad (Left)</span><br>    glVertex3f(-<span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Top Left Of The Quad (Left)</span><br>    glVertex3f(-<span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Bottom Left Of The Quad (Left)</span><br>    glVertex3f(-<span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Bottom Right Of The Quad (Left)</span><br>    glColor3f(<span class="cpp-number">1</span>.0f,<span class="cpp-number">0</span>.0f,<span class="cpp-number">1</span>.0f);	<span class="cpp-comment">// Color Violet</span><br>    glVertex3f( <span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Top Right Of The Quad (Right)</span><br>    glVertex3f( <span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Top Left Of The Quad (Right)</span><br>    glVertex3f( <span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f, <span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Bottom Left Of The Quad (Right)</span><br>    glVertex3f( <span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f,-<span class="cpp-number">10</span>.0f);	<span class="cpp-comment">// Bottom Right Of The Quad (Right)</span><br>    glEnd();		<br><br>	<span class="cpp-comment">//glRectf(-1.0f, 1.0f, 1.0f, -1.0f);</span><br><br><br><br><br><br>	<span class="cpp-comment">// Do the buffer Swap</span><br>    glutSwapBuffers();<br><br><br>}<br><br><br><span class="cpp-keyword">void</span> SetupRC(<span class="cpp-keyword">void</span>)<br>{<br><br>	GLubyte *pImage;<br>	GLint iWidth;<br>	<br>	<span class="cpp-comment">//Establece el color azul como color para borrar la ventana.</span><br>	glClearColor(<span class="cpp-number">0</span>.0f,<span class="cpp-number">0</span>.0f,<span class="cpp-number">1</span>.0f,<span class="cpp-number">1</span>.0f);<br><br>	<span class="cpp-comment">// Targa's are 1 byte aligned</span><br>	glPixelStorei(GL_UNPACK_ALIGNMENT, <span class="cpp-number">1</span>);<br><br><br>    <span class="cpp-comment">// Load the TGA file, get width, height, and component/format information</span><br>	pImage = CargaTGA(<span class="cpp-literal">"Sin titulo-1.tga"</span>, &amp;iWidth);<br>	<br><br>    <span class="cpp-comment">// Use Window coordinates to set raster position</span><br>	<span class="cpp-comment">//glRasterPos2i(0, 0);</span><br>	<br><br>    <span class="cpp-comment">// Escribe un bloque de pixels en el "frame buffer"</span><br>    <span class="cpp-comment">//if(pImage != NULL)</span><br>    <span class="cpp-comment">//    glDrawPixels(iWidth, iWidth, GL_RGBA, GL_UNSIGNED_BYTE, pImage);</span><br>	<br><br>	<span class="cpp-comment">//Vinculamos la imagen a GL_TEXTURE_2D</span><br>	glTexImage2D(GL_TEXTURE_2D,<br>		<span class="cpp-number">0</span>,        <span class="cpp-comment">// Nivel de detalle de la imagen. Generalmente el 0</span><br>		<span class="cpp-number">3</span>,        <span class="cpp-comment">// Especifica el numero de componentes de color de la textura sin contar con el alpha?</span><br>		iWidth,   <span class="cpp-comment">// Anchura de la imagen. SIEMPRE POTENCIA DE 2</span><br>		iWidth,   <span class="cpp-comment">// Altura</span><br>		<span class="cpp-number">0</span>,        <span class="cpp-comment">// Numero de pixels que debe tener el borde la textura. Toma 0,1 o 2</span><br>		GL_RGBA,  <span class="cpp-comment">// Formato de la imagen.</span><br>		GL_UNSIGNED_BYTE, <span class="cpp-comment">// el tipo de datos en que va a ser pasada la informacion de la imagen cargada</span><br>		pImage    <span class="cpp-comment">// Puntero que apunta a la imagen.</span><br>		);<br>	<br><br><br><br>	<span class="cpp-comment">// Don't need the image data anymore</span><br>	free(pImage);<br>		<br><br><br>	<span class="cpp-comment">////TEXTURE FILTERS</span><br>	<span class="cpp-comment">////Cuando la imagen de la textura no se adecua con el tamaño de la superficie</span><br>	<span class="cpp-comment">////que se quiere cubrir.</span><br>	<span class="cpp-comment">////MIN_FILTER: cuando la superficie sea mayor que la imagen.</span><br>	<span class="cpp-comment">////MAX_FILTER: cuando la superficie sea menor que la imagen.</span><br>    <span class="cpp-comment">////GL_LINEAR: en escaso se ha optado por una interpolacion lineal. Hay 6 mas.</span><br>	<br>	glTexParameteri(GL_TEXTURE_2D, <br>		GL_TEXTURE_MIN_FILTER, <br>		GL_LINEAR <br>		);<br>		<br>	glTexParameteri(GL_TEXTURE_2D,<br>		GL_TEXTURE_MAG_FILTER,<br>		GL_LINEAR<br>		);<br><br><br><br>	<span class="cpp-comment">////WRAP FILTERS</span><br>	<span class="cpp-comment">////Cuando se pega la textura a una superficie debe indicarse la correspondecia</span><br>	<span class="cpp-comment">////entre las coordenadas de la textura y los vertices de dicha superficie.</span><br><br>	glTexParameteri(GL_TEXTURE_2D, <br>		GL_TEXTURE_WRAP_S,  <span class="cpp-comment">// Se repite o se estira hacia el lado s? de la textura.</span><br>		GL_CLAMP         <span class="cpp-comment">//La textura se puede estirar (GL_CLAMP) o se puede repetir (GL_REPEAT).</span><br>		);           <br><br><br>	glTexParameteri(GL_TEXTURE_2D, <br>		GL_TEXTURE_WRAP_T,  <span class="cpp-comment">// Se repite o se estira hacia el lado s? de la textura.</span><br>		GL_CLAMP    <span class="cpp-comment">//La textura se puede estirar (GL_CLAMP) o se puede repetir (GL_REPEAT).</span><br>		);         <br><br><br><br><br><br><br>	<span class="cpp-comment">////Una textura es un poster que adherimos al poligono, este poster lo podemos combinar con</span><br>	<span class="cpp-comment">////el color del poligono. Podemos elegir 4 modos de combinar el color del poligono con el </span><br>	<span class="cpp-comment">////color de la textura.</span><br>	glTexEnvi(GL_TEXTURE_ENV,  <span class="cpp-comment">//Obligatorio siempre.</span><br>		GL_TEXTURE_ENV_MODE,   <span class="cpp-comment">//Al poner aqui GL_TEXTURE_ENV_MODE, la siguiente linea puede valer GL_DECAL, GL_REPLACE (usan el color de la textura, ignoran el del poligono), GL_MODULATE o GL_BLEND.</span><br>		GL_REPLACE   <span class="cpp-comment">//</span><br>		);<br><br><br>	glEnable(GL_TEXTURE_2D);<br><br>	<br><br><br>}<br><br><br><span class="cpp-comment">///////////////////////////////////////////////////////////</span><br><span class="cpp-comment">// Called by GLUT library when the window has chanaged size</span><br><span class="cpp-keyword">void</span> ChangeSize(<span class="cpp-keyword">int</span> w, <span class="cpp-keyword">int</span> h)<br>	{<br>	GLfloat aspectRatio;<br><br>	<span class="cpp-comment">// Prevent a divide by zero</span><br>	<span class="cpp-keyword">if</span>(h == <span class="cpp-number">0</span>)<br>		h = <span class="cpp-number">1</span>;<br>		<br>	<span class="cpp-comment">// Set Viewport to window dimensions</span><br>    glViewport(<span class="cpp-number">0</span>, <span class="cpp-number">0</span>, w, h);<br><br>	printf(<span class="cpp-literal">"View\n\n"</span>);<br>	<br>	GLint viewport[<span class="cpp-number">4</span>];<br>	<br><br>	glGetIntegerv(GL_VIEWPORT, viewport);<br>	<br><br><br>	<span class="cpp-keyword">int</span> k;<br>	<br>	<span class="cpp-keyword">for</span> (k=<span class="cpp-number">0</span>; k&lt;<span class="cpp-number">4</span>; k++)<br>	{<br>	printf(<span class="cpp-literal">"%f\n"</span>, viewport[k]);<br>	}<br><br>	printf(<span class="cpp-literal">"\n\n"</span>);<br><br><br>	<span class="cpp-comment">// Reestablece el sistema de coordenadas antes de que se ejecute ninguna manipulacion de matr</span><br>	glMatrixMode(GL_PROJECTION);<br>	glLoadIdentity();<br><br>	<span class="cpp-comment">// Establish clipping volume (left, right, bottom, top, near, far)</span><br>	<br>	aspectRatio = (GLfloat)w / (GLfloat)h;<br>    <br>	<span class="cpp-keyword">if</span> (w &lt;= h) <br>		glOrtho (-<span class="cpp-number">100</span>.<span class="cpp-number">0</span>, <span class="cpp-number">100</span>.<span class="cpp-number">0</span>, -<span class="cpp-number">100</span> / aspectRatio, <span class="cpp-number">100</span>.<span class="cpp-number">0</span> / aspectRatio, <span class="cpp-number">200</span>.<span class="cpp-number">0</span>, -<span class="cpp-number">200</span>.<span class="cpp-number">0</span>);<br>    <br>	<span class="cpp-keyword">else</span> <br>		glOrtho (-<span class="cpp-number">100</span>.<span class="cpp-number">0</span> * aspectRatio, <span class="cpp-number">100</span>.<span class="cpp-number">0</span> * aspectRatio, -<span class="cpp-number">100</span>.<span class="cpp-number">0</span>, <span class="cpp-number">100</span>.<span class="cpp-number">0</span>, <span class="cpp-number">200</span>.<span class="cpp-number">0</span>, -<span class="cpp-number">200</span>.<span class="cpp-number">0</span>);<br><br><br>	<span class="cpp-keyword">int</span> j;<br><br>	<span class="cpp-keyword">float</span> array2[<span class="cpp-number">16</span>];<br><br>	glGetFloatv (GL_PROJECTION_MATRIX, array2);<br><br>	<span class="cpp-keyword">for</span> (j=<span class="cpp-number">0</span>; j&lt;<span class="cpp-number">16</span>; j++)<br>	{<br>	printf(<span class="cpp-literal">"%f\n"</span>, array2[j]);<br>	}<br>	<br>	printf(<span class="cpp-literal">"\n\n"</span>);<br><br>	<br>	glMatrixMode(GL_MODELVIEW);<br>	<br>	glLoadIdentity();<br>	<br>	glTranslatef(<span class="cpp-number">10</span>.0f, <span class="cpp-number">6</span>.0f, <span class="cpp-number">0</span>.0f);<br><br>	<span class="cpp-comment">//glRotatef(40.0f, 8.0f, 6.0f, 1.0f);</span><br><br>	glScalef(<span class="cpp-number">3</span>.0f, <span class="cpp-number">3</span>.0f, <span class="cpp-number">3</span>.0f);<br><br><br>	<span class="cpp-comment">//float array[16]={1, 0, 0, 3, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1};</span><br><br>	<span class="cpp-keyword">int</span> i;<br><br>	<span class="cpp-keyword">float</span> array[<span class="cpp-number">16</span>];<br><br>	glGetFloatv (GL_MODELVIEW_MATRIX, array);<br><br>	<br><br>	<span class="cpp-keyword">int</span> x=<span class="cpp-number">40</span>;<br>	<span class="cpp-keyword">int</span> y=<span class="cpp-number">36</span>;<br><br><br>	<br>	<br>	GLdouble modelview[<span class="cpp-number">16</span>];<br>	<br>	GLdouble projection[<span class="cpp-number">16</span>];<br><br>	GLfloat winX, winY, winZ;<br>	<br>	GLdouble posX, posY, posZ;<br><br><br>	glGetDoublev(GL_MODELVIEW_MATRIX, modelview);	<br><br><br>	<span class="cpp-keyword">for</span> (i=<span class="cpp-number">0</span>; i&lt;<span class="cpp-number">16</span>; i++)<br>	{<br>	printf(<span class="cpp-literal">"%f\n"</span>, modelview<span style="font-weight:bold;">);<br>	glGetDoublev(GL_PROJECTION_MATRIX, projection);<br>	}<br><br><br>	printf(<span class="cpp-literal">"\n\n"</span>);<br><br><br>	<span class="cpp-keyword">for</span> (j=<span class="cpp-number">0</span>; j&lt;<span class="cpp-number">16</span>; j++)<br>	{<br>	printf(<span class="cpp-literal">"%f\n"</span>, modelview[j]);<br>	}<br>	<br><br><br><br>	printf(<span class="cpp-literal">"\n\n"</span>);<br><br>	winX=(<span class="cpp-keyword">float</span>)x;<br>	<span class="cpp-comment">//winY=(float)y;</span><br>	winY=(<span class="cpp-keyword">float</span>)viewport[<span class="cpp-number">3</span>] - (<span class="cpp-keyword">float</span>)y;<br>	<br>	<br>	glReadPixels(x, <span class="cpp-keyword">int</span>(winY), <span class="cpp-number">1</span>, <span class="cpp-number">1</span>, GL_DEPTH_COMPONENT, GL_FLOAT, &amp;winZ);<br><br>	<span class="cpp-comment">//gluUnProject(winX, winY, winZ, modelview, projection, viewport, &amp;posX, &amp;posY, &amp;posZ);</span><br><br>	printf(<span class="cpp-literal">"%f"</span>, winZ);<br>	<br>	<span class="cpp-comment">//printf ("%f %f %f", posX, posY, posZ);	</span><br>	<br>	<br>	<br><br><br>	<br>	<span class="cpp-comment">//glMultMatrixf(array);</span><br><br><br><br><br>	}<br><br><br><span class="cpp-keyword">void</span> main (<span class="cpp-keyword">void</span>)<br>{<br><br><br><span class="cpp-comment">/*<br>InitDisplayMode: el modo de presentacion (display) que se usará al crear la ventana.<br>GLUT_SINGLE: usaremos una ventana de un solo buffer, pero en la mayoria del resto de <br>los casos (siempre que se requiera animacion) usaremos el doble buffer.<br>GLUT_RGB: modo de color que usaremos. (RGBA=RGB)<br>*/</span><br>	glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);<br>	<br>	glutInitWindowSize(<span class="cpp-number">200</span>, <span class="cpp-number">200</span>);<br><br>	glutInitWindowPosition(<span class="cpp-number">250</span>, <span class="cpp-number">250</span>);<br><br>	glutCreateWindow(<span class="cpp-literal">"Simple"</span>);<br>	<br>	<br><span class="cpp-comment">//OJO: RenderScene aparece arriba como funcion</span><br>	glutDisplayFunc(RenderScene);<br><br>	glutReshapeFunc(ChangeSize);<br><br><span class="cpp-comment">//OJO: RenderScene esta empalmada con otra funcion (mirar arriba)</span><br><span class="cpp-comment">//Establece el color de borrado de la pantalla pero no la borra.	</span><br>	SetupRC();<br><br>	<br><span class="cpp-comment">//Inicia la estructura principal de GLUT</span><br>	glutMainLoop();<br><br>	<br><br>}<br><br><br><br></pre></div><!–ENDSCRIPT–><br>

This topic is closed to new replies.

Advertisement