/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Dudas varias sobre Opengl y más...
Ir a página 1, 2  Siguiente
 
      Índice del Foro elrincondelc.com -> Gráficos
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
kingfoslide54



Registrado: 25 Dic 2006
Mensajes: 75

MensajePublicado: 05/06/2007 9:14 am
Título: Dudas varias sobre Opengl y más...

Edito: cambio el título por no abrir un nuevo hilo por cada duda
******************
Buenas!

Estoy (de nuevo) currándome una función de carga de .x de texto. Esta vez me está saliendo mucho más estable y robusta, pero me faltan algunos flecos por implementar.

Me he topado con un muro que de momento no sé por dónde atacar: el TransfomMatrix o matriz de transformación del Frame.

En los .x de texto es una matriz 4x4. parece que los tres primeros valores de la última fila son el desplazamiento en los ejes x, y y z. Al menos, eso me ha parecido moviendo cajas y leyendo el .x, y el programa parece corroborar esta teoría.

Pero cuando hablamos de rotación... uffff

cuando roto el elemento, y leo .x, el transformatrix varía de una forma a la que no he conseguido encontrar ninguna lógica. Ni a los valores, ni a qué valores cambian.

Desconozco si otros formatos tienen matrices de transformación similares, pero si alguien me pudiese arrojar un poco de luz sobre el tema, aunque fuese de una forma aproximada, estaría muy agradecido.

Un saludo!


Ultima edición por kingfoslide54 el 07/06/2007 2:10 am; editado 1 vez
Volver arriba
Killrazor



Registrado: 24 Ene 2006
Mensajes: 1182
Ubicación: Barcelona

MensajePublicado: 05/06/2007 9:52 am
Título:

Si es una matriz 4x4 lo mas seguro es que sea una matriz de transformacion normal y corriente. Esto que quiere decir? Cuando haces un glTranslate o un glRotate lo que haces es mandar una matriz que contiene el angulo de desplazamiento y rotacion respectivamente. Pero puede haber matrices que tengan rotaciones y traslaciones juntas ya precalculadas. Para usar la matriz simplemente haz
Código:

glMultatrix(matriz);
dibujarframe();

El push y el pop lo haces solo si es necesario.
_________________
I wanna heal i wanna feel like I'm close to something real.
I wanna find something I've wanted all along
somewhere i belong
Volver arriba
kingfoslide54



Registrado: 25 Dic 2006
Mensajes: 75

MensajePublicado: 05/06/2007 10:28 am
Título:

Killrazor escribió:
Si es una matriz 4x4 lo mas seguro es que sea una matriz de transformacion normal y corriente. Esto que quiere decir? Cuando haces un glTranslate o un glRotate lo que haces es mandar una matriz que contiene el angulo de desplazamiento y rotacion respectivamente. Pero puede haber matrices que tengan rotaciones y traslaciones juntas ya precalculadas. Para usar la matriz simplemente haz
Código:

glMultatrix(matriz);
dibujarframe();

El push y el pop lo haces solo si es necesario.



Michas gracias, Killrazor. Por ahí van los tiros.

No me pone las cosas exactamente bien (probablemente porque la matriz del .x no esté ordenada exactamente igual que en otros formatos) pero desde luego se parece Laughing ... me refiero a que traslada y rota las cosas en la medida que toca, pero en todos los casos, excepto el elemento que tiene la matriz identidad, hacia adelante en vez de hacia atrás, etc.

Tal vez deba probar a invertir la matriz...

un saludo!
Volver arriba
kingfoslide54



Registrado: 25 Dic 2006
Mensajes: 75

MensajePublicado: 05/06/2007 10:36 am
Título:

Pues no, no era tan sencillo como invertir la matriz...

Pero me voy acercando.

Un saludo!
Volver arriba
kingfoslide54



Registrado: 25 Dic 2006
Mensajes: 75

MensajePublicado: 05/06/2007 4:46 pm
Título:

Al final lo he conseguido... pasando a negativo tres valores de la matriz, a base de provar cambios, combinarlos... no era tan sencillo como hacer la matriz inversa, o darle la vuelta en horizontal o vertical...

Y ojo, que seguro que con otros archivos con una tm má compleja aún no va bien.

De momento ya tengo ésto:

Volver arriba
Killrazor



Registrado: 24 Ene 2006
Mensajes: 1182
Ubicación: Barcelona

MensajePublicado: 06/06/2007 1:31 am
Título:

Creo que el problema es que OpenGL usa coordenadas right hand y el .x esta pensado para DirectX que es left hand. Esto significa que en cada sistema la Z positiva va para un lado diferente.
_________________
I wanna heal i wanna feel like I'm close to something real.
I wanna find something I've wanted all along
somewhere i belong
Volver arriba
kingfoslide54



Registrado: 25 Dic 2006
Mensajes: 75

MensajePublicado: 06/06/2007 1:53 am
Título:

En todos los exportadores de .x que he visto, te da la opción de cambiar a right-hand, y siempre he trabajado con archivos en los que había usado esa opción.

De todas formas, por la guerra que me dio sospecho que no se trata de un solo valor negativo... porque los probé todos individualmente.

Muchas gracias por tu ayuda, Killrazor.

P.D: ¿Alguien sabe cómo activar o desactivar el 2sided en gl?

Un saludo!
Volver arriba
Killrazor



Registrado: 24 Ene 2006
Mensajes: 1182
Ubicación: Barcelona

MensajePublicado: 06/06/2007 2:31 am
Título:

Activarlo asi:
Código:

glEnable(GL_CULL_FACE);


Para usarlo
Código:

glCull(GL_FRONT);


Donde para seleccionar caras puedes usar GL_FRONT, GL_BACK, GL_FRONT_AND_BACK....
_________________
I wanna heal i wanna feel like I'm close to something real.
I wanna find something I've wanted all along
somewhere i belong
Volver arriba
kingfoslide54



Registrado: 25 Dic 2006
Mensajes: 75

MensajePublicado: 06/06/2007 2:45 am
Título:

Muchas gracias!


Ahora me estoy peleando con la recogida de eventos del joystick por SDL... me ha funcionado, y luego un cambio que no debería tener nada que ver ha hecho que me deje de funcionar.

Cómo me gusta pelearme con el C Laughing
Volver arriba
kingfoslide54



Registrado: 25 Dic 2006
Mensajes: 75

MensajePublicado: 06/06/2007 2:55 am
Título:

ya que estamos, comento, porque no entiendo muy bien lo que pasa...

si uso SDL_Init( SDL_INIT_EVERYTHING) funciona, pero luego no puedo cerrar la ventana... (no estoy usando opengl sobre sdl, debe ser por eso)

En cambio, si quito el EVERYTHING y pongo:

SDL_Init( SDL_INIT_JOYSTICK )
SDL_Init( SDL_INIT_EVENTTHREAD)

que en teoría sería lo necesario, desaparece el problema de cerrar la ventana pero el joystick no funciona.

Por cierto, no sé cómo recoger los eventos de la "seta" derecha en sdl. ¿Alguien podría decirme cómo?
Volver arriba
kingfoslide54



Registrado: 25 Dic 2006
Mensajes: 75

MensajePublicado: 06/06/2007 3:02 am
Título:

Vale, lo de la seta derecha lo voy pillando. Son sólo más ejes del joystick.

Sin embargo, sólo puedo recoger 3 ejes.

El 0 es el eje x de la seta izquierda, el 1 el y, el 2 es el x de la seta derecha, pero el tres no es el y, o al menos no actúa como tal.

Sigo toqueteando.

Un saludo!
Volver arriba
kingfoslide54



Registrado: 25 Dic 2006
Mensajes: 75

MensajePublicado: 06/06/2007 3:10 am
Título:

El compilador me dice que no he declarado glCull...

con glEnable(GL_CULL_FACE) ningún problema, pero sin el cull, me saca la parte que no es de las caras:D

Un saludo.
Volver arriba
Killrazor



Registrado: 24 Ene 2006
Mensajes: 1182
Ubicación: Barcelona

MensajePublicado: 06/06/2007 4:01 am
Título:

Sorry, las prisas son muy malas y mi memoria peor!!!
Código:

glCullFace(GL_FRONT); //o lo que sea

_________________
I wanna heal i wanna feel like I'm close to something real.
I wanna find something I've wanted all along
somewhere i belong
Volver arriba
kingfoslide54



Registrado: 25 Dic 2006
Mensajes: 75

MensajePublicado: 06/06/2007 6:24 am
Título:

Killrazor escribió:
Sorry, las prisas son muy malas y mi memoria peor!!!
Código:

glCullFace(GL_FRONT); //o lo que sea


Así sí

asias Wink
Volver arriba
kingfoslide54



Registrado: 25 Dic 2006
Mensajes: 75

MensajePublicado: 07/06/2007 2:15 am
Título:

Tengo más dudas Laughing (si alguien sabe las respuestas, le estaría muy agradecido, que al pobre Killrazor lo debo llevar frito ya con tanta pregunta:lol: )

Bueno, sigo sin poder solucionar esto:
Cita:
ya que estamos, comento, porque no entiendo muy bien lo que pasa...

si uso SDL_Init( SDL_INIT_EVERYTHING) funciona, pero luego no puedo cerrar la ventana... (no estoy usando opengl sobre sdl, debe ser por eso)

En cambio, si quito el EVERYTHING y pongo:

SDL_Init( SDL_INIT_JOYSTICK )
SDL_Init( SDL_INIT_EVENTTHREAD)

que en teoría sería lo necesario, desaparece el problema de cerrar la ventana pero el joystick no funciona.


Aparte, me gustaría saber cómo hacer que OpenGl no dibuje los píxeles de un determinado color en una textura... en los tutoriales de Nehe hay uno, pero es usando dos texturas, la que se quiere mostrar y un mask, y además sólo se puede hacer con el color negro como color clave. No quiero usar canal Alfa, porque no quiero que sea transparente, sino que no se dibuje (por ejemplo, para las ramas de lo árboles, vallas, etc).

De momento es todo... eso, de momento Laughing
Volver arriba
      Índice del Foro elrincondelc.com -> Gráficos
Página 1 de 2Todas las horas están en GMT - 8 Horas
Ir a página 1, 2  Siguiente

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com