Rendu d'un objet 3D sur une surface 2D (système intégré)

9

je travaille sur un système embarqué en quelque sorte, et dans un certain temps libre, je voudrais tester ses capacités de dessin.

Le système en question est un microcontrôleur ARM Cortex M3 attaché à la carte EasyMX Stellaris. Et j'ai un petit écran TFT 320x240 :)

Maintenant, j'ai du temps libre chaque jour et je veux créer un cube rotatif. Micro C PRO for ARM ne dispose pas de capacités de dessin 3D, ce qui signifie qu'il doit être effectué par logiciel.

Dans le livre Introduction à la programmation de jeux 3D avec DirectX 10, je connais l'algèbre matricielle pour les transformations, mais c'est cool lorsque vous avez DirectX pour régler correctement la caméra.

Je pense que je pourrais faire tourner un objet 2D, mais comment puis-je utiliser un objet 3D?

Toutes les idées et exemples sont les bienvenus. Bien que je préfère les conseils. J'aimerais comprendre ça.

Martin Berger
la source
@Marin Qu'avez-vous fait jusqu'à présent? J'essaie de faire la même chose. Veuillez me contacter skype: andreahmed
Ahmed Saleh

Réponses:

7

Vous vous rendez compte qu'une caméra DirectX n'est que quelques transformations matricielles? Vous avez une transformation de matrice ModelView, Projection, puis Viewport à chaque sommet dans cet ordre pour changer les coordonnées 3D en coordonnées 2D.

Plus de détails sur la transformation le long du pipeline standard (je crois que DirectX et OpenGL fonctionnent tous les deux de la même manière).

Ensuite, vous pixellisez les triangles en fonction des emplacements 2D (qui résultent de vos transformations) du réseau de sommets 2D que vous avez maintenant. Cela peut se compliquer rapidement, mais l'utilisation du test PIT et la coloration complète de tout pixel qui entre en collision devraient être assez simples et efficaces dans votre cas.

L'autre façon de le faire et la plus simple est de créer un traceur de rayons. Démontez simplement le rayon en utilisant la matrice de transformation que vous souhaitez appliquer sur votre objet.

Je n'ai pas joué avec des trucs de bas niveau depuis un moment, donc je me souviens peut-être mal, mais l'une ou l'autre route ne devrait pas être trop difficile. Comprendre comment fonctionne le pipeline matériel et l'implémenter dans un logiciel ou écrire un ray tracer.

C'est ici que j'ai appris ce que je sais du pipeline graphique.

ClassicThunder
la source
Toute référence de pipeline programmable pour OpenGL serait également utile car toutes les transformations sont maintenant codées manuellement.
edA-qa mort-ora-y
@Tonnerre classique. À propos de la caméra: oui je m'en rends compte. Mais je ne sais pas comment transférer tout ça sur ce système. Je pensais qu'il y avait peut-être une sorte d'équation pour ce faire. Fuyant ainsi les calculs matriciels. Peut-être que je n'ai pas très bien écrit la question. À propos du pipeline: ce sont les mêmes. Merci!
Martin Berger
3

À l'époque où le matériel 3D n'était pas disponible, nous devions construire nos propres moteurs 3D et rasteriseurs polygonaux. 3DICA est un excellent tutoriel expliquant toutes les bases d'un moteur logiciel 3D. Pour moi, les images n'apparaîtront pas dans Firefox, mais dans Internet Explorer, elles fonctionnent bien.

Les chapitres 2.1 et 3.1 devraient suffire à couvrir vos besoins, mais la lecture de l'ensemble du didacticiel devrait vous en apprendre beaucoup.

msell
la source
Sensationnel. Jolies choses. Je pense que la seule chose que je ne sais pas de cette page est une partie avec des splines. Je n'ai pas le temps d'approfondir cela. Pour l'instant. Merci pour cette msell.
Martin Berger