Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: zargonori en 13 Noviembre 2015, 21:03 pm



Título: c++ Opengl problema no puedo hacer un correcto movimiento de cámara con rotación
Publicado por: zargonori 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.


Título: Re: c++ Opengl problema no puedo hacer un correcto movimiento de cámara con rotación
Publicado por: class_OpenGL 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)


Título: Re: c++ Opengl problema no puedo hacer un correcto movimiento de cámara con rotación
Publicado por: 6666 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.