studio - opengl c++
RotaciĆ³n OpenGL (6)
Estoy intentando hacer una rotación simple en OpenGL, pero me falta el punto. No estoy buscando una solución específica, sino una explicación o enlace rápido que explique la rotación de OpenGL de manera más general.
Por el momento tengo un código como este:
glPushMatrix();
glRotatef(90.0, 0.0, 1.0, 0.0);
glBegin(GL_TRIANGLES);
glVertex3f( 1.0, 1.0, 0.0 );
glVertex3f( 3.0, 2.0, 0.0 );
glVertex3f( 3.0, 1.0, 0.0 );
glEnd();
glPopMatrix();
Pero el resultado no es un triángulo girado 90 grados.
Editar Gracias, Hmm, a Mike Haboustak. Al parecer, mi código llamaba a una función de SetCamera que utiliza glOrtho. Soy demasiado nuevo para OpenGL como para tener una idea de lo que esto significaba, pero inhabilitar esto y rotar en el eje Z produjo el resultado deseado.
¿Obtienes una unidad de línea recta? Parece que la descomposición de 90deg. alrededor de Y te hará mirar al costado de un triángulo sin profundidad.
Deberías intentar girar alrededor del eje Z y ver si obtienes algo que tenga más sentido.
OpenGL tiene dos matrices relacionadas con la visualización de geometría, ModelView y Projection. Ambos se aplican a las coordenadas antes de que los datos se vuelvan visibles en la pantalla. Primero se aplica la matriz ModelView, transformando los datos del espacio modelo en espacio de visualización. Luego se aplica la matriz de proyección con transforma los datos del espacio de visualización para "proyección" en su monitor 2D.
ModelView se usa para colocar múltiples objetos en sus ubicaciones en el "mundo", la proyección se usa para colocar los objetos en la pantalla.
Tu código parece correcto, así que supongo que al leer la documentación sabes cuál es la naturaleza de funciones como glPushMatrix (). Si girar alrededor de Z todavía no tiene sentido, verifique que está editando la matriz ModelView llamando a glMatrixMode.
Asegúrese de que está modificando la matriz de modelos de vista colocando lo siguiente antes de la llamada glRotatef:
glMatrixMode(GL_MODELVIEW);
De lo contrario, puede modificar la proyección o una matriz de textura en su lugar.
Cuando eché un primer vistazo a OpenGL, los tutoriales de NeHe (ver el menú de la izquierda) fueron invaluables.
Me gustaría recomendar un libro:
Gráficos por computadora en 3D: una introducción matemática con OpenGL por Samuel R. Buss
Proporciona explicaciones muy claras, y las matemáticas son ampliamente aplicables a dominios no gráficos. También encontrará una descripción detallada de las proyecciones ortográficas frente a las transformaciones de perspectiva.
La "respuesta aceptada" no es totalmente correcta: girar alrededor de la Z no te ayudará a ver este triángulo a menos que hayas hecho algunas cosas extrañas antes de este código. La eliminación de una llamada glOrtho (...) podría haber corregido el problema en este caso, pero todavía tiene un par de otros problemas.
Dos problemas principales con el código tal como está escrito:
¿Ha posicionado la cámara previamente? En OpenGL, la cámara se encuentra en el origen, mirando hacia abajo el eje Z, con Y positivo hacia arriba. En este caso, el triángulo se dibuja en el mismo plano que su ojo, pero arriba y hacia la derecha. A menos que tengas una matriz de proyección muy extraña, no la verás. gluLookat () es el comando más fácil para hacer esto, pero cualquier comando que mueva la matriz actual (que debería ser MODELVIEW) puede hacerse funcionar.
Está dibujando el triángulo con la mano izquierda o con el sentido de las agujas del reloj, mientras que el valor predeterminado para OpenGL es un sistema de coordenadas hacia la derecha o hacia la izquierda. Esto significa que, si está eliminando caras traseras (que probablemente no sea, pero probablemente avance a medida que avanza más), no verá el triángulo como se esperaba. Para ver el problema, coloque su mano derecha frente a su cara e, imaginando que está en el plano XY, mueva sus dedos en el orden en que dibuja los vértices (1,1) a (3,2) a (3,1 ) Cuando hagas esto, tu pulgar estará alejado de tu cara, lo que significa que estás mirando hacia la parte posterior del triángulo. Debes adquirir el hábito de dibujar rostros con un método diestro, ya que esa es la manera común en que se hace en OpenGL.
Lo mejor que puedo recomendar es usar los tutoriales de NeHe - http://nehe.gamedev.net/ . Comienzan por mostrarle cómo configurar OpenGL en varios sistemas, avanzar en triángulos de dibujo y continuar de forma lenta y segura a temas más avanzados. Son muy fáciles de seguir.
Con respecto a la matriz de proyección, puede encontrar una buena fuente para comenzar aquí:
http://msdn.microsoft.com/en-us/library/bb147302(VS.85).aspx
Explica un poco sobre cómo construir un tipo de matriz de proyección. La proyección ortográfica es la forma más básica / primitiva de dicha matriz y básicamente lo que hace es tomar 2 de las 3 coordenadas de los ejes y proyectarlas a la pantalla (aún puedes voltear ejes y escalarlos pero no hay deformación o efecto de perspectiva) .
la transformación de matrices es una de las cosas más importantes cuando se renderiza en 3D y básicamente involucra 3 etapas de matriz:
- Transform1 = Sistema de coordenadas de objetos a World (por ejemplo, rotación y escala de objetos)
- Transform2 = Sistema de coordenadas mundiales a la cámara (colocando el objeto en el lugar correcto)
- Transform3 = Sistema de coordenadas de la cámara para el espacio de la pantalla (proyectar a la pantalla)
Habitualmente, el resultado de la multiplicación de 3 matrices se conoce como la matriz WorldViewProjection (si alguna vez topa con este término), ya que transforma las coordenadas del espacio modelo a través del mundo, luego a la cámara y finalmente a la representación en pantalla.
Que te diviertas