Tout programmeur en basic se pose la question de la 3D ...qui sonne si mystérieusement et délicieusement à l'oreille de tout accro du monde virtuel.
Je propose ici une approche d'une methode de rendu d'objets en 3D. Si vous etes un programmeur courageux et ambitieux passez votre chemin, regardez mes progs Util 3D et graph 3D sans regarder le code et cherchez vous meme
Je vais enployer la méthode du drawstat, pensez à regarder le tutorial dédié à cette technique si vous n'etes pas au point .
On va travailler sur un objet simple : un cube de 2 unités de coté centré sur l'origine.
Notez que pour avoir un beau cube avec tous ses aretes en drawstat il faut repasser par certains pouints d'ou le nombre de points.
Ici List 1 = X List 2 = Y et List 3 = Z
Nous allons partir du principe que pour afficher le cube en 3D il suffit de retenir ses coordonnées en X et Y. Donc essayons d'afficher notre cube :
//paramétrez le s-graph 1 pour le drawstat en xyLine et Dot
S-WindMan // pour que nous puissions imposer la fenetre
View-Window -4,4,0,-2,2,0 // on peux prendre cette fenetre pour l'exemple car avec le coté du cube est de longueur 2
Drawstat
Et là on obtient :
On dirait un carré et pas un cube car on n'a pas ajouté d'effet de fuite. On fera ça plus tard, pour le moment on va faire tourner le cube sur lui meme
On a les coordonnées cartésiennes des points du cube mais on va utiliser les coordonnées polaires pour la démonstration de la formule que j'ai utilisé qui est sans doute la plus rapide et la plus simple.
On va faire tourner le cube selon le plan x-y puis y-z puis x-z donc en fait à chaque fois on est ramené à une rotation simple dans un plan tel que vous en connaissez depuis la seconde (au moins).
Regardez l'image suivante pour mieux comprendre ce qui suit :
Le point initial M fait un angle µ avec l'axe des abscisses et est à une distance r de O.
M' le point image apres la rotation est également à une distance r mais fait un angle µ+µ' avec l'axe des abscisses où µ' est l'angle de rotation.
On donc en coordonnées polaires : M(r;µ) M'(r,µ+µ') et en coordonnées cartésiennes M(x,y) et M'(x',y')
On a :
x = r*cos µ x' = r*cos (µ+µ')
y = r*sin µ y' = r*sin (µ+µ')
J'imagine que vous connaissez tous tres bien vos formules de trigo donc je ne vous rappelle pas que
cos (a+b) = cos a*cos b - sin a*sin b
sin (a+b) = sin a*cos b + sin b*cos a
Et voila ! on a une magnifique formule en fonction de x, y et µ' l'angle de rotation!!!!
Simple et extremement rapide! car il suffit de 2 calculs par rotation!
J'ai mis beaucoup beaucoup de temps pour trouver ceci meme si la formule parait simple une fois ecrite il faut y penser...
Voila, je ne vous fais pas le code, je vous laisse gratter un peu quand meme et au passage vous venez de lire en 2 min ce que j'ai cherché pendant des mois...1 an je pense .... (car MOI je voulais faire tout seul )
Code d'exemple :
ClrGraph
{1,1,-1,-1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,1}List 1
{-1,1,1,-1,-1,-1,1,1,1,1,1,1,-1,-1,-1,-1}List 2
{-1,-1,-1,-1,-1,1,1,-1,1,1,-1,1,1,-1,1,1}List 3
S-Grph1 DrawOn,xyLine,List1,List2,1,Dot
0A~C
Do
A?A
B?B
C?C
Cls
Text 1,1,Calcul.
List 1 * cos A - List 2 * sin A List 4
List 1 * sin A + List 2 * cos A List 2
List 4List 1
Text 1,30,.
List 2 * cos B - List 3 * sin B List 4
List 2 * sin B + List 3 * cos B List 3
List 4List 2
Text 1,34,.
List 1 * cos C - List 3 * sin C List 4
List 1 * sin C + List 3 * cos C List 3
List 4List 1
Cls
Drawstat
Lpwhile 1=1
PierrotLL Hors ligne Statut: Membre
Niveau: Confirmé
Points: 1324
Défis: 9 Email | Message
Posté le 26/08/2006 22:03 |
Exellent ce tuto!!!! ça faisait des mois que j'essayais de faire de la 3D mais moi, j'essayais de faire du vrai 3D, j'essayais de faire un cube immobile et que ce soit la caméra qui tourne autour mais je m'embrouyais les trois angles car je voulais que quand on veuille avancé, on avance toujours de la même distance, quelque soit la direction de la caméra!!!! j'ai toujours pas résolu le casse tête!!!
Sinon, etant donné que ce programme ne gère pas la perspective, savez vous comment la rajouter?
Lenainnoir = il te suffit de faire une fenêtre plus grande ou plus petite, comme un zoom, ça donnera une impression de profondeur
PierrotLL Hors ligne Statut: Membre
Niveau: Confirmé
Points: 1324
Défis: 9 Email | Message
Posté le 26/08/2006 22:07 |
J'ai une autre question, pourquoi le liens dans le mail d'inscription de fonctionne pas? j'ai pensé que c'était parce qu'il emmène sur planete-casio.fr et non .com, mais j'ai essayé de faire le même liens avec *.com et ça marche pas non plus, enfin, ça m'emmène sur un autre site
Zefortiche Hors ligne Statut: Super admin
Niveau: Confirmé
Points: 5291
Défis: 54 Email | Message
Posté le 27/08/2006 10:34 |
normalement ça doit marcher avec un .com , un membre a eu le même problème l'autre jour et il a pu s'inscrire en modifiant le .fr
Mais ce programme gère la perspective
As-tu bien tout rentré?
Pour mieux le voir tu n'as qu'à enlever les:
A?A
B?B
C?C
de la boucle et les mettre avant le Do.
Pour l'inscription en remplaçant le .com en .fr çà devrait marcher. On doit récuperer le .fr mais je ne sais pas se qu'ils foutent... je suis entrain de gueuler
qqun s est il me dire comment envoyer les donnée pour tricher de ce site vers ma calcu car on di kkil fau faire v window ms je ne c pas ou il fau aller repondez moi svp urgent
PierrotLL Hors ligne Statut: Membre
Niveau: Confirmé
Points: 1324
Défis: 9 Email | Message
Posté le 27/08/2006 20:17 |
Non, ce prog ne gère pas la perspective, par exemple, quand on regarde le cube sous un bon angle (l'angle de départ par exemple) on ne voit qu'un carré!!! J'ai pensé que c'était peut etre du a la petite taille du carré et j'ai changé la cote des points pour un faire un parallélépipède rectangle tres long et grosse déception, toujours un simple carré!!! comment régler ce problème qui donne un furieux mauque de réalisme?
ah je comprends se que tu veux dire
En effet il ne gère pas la perspective! En fait c'est juste un utilitaire qui permet de faire tourner un cube devant la "caméra".
Par contre dans le moteur 3d que je développe j'essaye au contraire de faire bouger la caméra dans un monbde formé de cube. Et là il faut la perspective pour que ce soit réaliste.
Pour le moment j'y vais à l'instant, je prends des boites (en vrai) et je tourne autour avec ma tête lol. Ensuite je dessine tout sur papier et je cherche se que l'on voit exactement. Après plusieurs essais le mieux que j'ai trouvé pour le moment c'est le principe de cette image:
Bon je suis loin d'être sur qu'au final le résultat est réaliste... il doit y avoir des choses à régler/améliorer.
Pierrotll Hors ligne Statut: Membre
Niveau: Confirmé
Points: 1324
Défis: 9 Email | Message
Posté le 27/08/2006 23:28 |
Oui, c'est ça le système d'un programme en 3D, mais comment tu veux afficher se qui rentre dans le champ de vision???? drawstat ne fonctionne qu'en 2D!!!!
Pierrotll Hors ligne Statut: Membre
Niveau: Confirmé
Points: 1324
Défis: 9 Email | Message
Posté le 27/08/2006 23:30 |
Tien, je viens de gagner deux points!!!! c'est quoi exactement ces points??? et comment on les gagne??