Escolar Documentos
Profissional Documentos
Cultura Documentos
Las funciones en OpenGL comienzan con el prefijo “gl” en minúsculas. OpenGL tiene
sus propios tipos en cuanto a variables se refiere: GLint, GLfloat, GLdouble.
1 Vértice = 1 punto
3f = 3 floats
glVertex3f(0.0, 0.0, 0.0);
glVertexfv(vertice);
glBegin(GL_TRIANGLES )
glEnd( )
Primero especificamos el color y TODO lo que dibujemos a partir de este momento, será
de ese color, en este caso el triángulo.
Respecto a las funciones que podemos usar en la función glBegin( ) tenemos entre otras:
GL_POINTS: para que todos los vértices indicados entre ambas funciones se
dibujen por separado a modo de puntos “libres”.
GL_LINES: cada 2 vértices definidos, se traza automáticamente una línea que
los une.
GL_POLYGON:se unen todos los vértices formando 1 polígono.
GL_QUADS:cada 4 vértices se unen para formar un cuadrilátero.
GL_TRIANGLES:cada 3 vértices se unen para formar un triángulo.
GL_TRIANGLE_STRIP: crea un triángulo con los 3 primeros vertices.
Entonces sucesivamente crea 1 nuevo triangulo unido al anterior usando los 2
últimos vértices que se han definido y el actual.
GL_QUAD_STRIP: igual que el anterior pero con cuadriláteros.
De hecho los tipos más usados son los 3 primeros mientras que el resto pueden sernos de
ayuda en casos determinados.
Usando GLU:
void gluSphere(GLUquadricObj *qobj, GLdouble radius, Glint
slices, Glint stacks);
Usando GLUT:
void glutSolidSphere(GLdouble radius, Glint slices, Glint
stacks);
Con radius definimos el radio que queremos para la esfera, con slices y stacks “la
partimos” como si de un globo terráqueo se tratara (paralelos y meridianos). En cuanto a
*qobj en la primera función, se trata de definir primero un objeto de tipo quadric con
otra función de GLU (gluNewQuadric) para después asociar la esfera a dicho objeto.
En estas funciones no se especifica la posición del objeto (por ejemplo: 1 esfera).
Es cierto y por lo tanto previamente al crearla, debemos especificar a OpenGL
donde queremos dibujarla. Lo podemos hacer con:
Coordenadas homogéneas:
Se acostumbra utilizar coordenadas cartesianas para representar los vértices que
definen a nuestra gemetria. Es decir, un punto es algo asi:
P(x, y, z)
Punto P1 =(x1, y1, z1) en cartesianas es P1= (x1, y1, z1, w1) en
homogéneas.
Vector v =(a, b, c) en cartesianas es v = (a, b, c, w) en homogéneas.
El cubo original es el de color rojo, que está centrado en el origen. El cubo escalado es el
de color verde, es 2 veces mayor que el original al haber efectuado un escalado de 2.0
sobre todas sus componentes. La matriz de escalado se mostrara más adelante.
Trasladar:
Esta es una matriz imposible de realizar en cartesianas sino se incluye una suma de
matrices. Pero no se quiere sumar sino multiplicar.
Rotación:
La rotación debe realizarse siempre alrededor de un determinado eje de
referencia. Podemos rotar alrededor del Eje X, Eje Y o Eje Z. Y según el caso la matriz
a aplicar será una o será otra.
El cubo rojo sigue estático en el origen. El cubo verde tiene exactamente las mismas
dimensiones pero se ha rotado 45° grados alrededor del eje vertical, que en este caso
es el eje Y y no el Z al que tanto nos hemos acostumbrado desde siempre. La matriz a
emplear se muestra más adelante.
Respecto al cambio del eje Y con el eje Z, hemos de pensar que en gráficos
siempre se utiliza al Z como unidad de profundidad, y no de altura.
Por parte de los ángulos:
El Angulo de rotación se define como positivo si supone girar en
dirección contraria a las manecillas del reloj (CCW- Counter ClockWise)
al mirar el eje sobre el que se rota de fuera hacia a dentro (mirar hacia
el origen).
Es decir:
Deformar:
Es la llamada transformación de “Shearing”. Consiste en hacer que alguna de las
componentes de un vértice varié linealmente en función con otra. Se trata por
ejemplo de alterar el valor de la X y de la Y en función del eje Z. Se consiguen efectos
de distorsión muy interesantes para ciertas animaciones. Aquí tenemos las matrices a
aplicar:
Se entiende que los valores Sxy, Sxz, Syx, etc. Son escalares reales, es decir números,
que nosotros mismos hemos de escoger para conseguir el efecto deseado.
Concatenación de transformaciones:
Si deseamos aplicar múltiples transformaciones a un determinado objeto geométrico
tenemos que concatenar una detrás de otra todas las matrices por las que sus vértices
deben multiplicarse. Para cada transformación creo una matriz, las multiplico todas y
obtengo una matriz resultante más o menos compleja. Esa es la matriz que apicare a
mis vértices para que se vean afectados “de golpe” por todas las transformaciones.
Implementación:
En cualquier aplicación o paquete gráfico, también en OpenGL por supuesto, toda la
geometría se ve afectada por CTM (Current Transformation Matrix) o Matriz de
Transformación Actual.
Lo primero que debe hacerse es inicializar la matriz. Esto se hace cargando en ella la
matriz identidad que es el elemento neutro de la multiplicación de matrices.
*glMatrixMode(GL_MODELVIEW);//activamos la matriz de
transformación.
Una vez hecho esto podemos acumular transformaciones sucesivas mediante las
funciones:
Escalar según sean los factores: sx, sy y sz.
glScalef(GLfloat sx, GLfloat sy, GLfloat sz);
Rotar el ángulo según el eje que define el vector (vx, vy, vz).
glRotatef(GLfloat angulo, GLfloat vx, GLfloat vy,
GLfloat vz);