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

Création de jeux vidéo Discussion :

extraction du redimensionnement signé d’une matrice de transformation ?


Sujet :

Création de jeux vidéo

  1. #1
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut extraction du redimensionnement signé d’une matrice de transformation ?
    Bonjours,

    Je coince actuellement sur un problème qui n’a pas l’air évident du tout –*extraire la partie “redimensionnement” (un tableau de trois float, scale x/y/z) d’une matrice de transformation (qui a priori ne contient que du redimensionnement, mais potentiellement modifiée par un changement d’espace).

    Le truc pour extraire le redimensionnement non signé est simple –*pour info, voici notre code C actuel*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void mat3_to_size(float size[3], float mat[][3])
    {
    	size[0] = len_v3(mat[0]);
    	size[1] = len_v3(mat[1]);
    	size[2] = len_v3(mat[2]);
    }
    Mais pour récupérer le redimensionnement signé (en cas d’échelle négative), ben… je trouve rien. Quelqu’un a-t-il une technique*? Ou peut-il me confirmer que ce n’est pas faisable (j’aime pas me taper la tête contre les murs pour rien)*? Merci d’avance.

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Points : 545
    Points
    545
    Par défaut
    Salut !

    A mon avis tu as posté ton problème au mauvais endroit, le terme infographie de ce forum, semble plus indiquer le domaine métier que la spécialisation mathématique.
    Sache qu’il existe un forum mathématique ici qui traite de nombreux problèmes infographie. Il est bien planqué

    Mais pour récupérer le redimensionnement signé (en cas d’échelle négative), ben… je trouve rien.
    Une échelle négative… cela n’a pas sens

    L’échelle est indiqué par la norme de chaque axe de ton repère, la longueur d’un vecteur est obligatoirement un nombre réel positif.
    Si tu cherche à réduire l’espace, il te faut fixé cet norme dans l’intervalle ]0, 1[ et pour l’agrandir ]1, infini] . Si tu appliques un coefficient négatif, en plus de modifier l’échelle, tu inversera ton axe, il est préférable de manipuler l’orientation de tes 3 axes en même temps, en utilisant des matrices de rotation ou des quaternions, afin de garder un repère cohérant.
    ShaderElement : Bénéficier de l’accélération graphique simplement par une nouvelle balise HTML <shader>
    ODE.js : portage JavaScript du célèbre moteur physique 3D Open Dynamics Engine

  3. #3
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Merci pour cette réponse (et le lien )…

    Le fait est que Blender reconnaît les tailles négatives (utilisées entre autre pour les transformations “miroir”) –*et que ça pose de nombreux problèmes avec les contraintes, qui ne travaillent que sur des matrices. Bref, faut que je voie si y a moyen de bricoler quelque chose… :/

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Points : 545
    Points
    545
    Par défaut
    Ok ! Tu peux utiliser le produit scalaire de chacun de tes axes sur ceux d’origine (la matrice identité) pour en déduire l’inversion ou le signe.

    Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void dot(float v1[3], float v2[3])
    {
    	return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2];
    }
     
    void mat3_to_size(float size[3], float mat[][3])
    {
    	size[0] = ((dot(mat[0],{1, 0, 0})>0)? 1 : -1) * len_v3(mat[0]);
    	size[1] = ((dot(mat[1],{0, 1, 0})>0)? 1 : -1) * len_v3(mat[1]);
    	size[2] = ((dot(mat[2],{0, 0, 1})>0)? 1 : -1) * len_v3(mat[2]);
    }
    ShaderElement : Bénéficier de l’accélération graphique simplement par une nouvelle balise HTML <shader>
    ODE.js : portage JavaScript du célèbre moteur physique 3D Open Dynamics Engine

Discussions similaires

  1. Extraction d'une sous matrice à partir d'une matrice
    Par Christinita dans le forum MATLAB
    Réponses: 16
    Dernier message: 17/01/2009, 11h42
  2. Extraction d'élément d'une matrice
    Par mathilde_b dans le forum MATLAB
    Réponses: 1
    Dernier message: 26/03/2007, 11h03
  3. Extraction des composantes des pixels dans une matrice
    Par hanane78 dans le forum Images
    Réponses: 7
    Dernier message: 11/03/2007, 23h12
  4. Ajouter une matrice de transformation
    Par Ekinoks dans le forum OpenGL
    Réponses: 9
    Dernier message: 20/11/2006, 20h32
  5. Redimensionner une matrice avec "reshape"
    Par kmaniche dans le forum Images
    Réponses: 9
    Dernier message: 07/06/2006, 19h35

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