elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  c++ Opengl problema no puedo hacer un correcto movimiento de cámara con rotación
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: c++ Opengl problema no puedo hacer un correcto movimiento de cámara con rotación  (Leído 2,924 veces)
zargonori

Desconectado Desconectado

Mensajes: 1


Ver Perfil
c++ Opengl problema no puedo hacer un correcto movimiento de cámara con rotación
« en: 13 Noviembre 2015, 21:03 pm »

estoy trabajando iluminación y sólidos de rotación con malla poligonal en mi clase. pero el problema que tengo es que para poder ver toda la escena necesito poder mover mi cámara apropiadamente, rotando y trasladandola cuanto desee, siempre caminando hacia donde mire.

pero
-si roto y después traslado la cámara caminara en una dirección incorrecta.
-si translado y después roto, rotara sobre su centro.
-y si convino traslaciones para reparar la rotación la traslación se daña y viceversa.

por si acaso esta es mi cámara actual

-todas mis variables están inicializadas en 0 y son flotantes
-r es mi angulo de rotación
-y f es una variable que aumento y disminullo por teclado para controlar el caminado

glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
gluPerspective(65.0, 2 / 1, 1, 10);
float m[9];
   m[0] = cos(r);      m[3] = 0;      m[6] = sin(r);
   m[1] = 0;         m[4] = 1;      m[7] = 0;
   m[2] = -sin(r);      m[5] = 0;      m[8] = cos(r);
   
      
   float n[3];
   n[0] = d + f*dd + 0.0001*dd;
   n[1] = e;
   n[2] = (ss + f*jj) + 0.0001*jj;
   
   d = m[0] * n[0] + m[3] * n[1] + m[6] * n[2];
   e = (A*cos(W*tiempo) + H);
   j = m[2] * n[0] + m[5] * n[1] + m[8] * n[2];
   

   float w[3];
   w[0] = 0;
   w[1] = e;
   w[2] = 1;

   dd = m[0] * w[0] + m[3] * w[1] + m[6] * w[2];
   ee = (A*cos(W*tiempo) + H);
   jj = m[2] * w[0] + m[5] * w[1] + m[8] * w[2];

   gluLookAt(d+f*dd, e, ss+f*jj, d, e, j, 0, 1, 0);

por favor si me pudieran decir la forma correcta en que debo trasladar y girar mi cámara para poder siempre caminar hacia donde miro y rotar sobre mi eje se los agradeceria.

post-data: primera ves que uso este foro, no supe como utilizar bien lo de incluir codigo.Ademas me disculpo si cometo errores ortográficos.


En línea

class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: c++ Opengl problema no puedo hacer un correcto movimiento de cámara con rotación
« Respuesta #1 en: 13 Noviembre 2015, 22:22 pm »

Primero, no deberías usar las versiones de OpenGL antiguas. Lo segundo: lo primero que se ha de hacer es trasladar y luego rotar. No sé muy bien como iba en las versiones anteriores a la 3, pero lo que tendrías que hacer es lo siguiente:

projectionMatrix*(rotationMatrix*(translateMatrix*GL_MODELVIEW_MATRIX))

Cuando traslades el objeto, ten en cuenta el ángulo

Código
  1. if(wKeyIsPressed) {
  2.    position.z += K * cos(fAngleY); // La K es una constante
  3.    position.x -= K * sin(fAngleY);
  4. }
Y así con todas las teclas

Corregidme si me equivoco, pues suelo tratar con temas de renderizado y todo eso, no estoy acostumbrado a trasladar, rotar, ni cámaras... (si, suena estúpido, pero es así :P)


« Última modificación: 14 Noviembre 2015, 20:40 pm por class_OpenGL » En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
6666

Desconectado Desconectado

Mensajes: 146


Wikileaks.org


Ver Perfil
Re: c++ Opengl problema no puedo hacer un correcto movimiento de cámara con rotación
« Respuesta #2 en: 13 Noviembre 2015, 22:26 pm »

Para manipular c++ con mayor precision y coherencia es usar estructuras  o clases y punteros, no puedes manipular la info de cualquier manera,


Ejemplo:

int A;
int *pA;

pA = &A;

Supongamos 2 estructuras .. una coordenadas de movimiento y otras camara ..

por concepto las estructuras contendran las mismas variables declaradas:

Asi que te refieres a ellas:

int A;
int *pA;

pA = &A;

Y usaras una referencia para las dos funciones, creando una struct puedes modificarlas agregandole unos numeros mas para que la camara se diferencie.

Lo que tiene tu code es declaraciones sintetizadas, lo que hace empeorar la lectura, obviamente necesitas una clase y sus constructores/destructores correspondientes.

« Última modificación: 13 Noviembre 2015, 22:32 pm por 6666 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Movimiento y rotación de balon [Tutorial - flash] by xSkyPagex
Diseño Gráfico
xSkyPagex 0 17,415 Último mensaje 7 Abril 2010, 05:33 am
por xSkyPagex
Subri camara en OpenGl
Programación C/C++
Monica_Barcelona 1 2,052 Último mensaje 18 Mayo 2010, 06:36 am
por Foxy Rider
opengl rotacion
Programación C/C++
mapers 0 4,029 Último mensaje 28 Octubre 2010, 04:13 am
por mapers
AffineTransform rotación y movimiento
Java
gelpack 1 2,440 Último mensaje 24 Mayo 2013, 04:07 am
por crozz2
¿El movimiento de rotación y el de translación tiene algo que ver con el clima?
Foro Libre
RevolucionVegana 2 2,843 Último mensaje 8 Noviembre 2016, 22:00 pm
por Orubatosu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines