Академический Документы
Профессиональный Документы
Культура Документы
mat-610
glBegin( GL_LINES ); glVertex2iv (p1); glVertex2iv (p2); glVertex2iv (p3); glVertex2iv (p4); glVertex2iv (p5); glEnd();
p2
p4
p3
glBegin( GL_LINE_STRIP ); glVertex2iv (p1); glVertex2iv (p2); glVertex2iv (p3); glVertex2iv (p4); glVertex2iv (p5); glEnd();
p1
p5
p4
p2
p3
p1
glBegin( GL_LINE_LOOP ); glVertex2iv (p1); glVertex2iv (p2); glVertex2iv (p3); glVertex2iv (p4); glVertex2iv (p5); glEnd();
p5
p4
Especicando vrtices
void glVertex{234}{sifd}[v]( TYPE coords );
Se pueden especicar desde 2 coordenadas (x,y) hasta 4 (x,y,z,w). Si no se especica z=0 y w=1. Las llamadas a glVertex*() solo son efectivas cuando se escriben entre el par glBegin() y glEnd().
glVertex2s(2,3); glVertex3d( 0.0, 0.0, 3.1415926535898 ); glVertex4f( 2.3, 1.0, -2.2, 2.0 ); GLdouble dvect[3] = {5.0, 9.0, 1992.0 }; glVertex3fv( dvect );
void glBegin( GLenum mode ); valor GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP GL_TRIANGLES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUADS GL_QUAD_STRIP GL_POLYGON
v1 v0 v1 v2 v4 v2 v0 v4 v3 v7 v3 v6 GL_POINTS GL_LINES v5
v0 v2 v3 v4 GL_LINE_STRIP v1 v1 v2
v0 v4 v5 v0 v2
v5
v3 v3 GL_LINE_LOOP v1 GL_TRIANGLES
v4
v0
v2
v4
v4
v3 v2
v7
v6
v0 v 2
v4
v6 v1
v0 v4 v2
v5 v1 v3 GL_TRIANGLE_STRIP
v0 v1 GL_TRIANGLE_FAN v0
v3
v2 v4 v1 GL_QUADS v5 v1 v5 v3 GL_QUAD_STRIP
v7 GL_POLYGON
v3
Limpiar la ventana
La memoria de despliegue almacena generalmente datos antes de dibujar. Por qu no solo dibujar un rectngulo del tamao y color de la imgen? porque el comando de limpieza est optimizado, la forma del rea de despliegue puede ser diferente a un rectngulo.
OpenGL & Qt
#ifndef GLWIDGET_H #define GLWIDGET_H #include <QGLWidget> class GLWidget : public QGLWidget { Q_OBJECT public: GLWidget( QWidget *parent=0 ); ~GLWidget(); protected: void initializeGL(); void paintGL(); }; #endif
void GLWidget :: initializeGL() { glClearColor( 0.0f, 0.0f, 0.0f, 1.0f ); // initialize other states ... } void GLWidget :: paintGL() { glClear( GL_COLOR_BUFFER_BIT ); // draw primitives ... }
Documentacin OpenGL
void glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha );
Sets the current clearing color for use in clearing color buffers in RGBA mode. The red, green, blue and alpha values are clamped if necessary to the range [0,1]. The default clearing color is (0, 0, 0, 0), which is black.
); ); ); ); ); ); ); );
// // // // // // // //
glGetBooleanv( GLenum pname, GLBoolean *params ); glGetIntegerv( GLenum pname, GLint *params ); glGetFloatv( GLenum pname, GLfloat *params ); glGetDoublev( GLenum pname, GLdouble *params ); glGetPointerv( GLenum pname, GLvoid **params );
0 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1
0x3F07
void glPolygonMode( GLenum face, GLenum mode ); face: GL_FRONT_AND_BACK, GL_FRONT, GL_BACK mode: GL_POINT, GL_LINE, GL_FILL glPolygonMode( GL_FRONT, GL_FILL ); glPolygonMode( GL_BACK, GL_LINE );
Polgonos en OpenGL
Por convencin los polgonos cuyos vrtices aparecen en orden contrario a las manecillas del reloj (CCW) en la pantalla se dicen orientados hacia el frente (front-facing). La mayora de los slidos pueden representarse con polgonos de orientacin consistente (orientable manifolds) - esfera, toros, teteras, conejos, etc... no orientados - botella de klein, banda de Mbius...
Polgonos en OpenGL
void glFrontFace( GLenum mode ); mode: GL_CCW, GL_CW.
Culling - operacin que evita desplegar ciertas caras del polgono, las de adentro o las de afuera, dependiendo de la posicin de la cmara.
void glCullFace( GLenum mode ); mode: GL_FRONT, GL_BACK, GL_FRONT_AND_BACK glEnable( GL_CULL_FACE ); glDisable( GL_CULL_FACE );
Polgonos en OpenGL
Un polgono puede dibujarse con un patrn de 32x32 bits. El argumento es una mscara de 0s y 1s. Cuando aparece 1 se dibuja el pixel, si es 0 no dibuja.
64
32
16
19
v1 v0
Vectores normales
Vector que apunta en la direccin perpendicular a una supercie (plana). Si la supercie es curva la direccin normal puede ser diferente en cada punto. En OpenGL se puede especicar una normal por polgono o por vrtice. Los vectores normales a un objeto denen la orientacin de su supercie, en particular relativamente a las fuentes de luz. (captulo 5) se usan para determinar cunta luz recibe en cada vrtice. (apndice E)
glBegin( GL_POLYGON ); glNormal3fv( n0 ); glVertex3fv( v0 ); glNormal3fv( n1 ); glVertex3fv( v1 ); glNormal3fv( n2 ); glVertex3fv( v2 ); glNormal3fv( n3 ); glVertex3fv( v3 ); glEnd();
glEnable( GL_NORMALIZE );