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

OpenGL Discussion :

conversion opengl -> povray


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Par défaut conversion opengl -> povray
    Voila, je veux "convertir" une scene creer avec opengl/glut en C en script povray.
    Je coince au niveau de l'orientation et position de la camera dans povray.

    Dans le code C, je peux obtenir la matrice modelview qui contient en principe toutes les informations de rotation, translation de la scene:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    float modelview[16];
    glGetFloatv(GL_MODELVIEW_MATRIX, modelview);
    Par example, apres quelques rotations, j'obtient la matrice suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    modelview matrix:
     a1=0.484810   a5=0.000000   a9=-0.874620    a13=0.000000
     a2=-0.383408  a6=0.898794   a10=-0.212527  a14=0.000000
     a3=0.786103   a7=0.438371   a11=0.435744   a15=-6.000000
     a4=0.000000   a8=0.000000    a12=0.000000   a16=1.000000
    Pour convertir en povray, il faut avoir les vecteurs, location, direction, right et up:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    camera{ perspective
       location  <x,y,z>
       direction <x,y,z>
       right     <x,y,z>
       up        <x,y,z>
    }
    Je'ai cru comprendre que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    right = <a1,a2,a3>
    up = <a5,a6,a7>
    direction = <a9,a10,a11>
    location = <a13,a14,a15>
    mais si je lance povray avec ca, j'obtient cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Creating vista buffer.Slab Building Error: Cannot use non-perpendicular camera vectors with vista buffer.
    En verifiant a la main, Les vecteurs <a1,a2,a3> et <a5,a6,a7> sont perpendiculaires, ainsi que <a5,a6,a7> et <a9,a10,a11>. Les autres sont non-perpendiculaires....

    une idee ?

    merci d'avance

    Dave

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Par défaut
    tu as bon pour location, mais le reste il faut que tu le calcules

    si tu pouvais modifier ton application pour utiliser gluLookAt à la place, ça te simplifirait la vie pour faire la transition

  3. #3
    Membre émérite

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Par défaut
    Inverse le sens du vecteur direction (prend -a9, -a10, -a11) voir.... C'est peut-être une histoire de repère direct/indirect.

  4. #4
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Par défaut
    TanEk: Inverse le sens du vecteur direction (prend -a9, -a10, -a11) voir.... C'est peut-être une histoire de repère direct/indirect.
    Nan, ca change rien, meme erreur.

    fgjdfgjdgj: tu as bon pour location, mais le reste il faut que tu le calcules
    et comment on fait ca ?

    fgjdfgjdgj: si tu pouvais modifier ton application pour utiliser gluLookAt à la place, ça te simplifirait la vie pour faire la transition
    Pour une scene statique peut-etre, mais j'ai une scene dynamique ou l'orientation de la scene change constament par des rotations donnees par les mouvements de la souris
    L'idee est de trouver une bonne orientation en utilisant le code C/opengl et faire un ray-trace avec povray pour avoir une bonne resolution.

  5. #5
    Membre Expert

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Par défaut
    À vrai dire je ne connais pas l'historique de ton projet donc je suis probablement à côté de la plaque, mais povray et opengl me semblent deux api distinctes donc je ne sais pas pourquoi tu veux absolument faire le lien entre les deux ? tu essaies de faire un wrapper d'applications existantes ? autre chose ?

    Si tu as un format de scène bien construit et documenté, ne serait-il pas plus simple de voir comment le convertir au format PovRay (avec un cout d'oeil aux tutoriaux pour comprendre ce à quoi sert chaque paramètre passé à povray) ? Bref comprendre les matrices de transformation, les objets camera de povray, etc. ce serait beaucoup plus instructif et probablement plus simple que la situation actuelle.

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  6. #6
    Membre émérite

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Par défaut
    Chez moi ils sont tous orthogonaux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            Vector3d right = new Vector3d(0.484810,-0.383408,0.786103);
            Vector3d up = new Vector3d(0.000000,0.898794,0.438371);
            Vector3d direction = new Vector3d(-0.874620,-0.212527,0.435744);
     
            System.out.println("test1 : " + right.dot(up));
            System.out.println("test2 : " + right.dot(direction));
            System.out.println("test3 : " + direction.dot(up));
    Donne comme résultat :

    test1 : -5.173899997323872E-8
    test2 : -3.045519999522739E-7
    test3 : -4.594139999813951E-7
    Comme la précision des chiffres est de E-6 il est normal de trouver un dot aux environs de E-7 ou E-8 encore ça veut dire 0 donc les 3 vecteurs sont bien orthogonaux entre eux. A mon avis c'est juste une histoire de précision... PovRay doit bosser en double et tu lui envoies une précision en flottant alors forcément lui il aime pas... Il faut que tu retrouves un vecteur en double perpendiculaire de telle sorte qu'il soit le plus prêt possible de la valeur en flottant... Tu résoudras ça par une méthode des moindres carrés. Ou y'a peut-être plus simple...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/03/2014, 22h49
  2. Réponses: 1
    Dernier message: 24/11/2012, 10h51
  3. Conversion projet openGl c++ vers c#
    Par vinch999 dans le forum OpenGL
    Réponses: 5
    Dernier message: 28/10/2010, 19h46
  4. conversion openCV en openGL
    Par diurnambule dans le forum C++
    Réponses: 3
    Dernier message: 12/05/2008, 23h06
  5. scene povray a partir d'une scene opengl
    Par dmichel dans le forum OpenGL
    Réponses: 8
    Dernier message: 05/09/2007, 16h33

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