Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - PIM

#31
Parece más lógico así. Sin embargo el problema sería hacer la multiplicación de matrices en tiempo real, y eso lleva "mucho" tiempo computacionalmente hablando. ¿Conoces algún modo eficiente y rápido de hacer esto?

Muchas gracias por tu respuesta.
;)
#32
Programación gráfica / Re:Trabajo con Cuaterniones
13 de Marzo de 2013, 12:17:42 AM
Gracias. Por el tamaño del trabajo se ve que eres experto en estas cuestiones  8o.

Sin embargo el problema es que yo soy medio lento para captar las ideas, cuando no me las explican con manzanas.  ^_^'

No sé si me puedas simplificar las cosas un poco: veamos a + bi + cj + dk ¿Como se representa  usando C/C++?

Sea "a" un número real (NO PROBLEM) pero luego los números bi, cj y dk..... ¿What?

Dado que para lo único que quiero los cuaterniones es para las rotaciones y el escalado ¿Qué debo rotar? ¿Un vector?  y por último; OpenGL no maneja cuaterniones, por lo que tendría que convertir los cuaterniones a matriz o ¿no?

Perdona mi ignorancia y ojalá me puedas ayudar.

Saludos.
;)
#33
Programación gráfica / Trabajo con Cuaterniones
12 de Marzo de 2013, 06:52:12 PM
Hola de nuevo amigos de esta estupenda web. Para no variar  ^_^', solicitando de nuevo su amable ayuda con este tema que desde hace un tiempo me da vueltas en la cabeza.

He leído a cerca de que usando cuaterniones es más sencillo trabajar con rotaciones. El problema es que no se como implementarlos usando lenguaje C y OpenGL.

Según entiendo, un cuaternión es una representación de la forma:

a + bi + cj + dk

en donde se tiene una parte real (a) y tres imaginarias (bi, cj, dk).

Bueno pero, ¿Cómo represento un cuaternión usando C? ¿Cómo lo implemento en OpenGL?

Ojalá alguien me pueda ayudar.

Muchas gracias.
:D
#34
Programación gráfica / Re:De direct3d9 a OpenGL
10 de Marzo de 2013, 11:59:53 PM
Cita de: Manu343726 en 10 de Marzo de 2013, 11:24:13 AM
A algunos les podría parecer una pérdida de tiempo, ya que después tendré que tirar todos esos conocimientos a la basura y ponerme con shaders, pero es un cambio más progresivo.

Me alegra haberte ayudado. ¿Sabes?  yo no lo veo como que esos conocimientos los vas a tirar a la basura. Sin bien es cierto que en las versiones más actuales de OpenGL muchas funcionalidades fueron marcadas como "Deprecated" (obsoletas) Lo cierto es que me parece que la versión 4.0 o 4.1 tiene retro-compatibilidad con muchas de ellas.

Además déjame te comento que el uso de shaders se hace a partir del conocimiento previo del fix pipeline. Querer hacerlo de modo directo significará tropiezo tras tropiezo, lo que significaría una verdadera pérdida de tiempo.

Ojalá le tomes el gusto en esta nueva aventura en tu vida (la programación gráfica usango OpenGL) y si tienes alguna duda, en lo que se pueda te ayudaremos con mucho gusto.

Saludos.
;)
#35
Hola.

Bueno, es un tanto difícil contestar tu pregunta pero espero te sirva mi respuesta. Lo primero que necesitamos es saber si tu escena usa una proyección Ortogonal o en Perspectiva.

La proyección ortogonal por lo general se usa para juegos en 2D, ya que el tamaño en el que se ve el objeto no se ve afectado por el eje Z. El tamaño del viewport está definido por el ancho y el alto en píxeles de la resolución en la que abras tu ventana. Por ejemplo puede ir de 0 (izquierda) a por ejemplo 1024px (derecha) tomando como ancho de la ventana 1024 x 768.

En los programas de modelaje 3D, se toma como referencia la proyección en perspectiva para crear un modelo, sin embargo hablando de la proyección en perspectiva es un tanto más complejo.

En una proyección en perspectiva, independientemente del ancho y del alto de la ventana, siempre es (o debería ser):

-1 0 1

Es decir que el modelview va de -1 (izquierda) pasando por 0 (el centro) y llegando a 1 (la derecha) igual de arriba hacia abajo; -1 (abajo) cero (centro) y uno (arriba)

Cuando uno hace un modelo, lo hace por lo general usando estas unidades. Por ejemplo, un simple cubo por lo general tiene un tamaño de 1.0 ancho, 1.0 de alto y 1.0 de profundidad.  Si este cubo lo pasas a una proyección ortogonal, se verá (si esque se ve) sólo como un mísero píxel en pantalla, esto porque tiene un valor de 1.0, 1.0 y 1.0 pero como el viewport va de 0 a 1024, pues ye te imaginarás.

Sin embargo la cosa cambia cuando este mismo cubo lo pasas a una escena con una proyección en perspectiva, dado que el viewport va de -1 a 1 entónces el cubo dependiendo de qué tan cerca esté de la cámara (si su posición Z está cerca o lejos) se verá que ese mismo cubo ocupa toda la pantalla.

Y hablando de la posición Z, este también es un factor a tomar en cuenta en las proyecciones en perspectiva. Depende qué tan cerca tu personaje o la escena vaya a estar de la cámara para que se vea más pequeña o más grande.

Cuando hagas tus modelos, ten en cuenta que si por ejemplo lo hiciste a partir de un cubo que medía 10x10x10, entónces para que tu modelo se vea bien y no sólo como algo que cubre la cámara, tendrás que alejarlos al menos unas 15 unidades en el eje Z, es decir que su posición sea al menos -15.0. Claro que esto dependerá de tu modelo.

Pero entonces, ¿Cómo sabes de qué tamaño es tu modelo, si ya perdiste la cuenta del cubo del que empezaste y la tiene muchas cosas extra? La respuesta es simple: Observa por ejemplo la posición de alguno de los vértices más alejados del modelo, es decir los que están más al fondo y luego el que está más hacia a tí. Si por ejemplo tienes que la posición Z (ojo, las coordenadas varían entre programas de modelaje, 3d Studio Max y Blender 3D Definen que el Eje Z va de arriba hacia abajo y no del fondo hacia el frente como otros) es de por ejemplo -50.0 y el otro es 30. 0 sabrá que el objeto en el eje Z tiene un tamaño que va de 30.0 a -50.0, es decir de 80.0.

Si quisieras visualizar ese objeto completo en pantalla, tendrías que moverlo al menos unas 100 unidades hacia el fondo, claro que también dependerá del ancho y el alto de tu modelo para saber cuánto debes alejarlo (o escalarlo) para que quepa en tu escena.

Recuerda también tomar el cuenta que tu personaje tenga el tamaño adecuado según la escena que quieres mostrar, es decir no vayas a hacer un personaje enorme y bien detallado y una escena que tenga un tamaño de apenas la cabeza de tu personaje. Todo debes hacerlo  cuidando las proporciones. (Como en el mundo real)

Bueno pero entonces ¿Qué tamaño deben tener tus modelos? Bien las respuesta es muy subjetiva, lo mejor sería que hicieras modelos de por ejemplo unas 10, 20 o 30 unidades de alto. El ancho y la profundidad dependerán de la forma del modelo.

No te aconsejo que los hagas demasiado pequeños, esto porque luego trae problemas a la hora de computar posiciones, rotaciones, escalados, skinning, etc. Tampoco que los hagas enormes, ya que luego se vuelve muy engorroso trabajar con ellos en los programas de modelado, además que al final los vas a querer escalar para meterlos en la escena sin alejarlos mucho.

Conforme avances, tu mismo verás el tamaño que más te acomode esto en relación a su visualización en la escena.

Ojalá no haya sido muy liosa mi explicación  ^_^'

Saludos.
:D
#36
Programación gráfica / Re:De direct3d9 a OpenGL
10 de Marzo de 2013, 05:26:57 AM
Quizás es un poco tarde para responder pero ojalá te sirva lo que te voy a decir.

Primero que nada decirte que has tomado una buena decisión al querer dejar a Direct3d y pasarte al lado "Oscuro" (según Mocosoft) de la programación gráfica.

... " A Powerfull Sith, you will become... "
-Darth Sidious (alias el Emperador). :P

Lo siguiente es decir que respeto por completo lo que han dicho los demás, sin embargo no estoy de acuerdo. Querer pasar al pipeline programable sin pasar por las rutinas del fijo, sería como pretender correr antes de saber caminar.

Yo te recomiendo si vas a crear una casa, primero construye los cimientos. Es decir primero aprende la base de OpenGL antes de quere lanzarte por los shaders. Esto te ahorrará muchos dolores de cabeza y si bien es cierto que representa mayor inversión de tiempo, a la larga representará una comprensión mucho mayor de los qués y los por qués de OpenGL.

Te dejo los siguientes enlaces de los que yo he aprendido, espero te sirvan:

Página Web:
http://unsitioweb.com/

Archivos PDF:
http://www.google.com.mx/url?q=http://lc.fie.umich.mx/~rochoa/Manuales/OpenGL_Bardok.pdf&sa=U&ei=Hwo8Udn_JKjc2QX82YGYCw&ved=0CCcQFjAC&usg=AFQjCNF7BRFlwr0_QXFSEVHxFWRyLKlvLw

http://www.google.com.mx/url?q=http://www.tecnun.es/asignaturas/grafcomp/OpenGL/tutorial-opengl.pdf&sa=U&ei=-wo8UanwEI662gW6poA4&ved=0CCEQFjAA&usg=AFQjCNE2yQPth3M4TL50tQ9BckYjdao_Xw

Todo está en español para que no tengas dudas por la barrera del idioma.

Saludos.
#37
Muchas gracias a todos por su ayuda. Por fin resolví mi problema.

:) :) :D :D ;)
#38
Muchas gracias por tu respuesta. Sí, ya lo encontré.  :)

Aprovechando su conocimiento y su buena disponibilidad, me gustaría saber solo algo más. Teniendo la siguiente matriz:
           1.0        0.0        0.0        0.0
           0.0        1.0        0.0        0.0
           0.0        0.0        1.0        0.0
           0.0        0.0        0.0        1.0


¿Cómo hago para rotar 20 grados en el eje X, -128 grados en el eje Y y 71.2 grados en el eje Z?. Es decir como plasmo es esta matriz esas rotaciones simultaneas en sus respectivos ejes.


De nuevo muchas gracias.
^_^'
#39
Ejem, gracias pero lo que veo es que ahí se construye una matriz de rotación a partir de un ángulo. Pero yo quiero saber lo opuesto, dada una matriz, saber  su angulo de rotación.

Muchas gracias.
^_^'
#40
Ah, creo que ya entendí. Muchas gracias.

Ahora tengo una duda más, tengo la siguiente matriz de rotación:

1.0       0.0        0.0        2.07814
0.0      -0.809017   0.587785   0.0
0.0      -0.587785  -0.809017   0.0
0.0       0.0        0.0        1.0


Alguien sería tan amable de decirme ¿cómo extraigo el ańgulo de rotación de esta matriz?

Muchas gracias.
;)
#41
Hola de nuevo amigos de esta inmejorable web. De nuevo molestándolos con una duda, ¿Cuál es el significado de cada elemento en la matriz? Me explico, en todos lados aparece algo como esto:

a1  a5  a9    a13
a2  a6  a10  a14
a3  a7  a11  a15
a4  a8  a12  a16

a13, a14 y a15 establecen la posición del objeto es decir que a13 sería = X, a14 = Y a15 = Z ¿Correcto?

Pero ¿qué son a1, a2, a3, a5, a6, a7, a9, a10 y a11? ¿Qué significa cada uno ellos?, He leido que establecen la orientación del objeto (es decir hacia a donde miran) pero no entiendo del todo qué significan.

Ahora, todavía tengo más dudas al ver que para la escala de un objeto se usan a1, a6 y a11, algo así como  a1 = escX, a6 = escY y a11 = escZ. pero ¿Qué no eran de orientación?

Bueno ojalá me puedan ayudar.

Muchas gracias.
^_^'
#42
Se ve interesante, muchas gracias.
;)
#43
General Programadores / Re:Problema con vectores y movimiento
23 de Febrero de 2013, 11:06:28 PM
Parece  que ya funciona como yo quería. :D

Muchas gracias por su ayuda.
;)
#44
General Programadores / Re:Problema con vectores y movimiento
21 de Febrero de 2013, 06:50:02 PM
Hola, gracias por contestar.  Tienes razón con respecto a obtener el vector de dirección, mi problema es hacer que el objeto se traslade según ese vector de dirección. Si realizo una translación usando sólo glTranslatef el objeto se mueve según el eje que use, por ejemplo si uso glTranslatef(0.0,0.0,-1.0), el objeto se traslada -1.0 en el eje Z. Pero lo que yo quiero es que el objeto se traslade -1.0 pero hacia a donde "mira", es decir según su vector de dirección.

Ojalá esté un poco más claro lo que quiero hacer.

Muchas gracias
;)
#45
General Programadores / Problema con vectores y movimiento
20 de Febrero de 2013, 07:34:26 PM
Hola queridos amigos de esta estupenda Web. De nueva cuenta solicitando de su ayuda para resolver un problema. Uso OpenGL y tengo un cubo que quiero mover por la pantalla, quiero que cuando yo lo rote en alguno de sus ejes, este se mueva en la dirección a la que apunta. Algo como esto:



En este caso el cubo está siendo visto desde arriba. Lo muevo y luego quiero rotarlo. Quiero que ahora se mueva en la dirección en la que apunta.  Si lo vuelvo a rotar que se mueva en la nueva dirección.

Ojalá esté claro lo que quiero hacer.

Les agradezco de antemano.

Muchas gracias.
;)





Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.