IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

Rotation et sens horlogique


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Candidat au Club
    Homme Profil pro
    étudiant amateur
    Inscrit en
    Novembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : étudiant amateur

    Informations forums :
    Inscription : Novembre 2015
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Rotation et sens horlogique
    Bonjour, j'essaie de développer un "micro moteur 3D" qui gère l'illumination par le calcul des normales aux faces!
    J'ai pour l'instant créé un cube que j'éclaire depuis la position de la "caméra" puis je le fait tourner sur les différents axes 3D !!

    Je travaille dans un repère où la profondeur est en Z, l'horizon sur X, et l'altitude sur Y.
    J'utilise une technique plutôt "old-school" pour les rotations (déplacement du cube à l'origine , rotation puis replacement du cube à sa position initiale)

    Les faces ne s'affichent pas correctement après une rotation sur Y(par exemple) :les faces perpendiculaires à l'axe de rotation et définit selon le sens horlogique sont au bout de 180° comme à "l'envers" hors elles devraient être visible!! J'ai bien tenté de les redéfinir selon si le cube est de face ou de dos, mais si je tourne selon un autre axe le problème est amplifié et le cube ne ressemble plus à un cube !!

    Ma question est donc existe-t-il une solution pour définir l'ordre des sommets de chaque face en fonction de la rotation et ce par un calcul dont je n'aurai aucune idée ??

    Je précise que j'ai calculé les normales et que j'ai tout normaliser !(<=1)
    Mon niveau en maths est assez moyen ...Merci !

  2. #2
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 563
    Points
    4 563
    PXL le retro-gaming facile: Essayez-le

    Yildiz-Engine an open-source modular game engine: Website
    Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page

  3. #3
    Candidat au Club
    Homme Profil pro
    étudiant amateur
    Inscrit en
    Novembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : étudiant amateur

    Informations forums :
    Inscription : Novembre 2015
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci pour le lien ... je ne pense pas pouvoir introduire cette matrice dans mon programme (trop complexe et gourmande en calcul mais surtout complexe)

    Mon problème est de définir pour chaque face l'ordre des sommets (1,2,3) pour pouvoir calculer la normale afin de donner une luminosité ...
    Je vais tenter de donner trois angle de rotation par face puis en fonction, intervertir le sommet 1 et 2 par exemple si la face à tournée de 180° sur l'axe Y et qu'elle se trouvait à l'origine parallèle au plan X-Z !

    Cependant cela fait beaucoup de cas !

    peut être le " blocage de cardan" m'aurait aider à lister les cas ... mais je n'ai pas le niveau (matrice... math spé et moi seconde!!)

  4. #4
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par ubi33 Voir le message
    Merci pour le lien ... je ne pense pas pouvoir introduire cette matrice dans mon programme (trop complexe et gourmande en calcul mais surtout complexe)

    peut être le " blocage de cardan" m'aurait aider à lister les cas ... mais je n'ai pas le niveau (matrice... math spé et moi seconde!!)
    Les rotations via des quaternions c'est utilisé partout, ça coute vraiment pas grand chose en temps de calcul.
    Et en plus... pas besoin de comprendre comment ça marche (j'ai personnellement jamais compris ) c'est juste une équation à recopier, ou utiliser une lib qui implémente ça (exemple glm).

    Quant aux matrices, c'est étonnement simple à comprendre, mais encore une fois, pas besoin de comprendre comment ça marche pour les utiliser.

  5. #5
    Candidat au Club
    Homme Profil pro
    étudiant amateur
    Inscrit en
    Novembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : étudiant amateur

    Informations forums :
    Inscription : Novembre 2015
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Iradrille Voir le message
    Les rotations via des quaternions .... c'est juste une équation à recopier, ou utiliser une lib qui implémente ça (exemple glm).

    Quant aux matrices, c'est étonnement simple à comprendre, mais encore une fois, pas besoin de comprendre comment ça marche pour les utiliser.
    Salut c'est motivant mais ce type de rotation s'applique à des vecteurs (d'après ce que j'ai compris) hors j'utilise la rotation des points
    x'=x*cos(angle)+z*sin(angle)... et z'=x*sin(angle)-z*cos(angle) pour la rotation autour de y

    Quelle serait donc cette équation en quaternion et comment l'appliquer ensuite à chaque point et enfin comment définir le vecteur unitaire ??
    J'ai trouvé une matrice r(1,1) r(1,2).... r(3,3) sur wiki mais comment je l'applique au vecteur unitaire ?(ci dessous v1 v2 v3)

    t1 = cos(theta)
    t2 = 1 - t1
    t3 = v1*v1
    t6 = t2*v1
    t7 = t6*v2
    t8 = sin(theta)
    t9 = t8*v3
    t11 = t6*v3
    t12 = t8*v2
    t15 = v2*v2
    t19 = t2*v2*v3
    t20 = t8*v1
    t24 = v3*v3
    R[1, 1] = t1 + t2*t3
    R[1, 2] = t7 - t9
    R[1, 3] = t11 + t12
    R[2, 1] = t7 + t9
    R[2, 2] = t1 + t2*t15
    R[2, 3] = t19 - t20
    R[3, 1] = t11 - t12
    R[3, 2] = t19 + t20
    R[3, 3] = t1 + t2*t24


    Aurais tu un lien plus simple que wiki pour l'utilisation des matrices ???
    Je programme en basic (QB64) il existe avec OpenGL mais je ne souhaite pas m'en servir... il s'agit d'un flux que je n'arrive pas à maitriser !

  6. #6
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par ubi33 Voir le message
    Salut c'est motivant mais ce type de rotation s'applique à des vecteurs (d'après ce que j'ai compris) hors j'utilise la rotation des points
    Vecteur et point c'est basiquement la même chose.
    Un vecteur, comme (5; 3) peut mesurer une direction et une vitesse : le personnage se déplace de 5 unités vers la droite et de 3 unités vers le haut par seconde (ou n'importe quelle autre unité de temps). Çà peut aussi représenter une translation (=glissement, ou déplacement) : le personnage se déplace de 5 unités vers la droite, 3 vers le haut. Si on fait ce déplacement en partant de l'origine (0; 0), on arrive au point (5; 3).

    La différence entre vecteur et point c'est la signification que tu lui donne. D'un point de vu mathématiques c'est la même chose.

    Citation Envoyé par ubi33 Voir le message
    Quelle serait donc cette équation en quaternion et comment l'appliquer ensuite à chaque point et enfin comment définir le vecteur unitaire ??
    Aucune idée, si j'ai besoin de quaternions, j'utilise une lib qui les implémente, je sais pas le faire.

    Citation Envoyé par ubi33 Voir le message
    J'ai trouvé une matrice r(1,1) r(1,2).... r(3,3) sur wiki mais comment je l'applique au vecteur unitaire ?(ci dessous v1 v2 v3)
    Tu multiplie l'un par l'autre (le sens est important).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                     (1, 2, 3)
               mat = (4, 5, 6)
                     (7, 8, 9)
    vec = (2, 3, 4) x
    -----------------------
                   = (2*1 + 3*4 + 4*7, 2*2 + 3*5 + 4*8, 2*3 + 3*6 + 4*9)
                   = (42, 51, 54)

  7. #7
    Candidat au Club
    Homme Profil pro
    étudiant amateur
    Inscrit en
    Novembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : étudiant amateur

    Informations forums :
    Inscription : Novembre 2015
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bien merci j'ai réussi à intégrer la matrice seulement je n'arrive pas à définir un centre de rotation !!
    Et je n'arrive pas non plus à donner le bon sens aux faces d'un cube en fonction de la rotation par un angle et un vecteur !!
    les résultats obtenu par la matrice sont un peu bizarre sauf si v1=0 v2=0 et v3=1 la le cube tourne en x-y !!

    je n'ai donc pas de solution pour l'ordre des sommets selon la rotation!!!

    Mais j'ai compris le calcul matriciel et ça c'est bon j'ai de quoi m' amuser un peu !!

    Encore merci et si des fois z' aviez une idée pour l'ordre des sommets en fonction de la rotation ...?
    ou comment définir un centre de rotation autre que l'origine dans la matrice sus-citée ? ...

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  9. #9
    Candidat au Club
    Homme Profil pro
    étudiant amateur
    Inscrit en
    Novembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : étudiant amateur

    Informations forums :
    Inscription : Novembre 2015
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Je suis un peu navré pour tout ça mais j'ai trouvé mon problème !! Cela venait de la routine de tracé de triangle !! Mon calcul de normale était bon (en traçant le vecteur normal ) J'ai né en moins () appris à me servir des matrices et je suis maintenant à la recherche d'un tracé de triangle performant j'en ai fait un en m'inspirant de Bresenheim mais j'ai des trous dans mes triangles mais plus d'erreur !!! merci mon problème est résolu!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Animations: rotation en sens inverse
    Par Melian dans le forum Powerpoint
    Réponses: 1
    Dernier message: 07/12/2013, 05h14
  2. Bloquer le sens de rotation
    Par Johngtrs dans le forum Android
    Réponses: 2
    Dernier message: 05/12/2011, 08h52
  3. Récupérer le sens de rotation d'une liste de vecteurs
    Par Malone dans le forum Général Java
    Réponses: 0
    Dernier message: 15/01/2011, 20h39
  4. Connaitre le sens de rotation réalisé avec un doigt sur un écran tactile
    Par omegabahamut dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 18/11/2010, 12h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo