Renderizar objeto 3d en superficie 2d (sistema integrado)


9

Estoy trabajando en un sistema embebido de algún tipo, y en algún tiempo libre me gustaría probar sus capacidades de dibujo.

El sistema en cuestión es el microcontrolador ARM Cortex M3 conectado a la placa EasyMX Stellaris. Y tengo una pequeña pantalla TFT de 320x240 :)

Ahora, tengo algo de tiempo libre cada día y quiero crear un cubo giratorio. Micro C PRO para ARM no tiene capacidades de dibujo en 3D, lo que significa que debe hacerse en software.

Del libro Introducción a la programación de juegos en 3D con DirectX 10 conozco el álgebra matricial para las transformaciones, pero eso es genial cuando tienes DirectX para configurar la cámara correctamente.

Supongo que podría hacer que el objeto 2D gire, pero ¿cómo iría con 3d uno?

Cualquier idea y ejemplo son bienvenidos. Aunque preferiría consejos. Me gustaría entender esto.


@ Marin ¿Qué has hecho hasta ahora? Estoy tratando de lograr lo mismo. Póngase en contacto conmigo skype: andreahmed
Ahmed Saleh

Respuestas:


7

¿Te das cuenta de que una cámara DirectX es solo un par de transformaciones matriciales? Tiene ModelView, Proyección, luego transformación de matriz de Viewport a cada vértice en ese orden para cambiar las coordenadas 3d a coordenadas 2d.

Más detalles sobre la transformación a lo largo de la tubería estándar (creo que DirectX y OpenGL funcionan de la misma manera).

Luego rasteriza los triángulos en función de las ubicaciones 2D (que resultaron de tus transformaciones) de la matriz ahora 2D de vértices que tienes. Esto puede complicarse rápidamente, pero usar la prueba PIT y colorear completamente cualquier píxel que colisione debería ser lo suficientemente simple y efectivo en su caso.

La otra forma de hacer esto y la manera más fácil es hacer un trazador de rayos. Simplemente des-proyecte el rayo utilizando la matriz de transformación que desea aplicar a su objeto.

No he jugado con cosas de bajo nivel en mucho tiempo, así que puedo estar recordando mal pero cualquiera de las rutas no debería ser demasiado difícil. Comprenda cómo funciona la tubería de hardware e impleméntela en software o escriba un rastreador de rayos.

Por cierto, aquí es donde aprendí lo que sé sobre la tubería de gráficos.


Cualquier referencia de canalización programable para OpenGL también sería útil ya que todas las transformaciones se codifican manualmente ahora.
edA-qa mort-ora-y

@ Trueno clásico. Sobre la cámara: sí, me doy cuenta de eso. Pero no sé cómo transferir todo eso a este sistema. Pensé que quizás haya algún tipo de ecuación para hacer esto. Evadiendo así los cálculos matriciales. Tal vez no escribí la pregunta muy bien. Sobre tubería: son lo mismo. ¡Gracias!
Martin Berger

3

En los días en que el hardware 3D no estaba disponible, teníamos que construir nuestros propios motores 3D y rasterizadores poligonales. 3DICA es un gran tutorial que explica todos los conceptos básicos de un motor 3D de software. Para mí, las imágenes no se mostrarán en Firefox, pero en Internet Explorer funcionan bien.

Los capítulos 2.1 y 3.1 deberían ser suficientes para cubrir sus necesidades, pero leer todo el tutorial debería enseñarle mucho.


Guau. Lindas cosas. Creo que lo único que no sé de esa página es parte de las splines. No tengo tiempo para pasar por eso en profundidad. Por ahora. Gracias por eso msell.
Martin Berger
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.