Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Primitivas PDF
Primitivas PDF
Dibujo en 3D
Las libreras grficas antiguas permiten trabajar con puntos 2D (pixels) OpenGL no trabaja con coordenadas de pantalla, sino con coordenadas posicionales dentro del volumen de visualizacin El trasladar toda la escena 3D a la pantalla se realiza automticamente
y
(0,100,0)
(-100,0,0)
(100,0,0)
x
(0,-100,0)
z
glOrtho(-100,100,-100,100,100,-100)
Dibujo de puntos
glBegin(GL_POINTS); glVertex3s (0, 0, 50); glVertex2f (-50.0, 50.0); glEnd();
(-50,50,0)
(0,0,50)
y
(0,100,0) (-50,50,0)
(0,0,50)
Dibujo de polilneas
glBegin(GL_LINES_STRIP); glVertex3s (0, 0, 50); glVertex2f (-50.0, 50.0); glVertex3s (0, 100, 0); glVertex3s (-100, 100, -100); glEnd();
(-100,100,-100)
y
(0,100,0) (-50,50,0)
(0,0,50)
Patrones de lneas
Para dibujar lneas discontinuas primero hay que activar el modo:
void glEnable (GL_LINE_STIPPLE)
patron = 0x 5
0101010101010101
factor = 3
Dibujo de tringulos
A partir de ahora, las lneas representan polgonos --> reas La mayora del hardware 3D est optimizado para tringulos
glBegin(GL_TRIANGLES); glVertex2f (-50.0, 50.0); glVertex3s (0, 100, 0); glVertex3s (-100,100,-100); ... glEnd();
(-100,100,-100)
y
(0,100,0)
(-50,50,0)
glBegin(GL_TRIANGLES); glVertex3s (); // vrtice V0 glVertex3s (); // vrtice V1 glVertex3s (); // vrtice V2 glVertex3s (); glVertex3s (); glVertex3s (); ... glEnd(); // vrtice V3 // vrtice V4 // vrtice V5
V2
Sentido antihorario
V0 V4
V1
Sentido horario
V3
V5
Modos de dibujo
Por defecto, los polgonos se dibujan slidos (sin aristas) Otras opciones son: hueco con aristas o slo mostrando los vrtices Cada cara puede mostrarse de forma diferente
void glPolygonMode (GLenum cara, GLenum modo) GL_BACK GL_FRONT_AND_BACK GL_FRONT GL_FILL
GL_LINE GL_POINT
V2
Mallas de tringulos
Para dibujar tiras de tringulos:
V0 V1
glBegin(GL_TRIANGLE_STRIP); glVertex3s (); // vrtice glVertex3s (); // vrtice glVertex3s (); // vrtice glVertex3s (); // vrtice glVertex3s (); // vrtice ... glEnd();
V0 V1 V2 V3 V4 V0
V2
V3
V1 V4
Ventajas:
slo se especifica un vrtice por tringulo mejores efectos de iluminacin al sombrear la superficie total V0
V2
V3
V1
V2
Abanicos de tringulos
Para dibujar abanicos de tringulos:
V0 V1
glBegin(GL_TRIANGLE_FAN); glVertex3s (); // vrtice glVertex3s (); // vrtice glVertex3s (); // vrtice glVertex3s (); // vrtice glVertex3s (); // vrtice ... glEnd();
V0 V1 V2 V3 V4
V3
V2
V0
V1
V3
V2
V4
V0
V1
Cuadrilteros
Existe hardware de aceleracin para polgonos de ms de 3 lados
//V0 //V1 //V2 //V3
y
(0,100,0) (-50,50,0) (100, 0,0) (100, 100,0)
glBegin(GL_QUADS); glVertex2s (-50, 50); glVertex2s (100, 0); glVertex2s (100,100); glVertex2s (0,100); ... glEnd();
z
V3
V0 V2
V1
Mallas de cuadrilteros
Para dibujar tiras de cuadrilteros:
V0
V3
V2 glBegin(GL_QUAD_STRIP); glVertex3s (); // vrtice glVertex3s (); // vrtice glVertex3s (); // vrtice glVertex3s (); // vrtice glVertex3s (); // vrtice glVertex3s (); // vrtice ... glEnd(); V0 V1 V2 V3 V4 V5 V2 V5
V1
V4
Ventajas:
slo se especifican dos vrtices por polgono mejores efectos de iluminacin al sombrear la superficie total V1 V0 V3
Polgonos generales
Para cualquier nmero de lados
(-50,50,0)
y
(0,100,0) (100, 100,0)
glBegin(GL_POLYGON); glVertex2s (-50, 50); glVertex2s (0, 0); glVertex2s (100,0); glVertex2s (100,100); glVertex2s (0,100); ... glEnd();
(0,0,0)
(100, 0,0)
z
V4
V0
V3
V1
V2
Relleno de polgonos
Para rellenar con un patrn primero hay que activar el modo:
void glEnable (GL_POLYGON_STIPPLE)
0x0A
0x94
Polgonos vlidos
Polgonos no vlidos
Subdivisin y bordes
Un polgono cncavo puede representarse como varios convexos Si se dibuja relleno, los bordes no se apreciarn
glEdgeFlag(TRUE); // a partir de aqu, las aristas son visibles glVertex3s(); ... glEdgeFlag(FALSE); // a partir de aqu, las aristas no se ven glVertex3s(); ...
Visualizacin de objetos 3D
Las superficies de los objetos estarn formados por varias primitivas Para resolver el problema de visibilidad
glEnable (GL_DEPTH_TEST) glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
Para acelera el proceso, podemos indicar que no se visualizen las caras traseras de los polgonos
glEnable (GL_CULL_FACE)