2008-09-16 9 views
5

He estado usando OpenGL durante años, pero después de tratar de usar D3D por primera vez, perdí una gran cantidad de tiempo tratando de descubrir cómo hacer mi las luces de la escena permanecen fijas en el mundo en lugar de fijarse en mis objetos.¿Cómo puedo hacer que las luces permanezcan fijas en el mundo con Direct3D

En OpenGL las posiciones de luz se transforman como todo lo demás con la matriz MODELVIEW, por lo que para fijar las luces en el espacio, configura su MODELVIEW de la manera que desee para las luces, y llama a glLightPosition y configúralo para su geometría y hacer llamadas de geometría En D3D eso no ayuda.

(Comentario - Eventualmente encontré la respuesta a esto, pero no pude encontrar nada útil en la web o en MSDN. Me habría ahorrado unas horas de scratching si hubiera podido encontrar esta respuesta entonces.)

Respuesta

1

La respuesta que descubrí finalmente fue que mientras OpenGL solo tiene una matriz amalgamada MODELVIEW, en D3D las transformaciones "mundo" y "vista" se mantienen separadas, y la colocación de luces parece ser la razón principal para esto. Entonces, la respuesta es que usa D3DTS_VIEW para configurar las matrices que se deben aplicar a sus luces, y D3DTS_WORLD para configurar las matrices que se aplican a la ubicación de su geometría en el mundo.

De hecho, el sistema D3D tiene más sentido que OpenGL. Le permite especificar sus posiciones de luz cuando y donde quiera que lo sienta de una vez por todas, sin tener que reposicionarlas constantemente para que se transformen con su transformación de "vista" actual. OpenGL tiene que funcionar de esa manera porque simplemente no sabe lo que usted piensa que es su "vista" frente a su "modelo". Todo es solo una vista modelo para GL.

(Comentario: me disculpo si se supone que no debo responder mis propias preguntas aquí, pero esta fue una pregunta real que tuve hace unas semanas y pensé que valía la pena publicarla aquí para ayudar a otros a pasar de OpenGL a D3D: las vistas generales básicas de la iluminación D3D y la tubería de renderizado parecen difíciles de conseguir.)

0

Para la tubería de función fija, la posición y dirección de las luces se configuran en el espacio mundial. Los documentos para las estructuras ligeras sí te dicen eso, pero no me sorprende que te lo hayas perdido en los documentos. Ya no hay mucha información sobre la tubería de función fija ya que el enfoque tiene sombreadores programables.

Cuestiones relacionadas