Renderizar objeto 3d na superfície 2D (sistema incorporado)

9

estou trabalhando em um tipo de sistema incorporado e, em algum tempo livre, gostaria de testar seus recursos de desenho.

O sistema em questão é o microcontrolador ARM Cortex M3 conectado à placa EasyMX Stellaris. E eu tenho uma pequena tela TFT de 320x240 :)

Agora, tenho tempo livre todos os dias e quero criar um cubo rotativo. O Micro C PRO para ARM não possui recursos de desenho em 3D, o que significa que deve ser feito em software.

Do livro Introdução à programação de jogos em 3D com o DirectX 10, conheço a álgebra matricial para transformações, mas isso é legal quando você tem o DirectX para ajustar a câmera corretamente.

Eu acho que eu poderia fazer o objeto 2D girar, mas como eu iria com o 3d?

Todas as idéias e exemplos são bem-vindos. Embora eu prefira conselhos. Eu gostaria de entender isso.

Martin Berger
fonte
@Marin O que você fez até agora? Estou tentando conseguir o mesmo. Por favor, entre em contato comigo skype: andreahmed
Ahmed Saleh

Respostas:

7

Você percebe que uma câmera DirectX é apenas algumas transformações matriciais? Você tem uma transformação de matriz ModelView, Projection e Viewport em cada vértice nessa ordem para alterar as coordenadas 3d para coordenadas 2D.

Mais detalhes sobre a transformação ao longo do pipeline padrão (acredito que o DirectX e o OpenGL funcionam da mesma maneira).

Em seguida, você rasteriza os triângulos com base nos locais 2D (resultantes de suas transformações) da matriz 2D de vértices agora existentes. Isso pode ser complicado rapidamente, mas usar o teste PIT e colorir totalmente qualquer pixel que colide deve ser bastante simples e eficaz no seu caso.

A outra maneira de fazer isso e a maneira mais fácil é criar um traçador de raios. Simplesmente des-projete o raio usando a matriz de transformação que você deseja aplicar ao seu objeto.

Não brinco com coisas de baixo nível há algum tempo, então eu posso estar me lembrando errado, mas qualquer uma das rotas não deve ser muito difícil. Entenda como o pipeline de hardware funciona e implemente-o em software ou escreva um traçador de raios.

Btw este é o lugar onde eu aprendi o que sei sobre o pipeline de gráficos.

ClassicThunder
fonte
Qualquer referência de pipeline programável para o OpenGL também seria útil, pois todas as transformações são codificadas manualmente agora.
EdA-qa mort-ora-y
@ Trovão clássico. Sobre a câmera: sim, eu percebo isso. Mas eu não sei como transferir tudo isso para este sistema. Eu pensei que talvez haja algum tipo de equação para fazer isso. Evitando assim os cálculos da matriz. Talvez eu não tenha escrito a pergunta muito bem. Sobre o pipeline: eles são os mesmos. Obrigado!
Martin Berger
3

Nos dias em que o hardware 3D não estava disponível, tivemos que construir nossos próprios mecanismos 3D e rasterizadores de polígonos. 3DICA é um ótimo tutorial que explica todos os conceitos básicos de um mecanismo 3D de software. Para mim, as imagens não serão exibidas no Firefox, mas no Internet Explorer elas funcionam bem.

Os capítulos 2.1 e 3.1 devem ser suficientes para atender às suas necessidades, mas a leitura de todo o tutorial deve lhe ensinar muito.

msell
fonte
Uau. Coisas legais. Eu acho que a única coisa que eu não sei dessa página é parte de splines. Não tenho tempo para fazer isso em profundidade. Por enquanto. Obrigado por esse msell.
Martin Berger