"Ningún juego dura tanto hasta que te lo terminas como el que te programas tú mismo,
ninguno te absorbe tanto y ninguno te produce tanta satisfacción cuando lo has acabado"
Programacion de videojuegos
Inicio Foro Sobre el curso de programación de juego... duda transformaciones modelview
Sábado 03 de Junio del 2023

Menu principal
Colaborar (con PayPal)

Para continuar con el trabajo de esta Web y poder pagar el hosting, viene bien la ayuda que sea. Gracias a todos.

Importe: 

Ultimas descargas
19.Jan

Clase que permite dibujar texto en OpenGL con mucha facilidad.Usa FreeType2.Para ver que hace y c...


 Foro de UnSitioWeb :: Sobre el curso de programación de juegos
Bienvenido/a Visitante   
Normas del foro   por Vicengetorix el 04-10-2009 02:30
 Asunto :duda transformaciones modelview.. 17-02-2015 13:53 
Buenacth
Incorporado: 09-02-2015 18:10
Posts: 4
Localización
Hola,

No se cómo funciona del todo lo de las transformaciones en opengl.
Me hago un lío porque se que combina lo del modelado y la cámara.
De modo que si hago un glRotate() no se si se mueve lo que sigue.. o si se desplaza la cámara. Lo mismo me pasa con el glRotate(), y con ésta además no se si rota sobre uno de los ejes del "mundo", o si lo hace sobre "un eje del objeto".
Por favor contestadme porque si no tardo mucho en avanzar.
Gracias por todo.
IP Logged
 Asunto :Respuesta:duda transformaciones modelview.. 17-02-2015 20:46 
Vicengetorix
Incorporado: 27-12-2008 18:54
Posts: 99
Localización
El glRotate se aplica sobre la matriz que este activa. Si pones glMatrixMode(GL_PROJECTION) el glRotate, glTranslate, ... modifica la camara. Si pones glMatrixMode(GL_MODELVIEW) los comandos posteriores modifican lo que pintes despues.
Estos comados modifican la matriz que esta activa.

El glRotate tiene 4 parametros, el primero cuanto se gira y los otros 3 indican el vector alrededor del que se gira.
Si rotas lo que vas a pintar, lo hara teniendo como base la coordenada 0,0,0. Asi cuando pintes algo lo mejor es que rotes el objeto como quieras y luego lo muevas a donde quieras que este (primero rotate y luego translate), esto es como rotar el ojteto sobre su propio eje. Si lo haces al reves estaras rotando el objero sobre el eje del "mundo".
IP Logged
 Asunto :Respuesta:duda transformaciones modelview.. 18-02-2015 19:47 
Buenacth
Incorporado: 09-02-2015 18:10
Posts: 4
Localización
Muchas Gracias por contestar Vigencetorix, he entendido lo que me has explicado. Lo de la matriz actual. Llevo toda la tarde en el curro (no hay trabajo) jugando a ver. Pero no lo acabo de comprender completamente.
Os pondria un ejemplo de algo que no entiendo, os agradecería las respuestas.

el código que utilizo es el siguiente.
Lo que no entiendo es.. que al hacer el render del triangulo con el metodo inmediato.. al poner 0 en profundidad del eje z, es decir un triangulo plano.. "El triangulo da vueltas sobre si mismo" "Pero no está centrado en el eje 0,0,0 ya que antes lo he desplazado 80 sobre el ejez". "No debería ver como da vueltas alrrededor del punto 0.0.0?
Y cuando le doy más z desde el render si que da vueltas sobre el "mundo".
Code:
//...FIN DE LA CREACIÓN DEL CONTEXTO DE RENDER........... //..INICIAMOS PARAMETROS MÍNIMOS DE OPENGL................. glEnable(GL_DEPTH_TEST); //Permite la prueba de openg (me parece que activa la profundidad) glClearColor(0.0f, 0.0f, 0.0f, 0.0f); //Establece el color de fondo que tomará después del glclear.. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //El equivalente al borrar pantalla //glLoadIdentity(); //Toma valor por defecto //........ESTA PARTE ES IMPORTANTISIMA...SIN ELLA LAS TRANSFORMACIONES DE MODELADO NO IRAN BIEN...LOS TRANSLATES ETC... glMatrixMode(GL_PROJECTION); gluPerspective(45.0f, float(width) / float(height), 1.0f, 100.0f); //glViewport(0, 0, width, height); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //......................................................... //glMatrixMode(GL_PROJECTION); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glTranslatef(0.0f, 0.0f, -80.0f); //glMatrixMode(GL_MODELVIEW); SwapBuffers(m_hdc); float angulo=1.5f; for (int counter=0; counter<1000; counter++){ for (int counter2=0; counter2<10000000; counter2++); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glRotatef(angulo, 0, 1, 0); glBegin(GL_TRIANGLES); glColor4f(5.0, 0.0, 0.0, 1.0); glVertex3f(0.0, 8.0, 10.0); glColor4f(0.0, 1.0, 0.0, 1.0); glVertex3f(-4.0, 0.0, 10.0); glColor4f(0.0, 0.0, 1.0, 1.0); glVertex3f(+4.0, 0.0, 10.0); glEnd(); SwapBuffers(m_hdc); }
IP Logged
 Asunto :Respuesta:duda transformaciones modelview.. 21-02-2015 01:45 
Vicengetorix
Incorporado: 27-12-2008 18:54
Posts: 99
Localización
Normal, primero mueves y luego vas girando en un bucle. Prueba a girar y luego mover.
IP Logged
Página # 


Powered by ccBoard




Banner