Création d'un moteur 3D en partant de rien

Signaler
Messages postés
150
Date d'inscription
dimanche 28 septembre 2003
Statut
Membre
Dernière intervention
17 mars 2009
-
Messages postés
150
Date d'inscription
dimanche 28 septembre 2003
Statut
Membre
Dernière intervention
17 mars 2009
-
Bonjour,

je souhaiterai créer un petit moteur 3D le plus simple possible en
partant de rien. Quelqu'un en a t il déjà fait un? Je ne souhaite pas
utiliser DirectX ni OpenGL.



Merci de votre aide.

5 réponses

Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
10
J'ai vu sur developpez.com un super tutorial la dessus. Il aborde la création d'un moteur 3D (outils de log, gestionnaire de mémoire, rendering, shaders...). Je te conseillerais de regarder ça, ç'est peut-être interessant...
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
Bah, je vois pas trop le problème ?

Où est-ce que tu bloques ?



Commence par faire un moteur tout bête qui n'affiche que des polygones unicolor sans aucun calcul d'eclairage.

Ensuite tu pourras ajouter des normales pour le calcul des lumières,
puis des coordonnées textures pour ..... gerer ... oui c'est ça merci,
des textures.

Enfin bref, qu'est ce qui te pose problème ?



Connais-tu le C++, as-tu déja fait un moteur 3D avec DirectX ou opengl ? Sais-tu comment ça fonctionne exactement ?

Sais-tu comment t'y prendre pour afficher des pixels à l'écran ? etc...
Messages postés
150
Date d'inscription
dimanche 28 septembre 2003
Statut
Membre
Dernière intervention
17 mars 2009

Je ne vois pas bien comment programmer tout ça... la camera, comment faire les calculs... enfin bon, j'ai beaucoup de mal au niveau de la conception. Je ne sais pas par où commencer, comment structurer le prog. Si tu pouvais m'aguiller ce serai sympa.

Sinon je sais comment m'y prendre pour afficher des pixel, etc.
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
Ce n'est pas que c'est compliqué mais il est nécessaire d'avoir de
bonnes connaissances en mathématiques, en algèbre linéaire plus
précisement.

C'est bien trop complexe pour rédiger tout ici. Je ne connais pas ton niveau.

En gros tu as ton point en 3D avec des coordonnées (x,y,z) dans le
repère local (associé à l'objet). Tu dois lui appliquer la
transformation qui te donne sa position dans le monde. Puis tu le
projetes pour récupérer les coordonnées (x,y) sur l'écran.


Regarde dans MSDN les description des matrices

D3DXMatrixPerspectiveFovLH

D3DXMatrixLookAtLH

pour la projection.



Niveau structure du programme, vu que tu n'utilises pas le hardware, tu
peux profiter de l'énorme quantité de RAM, je te conseille de séparer
les fonctions ainsi:

Tu fais une fonction qui te remplit un tableau de point 2D à partir
d'un tableau de point 3D résultants de la
projection*transformation.

Ensuite tu n'as plus qu'à gerer l'affichage avec une autre fonction.

Tu lis ton tableau de point 2D et tes faces (chacune 3 indices des
points 3D/2D) que tu affiches avec ta fonction de remplissage de
triangle.



C'est vraiment pas compliqué quand on a des bases en algèbre. Il y a même des moteurs 3D sur calculatrice (j'en ai fait un).

Le programme est trop court pour se rater dans sa structure.



Pourquoi ne veux-tu pas profiter de l'accélération matérielle que permet DirectX par exemple ?

Si tu veux devenir un daron de la 3D, commence par utiliser DirectX ou
OpenGL, fais des copier-coller, tatonne en modifiant certaines valeurs,
puis tu comprendras bien comment ça fonctionne.

Je suis sûr que tu ne voudras plus revenir sur un moteur 3D sur PC avec accélération logicielle.



PS: je crois qu'il y a des sources sur ce site qui peuvent t'interesser.
Messages postés
150
Date d'inscription
dimanche 28 septembre 2003
Statut
Membre
Dernière intervention
17 mars 2009

Merci, je l'ai déjà lu, mais il est beaucoup trop léger... Sinon pour répondre à Gazima, je ne peux et veux pas utiliser directX car c'est un projet pour mon école d'ingénieur.