Formules 3D

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 2 nov. 2008 à 21:50
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 5 nov. 2008 à 11:07
Bonsoir,
je cherche, dans mes moments perdus, à réaliser un labyrinthe en 3D, rien d'extraordinaire, juste des murs avec des textures, et une caméra que l'on peut contrôler.
Première approche avec la 3D : j'ouvre mon projet, je l'enregistre, et je coince.
Retour au papier : quelques formules utiles improvisées :

Distance entre deux points 3D A et B :

Soient C1 et C2 deux longueurs.
C1 est égal à A.X - B.X
C2 est égal à A.Y - B.Y
On utilise le théorème de Pythagore ...
Soit D la distance des deux points, en dehors de leur coordonnée Z (2D quoi) :
D² = C1² + C2²
Soit D = Sqrt(C1² + C2²)

Jusque là pas de problème

Ensuite, soit L la valeur de A.Z - B.Z
Pythagore ...
Soit T la distance des deux points 3D (on y arrive ...)
T² = L² + D²
T = Sqrt(L² + D²)

Voilà ! Je suppose que cette formule est correcte.

Ensuite (eh oui cette formule est secondaire  ...) :

Calcul de la position d'un point A dans le champ de vision d'un point B, relative à la distance entre les deux points et à l'angle du point B sur la parallèle X (vous allez comprendre ...) :

Soient C1 et C2 deux longueurs :
C1 est égal à A.Y - B.Y
C2 est égal à A.Z - B.Z

On utilisera le rapport C1 / Distance et C2 / Distance.

Bien ...

Ensuite, j'ai réussi à sortir ça de ma tête, je ne sais même pas comment :

Coefficient Angulaire (c.a) = Amplitude du champ de vision B (longueur ou hauteur) / 180

Positions relatives de A dans B

A.Y := B.Y + (C1 / Distance) - (c.a [de longueur] x Angle de B)
A.Z := B.Z + (C2 / Distance) - (c.a [de hauteur] x Angle de B)

Voilà ... mais après un rapide test avec un rectangle sur lequel est appliqué une texture, niet ... rien du tout.
Donc, je me demandais si mes formules  au-dessus étaient correctes ... la première je suppose, mais la seconde ... doit avoir des bons points mais doit être fausse dans l'ensemble.
J'ai abandonné la recherche dans mes  bouquins de maths, ça doit être des maths de relativement haut niveau, et je n'ai, pour le coup, rien trouvé sur google.
Si vous aviez ces formules (surtout la deuxième),  pourriez-vous me dire de quelle façon il faut procéder ?
Je pense que si j'ai les bonnes formules, la prog' devrait aller toute seule.
Sinon, ne vous inquiétez pas pour l'application des textures, j'ai mon idée.

Merci d'avance :)

Cordialement, Bacterius !

9 réponses

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
2 nov. 2008 à 21:51
Ah j'ai oublié de préciser que l'angle de B peut varier de -180° à 180°.

Cordialement, Bacterius !
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
3 nov. 2008 à 22:35
bonsoir,
cherche à "espace 3d" sur le site..
sinon "3d" ça marche pas car il n'y a que deux caractères..

cantador
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
4 nov. 2008 à 10:36
Ok merci du conseil Cantador, je vais chercher :)

Cordialement, Bacterius !
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
4 nov. 2008 à 21:28
Bonsoir

"Calcul de la position d'un point A dans le champ de vision d'un point B, relative à la distance entre les deux points et à l'angle du point B sur la parallèle X (vous allez comprendre ...)"

Désolé mais moi j'ai rien compris à ce que tu veux faire, alors pour t'aider cela va être difficile.

P.S. Pourrais-tu joindre un croquis de ce que tu souhaites ou même un petit schéma en "ASCII art" histoire d'éclaircir le problème ? Quelque chose du style :

Y                  A
 |                  x
 |  Z                \
 | /                  \
 |/                    \
-/------->              \
 |        X              \ B
                          x

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
4 nov. 2008 à 21:40
Wouah j'ai jamais su faire les ascii-art, j'y comprends rien, bref.
En fait, dans un plan 3D orthonormé :

Il y a 3 types de droites, voici un croquis :

(je tente l'ascii-art ...)





DE FACE :




     z
     |
x ---€----
     |y (vue de haut, c'est le rond)

DE HAUT :

     y
     |
x ---€---
     |z (vue de haut, c'est le rond)

Bon tout le monde connaît ça à un moment ou à un autre, c'est un principe de base, bref.

Bon.

Quand tu joues à un jeu 3D, tu diriges une caméra : c'est à dire un point qui bouge, et qui te montre ce que tu verrais à sa place, dans l'environnement 3D, selon un angle précis.

Deuxièmement, vous connaissez l'effet logique qui fait que lorsqu'on s'approche d'un arbre (qui est 1 mètre à notre gauche, sinon on se fait mal), l'arbre a tendance à s'éloigner du centre de notre vision.
Mais si on s'eloigne, il a tendance à se rapprocher du centre.
Je ne suis pas sûr mais je crois qu'il s'agit du principe de parallaxe.

Je voudrais adapter cela à un jeu 3D (ici un labyrinthe), en considérant l'arbre comme un point, et notre vue comme un point également.

Voilà, je pense que c'est plus clair, c'est vrai que ce n'était pas évident la dernière fois ^^

Cordialement, Bacterius !
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
4 nov. 2008 à 21:41
Oups, petite précision sur les ascii-art : normalement le rond (Alt Gr + la touche à droite des trémas et du circonflexe) s'est transformé en euro. Considérez-le comme un rond :)

Cordialement, Bacterius !
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
4 nov. 2008 à 23:08
J'ai l'impression que ce que tu veux faire, est une simple projection perspective !
La formule la plus basique (On ne l'applique jamais tel quel) pour faire cela est :
  x(2D) = x(3D)/z(3D)
  y(2D) = y(3D)/z(3D)
Plus l'élément est loin (z(3D) grand) et plus celui ci paraitra petit.

Va voir sur google les liens comme celui-ci, ou encore celui-là ne manque pas.

P.S. J'ai peut être encore rien compris à ce que tu souhaites, auquel cas, on verra si demain mes idées seront plus claires.

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
4 nov. 2008 à 23:28
magnez vous un peu !
chuis coincé dans le labyrinthe dans le 3e virage sur la droite..

cantador
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
5 nov. 2008 à 11:07
Ouais voilà WhiteHippo c'est une projection perspective que je voudrais appliquer
Je n'arrive plus à m'exprimer correctement rhalala
Je vais voir tes liens pour voir si cela correspond à mon problème.

[Clique sur le 2eme lien, car le premier déclenche une erreur chez moi]

"The perspective projection requires greater definition. A conceptual aid to understanding the mechanics of this projection involves treating the 2D projection as being viewed through a camera viewfinder. The camera's position, orientation, and field of view control the behaviour of the projection transformation. The following variables are defined to describe this transformation"

Parfait, exactement ce que je cherchais
Merci pour ton aide précieuse WhiteHippo :) je garde le lien en favoris

Cordialement, Bacterius !
0
Rejoignez-nous