Page 1 of 4

Un ptit moteur 3D ?

PostPosted: 23 Dec 2014, 16:45
by Plokki
Vous savez quoi ? C'est presque Noël alors pour la peine j'ai fait un petit moteur 3D en Axe. 0:]
Voilà ce que ça donne après 3 jours de travail intensif :
Demo3D.gif


On peut faire des rotations selon 2 angles, se rapprocher ou s'éloigner et déplacer la caméra (ou le cube c'est pareil :) ) sur les 3 axes.
Sur la calculatrice je tourne à 30 fps avec 14 points et 24 arrêtes, c'est donc un peu plus fluide que sur le screen shot. B-)
J'avais fait une version en BASIC qui tourne à 1/2 fps, c'était pas génial du coup je l'ai porté en Axe et c'est beaucoup mieux cependant une question se pose : Matref si tu passe par là, comment t'as géré l'occlusion sur ton shooter 3D ?
Tu calcules la distance entre chaque point et la camera et tu n'affiche pas les plus éloignés ou tu affiches des "surfaces" je sais pas trop comment ?

Vu que je n'ai absolument pas regardé de doc à propos de la 3d je me demande si vous faites des projections de vos points sur l'écran (comme en optique) ou alors d'une autre manière ? Et pour les rotations c'est le point de vue ou les points qui tournent ? (pour moi c'est tous les points)

Re: Un ptit moteur 3D ?

PostPosted: 23 Dec 2014, 17:18
by Victor D
Bonjour,

Très intéressant, je comprend que ça t'ai soûler 3 jours de travail intensif :p ,mais bon tu peut-être satisfait du résultat !

En tout cas tu as bien mériter des vacances :)

Très bonnes fêtes de fin d’année,

Re: Un ptit moteur 3D ?

PostPosted: 23 Dec 2014, 17:20
by Plokki
Au contraire ! Si j'y ai passé 3 jours c'est que c'était super intéressant (pas mal dur aussi :p )
Bonnes fêtes aussi ^^

Re: Un ptit moteur 3D ?

PostPosted: 23 Dec 2014, 17:21
by Victor D
Plokki wrote:Au contraire ! Si j'y ai passé 3 jours c'est que c'était super intéressant (pas mal dur aussi :p )
Bonnes fêtes aussi ^^



Je te crois, je te crois, et j'imagine surtout :)

Merci

Re: Un ptit moteur 3D ?

PostPosted: 03 Jan 2015, 21:34
by Wistaro
Très beau travail !! :)

Sa serait possible d'avoir les sources?

Re: Un ptit moteur 3D ?

PostPosted: 04 Jan 2015, 13:22
by Plokki
Bien sûr ! :p
Par contre je ne m'attends pas à ce que tu comprennes quoi que ce soit, le but était juste d'avoir un truc qui fonctionne et pas d'avoir quelque chose d'optimisé et clair.
En passant je me demande si il existe une commande en axe pour convertir un nombre d'un octet en un nombre de deux octets parce que j'ai ça:
-10→{L1} donc {L1}=246 mais si je fait:
{L1}→A j'ai: A=246 et pas A=65526
du coup je suis obligé de mettre ça dans mon prog pour que mes variables aient la bonne valeur:
X>127?X-256→X
Y>127?Y-256→Y
Z>127?Z-256→Z


Code: Select all
.CUBE3D
Data(1,2,1,4,1,5,7,6,7,8,7,3,5,6,5,8,3,2,3,4,4,8,2,6,9,10,9,11,9,12,9,13,14,10,14,11,14,12,14,13,10,11,10,12,13,11,13,12)→GDB1
/je dit quel sommet doit être relié à quel sommet
Data(10,10,⁻10,⁻10,10,10,⁻10,⁻10,10,0,0,0,0,⁻10)→Pic1X
Data(⁻10,10,10,⁻10,⁻10,10,10,⁻10,0,10,0,0,⁻10,0)→Pic1Y
Data(10,10,10,10,⁻10,⁻10,⁻10,⁻10,0,0,10,⁻10,0,0)→Pic1Z
/les coordonnées x,y,z de mes points

0→θ→W
40→R
50→G

0→r₄→r₅→r₆
Repeat getKey(15)
ClrDraw

cos(θ)→{L₂}ʳ
cos(θ+64)→{L₂+2}ʳ
sin(θ)→{L₂+4}ʳ
sin(θ+64)→{L₂+6}ʳ
cos(W)→{L₂+8}ʳ
cos(W+64)→{L₂+10}ʳ
sin(W)→{L₂+12}ʳ
sin(W+64)→{L₂+14}ʳ
/tout plein de calculs

For(U,0,13
/je calcule les coordonnées x,y de mes 14 sommets sur mon écran
{Pic1X+U}→X
{Pic1Y+U}→Y
{Pic1Z+U}→Z

X>127?X-256→X
Y>127?Y-256→Y
Z>127?Z-256→Z

X+r₄→X
Y+r₅→Y
Z+r₆→Z

{L₂}ʳ*X+({L₂+2}ʳ*Y)//127→A
{L₂+4}ʳ*X+({L₂+6}ʳ*Y)//127→B
{L₂+8}ʳ*A+({L₂+10}ʳ*Z)//127→C
{L₂+12}ʳ*A+({L₂+14}ʳ*Z)//127→D

C→A
A→X
B→Y
⁻D→Z

R-X→X
G*Y//X+48→{L₁+U}
G*Z//X+32→{L₃+U}
Pxl-On({L₁+U},{L₃+U}
/j'affiche mes points
End

GDB1→r₁
For(K,0,23
/je trace mes 24 arrêtes
{r₁}→L
{r₁+1}→M
r₁+2→r₁
Line({L+L₁-1},{L+L₃-1},{M+L₁-1},{M+L₃-1}
End

DispGraph

θ+getKey(2)-getKey(3)→θ
W+getKey(1)-getKey(4)→W
R-getKey(48)+getKey(54)→R
r₄-getKey(35)+getKey(19)→r₄
r₅-getKey(28)+getKey(26)→r₅
r₆-getKey(11)+getKey(10)→r₆
/un pâté de getkey pour modifier mes variables
End


Et voilà ! Je pense que je vais essayer de trouver une autre méthode qui serait peut être plus rapide quand il y a plus de points, je vous tiens au courant :D

Re: Un ptit moteur 3D ?

PostPosted: 04 Jan 2015, 16:22
by Wistaro
Oki merci :)

Re: Un ptit moteur 3D ?

PostPosted: 04 Jan 2015, 20:19
by Hayleia
Plokki wrote:En passant je me demande si il existe une commande en axe pour convertir un nombre d'un octet en un nombre de deux octets parce que j'ai ça:
-10→{L1} donc {L1}=246 mais si je fait:
{L1}→A j'ai: A=246 et pas A=65526
du coup je suis obligé de mettre ça dans mon prog pour que mes variables aient la bonne valeur:
X>127?X-256→X
Y>127?Y-256→Y
Z>127?Z-256→Z

Dans le zip où tu as téléchargé l'Axe Parser, il y a un fichier "Commands.hmtl". Il te sera souvent utile. La ligne qui t'intéresse aujourd'hui est la suivante :
signed{EXP} Key:int() Returns the single byte the expression points to. It will be in the range -128 to 127.

Re: Un ptit moteur 3D ?

PostPosted: 05 Jan 2015, 14:33
by TheMachine02
Et bien ça ma l'air bien tout ça :p
30 fps pour 24 arrêtes et 14 points c'est respectable ....... *TheMachine02 vérifie les performances de son engin.

Matref pour son shooter utilisait un trick dût au caractère spécial du tunnel (si c'est bien celui là dont tu parle).
Pour l'occlusion y'a pas 36000 possibilités, dans tout les cas ça sera très lent ... ça fait deux ans que je me casse la tête dessus :D
Pour les rotations tout dépend de ce que tu veux faire, mais en général c'est les points qui bougent.

Re: Un ptit moteur 3D ?

PostPosted: 05 Jan 2015, 19:15
by Ti64CLi++
Pas mal du tous.
Il donne envie.