[opengl] projection objet 3d

projection objet 3d [opengl] - C++ - Programmation

Marsh Posté le 15-06-2010 à 21:22:12    

bonjour,
si on a un objet 3d alors chaque pixel (ou point) u est défini par 3 coordonnées [x,y,z]    
si on project cet objet avec projection perspective (opengl)
comment on calcule les coordonnées 2d de u

Reply

Marsh Posté le 15-06-2010 à 21:22:12   

Reply

Marsh Posté le 15-06-2010 à 21:39:23    

Salut,
Si tu veux faire des correspondances entre l'espace et l'écran, tu peux utiliser gluProject/gluUnProject.


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 15-06-2010 à 21:51:45    

ptitchep a écrit :

Salut,
Si tu veux faire des correspondances entre l'espace et l'écran, tu peux utiliser gluProject/gluUnProject.


 :ouch:  
j'ai pas compris ce que  tu veux dire  :(  

Reply

Marsh Posté le 16-06-2010 à 09:38:51    

La scène que tu visualises est en 3D. ton écran est en 2D. Si  je comprends bien, tu veux faire une correspondance entre les deux.
J'avais eu à le faire pour savoir sur quoi pointait ma souris. Je n'ai pas le code ici mais je pourrai regarder chez moi si besoin. J'avais utilisé les fonctions gluProject et gluUnProject. L'une te permet de "mapper des coordonnées 3D en 2D" et l'autre l'inverse.
http://www.opengl.org/sdk/docs/man [...] roject.xml
http://www.opengl.org/sdk/docs/man [...] roject.xml
 
J'espère être plus clair.


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 16-06-2010 à 10:19:52    

ptitchep a écrit :

La scène que tu visualises est en 3D. ton écran est en 2D. Si  je comprends bien, tu veux faire une correspondance entre les deux.
J'avais eu à le faire pour savoir sur quoi pointait ma souris. Je n'ai pas le code ici mais je pourrai regarder chez moi si besoin. J'avais utilisé les fonctions gluProject et gluUnProject. L'une te permet de "mapper des coordonnées 3D en 2D" et l'autre l'inverse.
http://www.opengl.org/sdk/docs/man [...] roject.xml
http://www.opengl.org/sdk/docs/man [...] roject.xml
 
J'espère être plus clair.


merci  ptitchep je vais les voir .
mais j'ai lu un article qui dit il faut un projection perspective et il faut nous connaitrons le focal length du camera  :??:  :??:  pour mappé le point 3d sur l'écran 2d  

Reply

Marsh Posté le 16-06-2010 à 11:36:03    

gluProject se débrouille avec les matrices modelview projection et viewport et te donne directement les coordonnées à l'écran (potentiellement hors écran) il me semble. Par contre dans l'autre sens, je crois que cela te donne les coordonnées d'un point sur un certain plan. À toi de t'adapter.
Donc dans ton cas, je pense que tu n'as rien à faire, "juste" appeler gluProject.
Dans l'autre sens j'avais dû pêcher les informations avec goole => "objet curseur souris opengl gluUnProject"


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 16-06-2010 à 12:04:16    

il me semble que je ne peux pas utilisé cette fct
parce que   j'ai une cylindre 3d j'ai le projeté sur une image 2d donc  les point du cylindre ont deux façons pour les représenter soit en 3d soit en 2d  
j'ai fais mes calcule en 3d mais  la projections pour appliqué mes calcule  qui sont des transformations dans le  plan 2d.
(je ne sais pas est ce que j'ai bein compris les étap de mon projet ou
non
par ce que mon objectif est de mappé mon objet 3d comme cette vidéo
http://youtube.com/watch?v=TsbG7qiWhOM
 
 
 

Reply

Marsh Posté le 17-06-2010 à 21:28:08    

En fait, j'avoue que je ne comprends pas trop ce que tu veux faire :-s
Lorsque tu dessines le cylindre sur le visage, tu le fais avec des coordonnées 3D?
C'est quoi que tu appelles mappé dans cette vidéo? Le point violet?


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 18-06-2010 à 18:08:05    

ptitchep a écrit :

En fait, j'avoue que je ne comprends pas trop ce que tu veux faire :-s
Lorsque tu dessines le cylindre sur le visage, tu le fais avec des coordonnées 3D?
C'est quoi que tu appelles mappé dans cette vidéo? Le point violet?


moi je veux faire comme cet article
http://www.cs.cmu.edu/~face/Papers [...] covery.pdf
c'est pour çà j'ai créer un cylindre  avec opengl.
ensuite  
http://xphilipp.developpez.com/tmp/Pose3D.png
mon problème dans les étape 2,3,5
parce que  
2et 3 représentent une projection des points en 2d sur un cylindre à une position défini  
5: représente la projection inverse

Reply

Marsh Posté le 20-06-2010 à 13:34:22    

Est-ce que tu connais les positions des points de l'étape 2? et Δµ?

 

Si oui, tu utilises gluUnProject, tu obtiens les coordonnées des points sur le plan de l'écran. Ensuite tu calcules les équations des droites qui passent par la caméra et chacun des points. Tu cherches les points d'intersection entre tes droites et ton cylindre et tu obtiens les points en 3. Tu appliques Δµ pour obtenir les nouveaux points en 4 et tu utilises gluProject pour obtenir les coordonnées des nouveaux points en 5.


Message édité par ptitchep le 20-06-2010 à 13:41:24

---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 20-06-2010 à 13:34:22   

Reply

Marsh Posté le 04-07-2010 à 08:25:14    

bon;
si mes coordonnée 3d sont (x,y,z) et si je veux faire une projection perspective , je faire comme ça  
GLint gluProject( GLdouble   X,  
  GLdouble   Y,  
  GLdouble   Z,  
  const GLdouble *   GL_PERSPECTIVE_CORRECTION_HINT,  
  const GLdouble *   proj,  
  const GLint *   view,  
  GLdouble*   winX,  
  GLdouble*   winY,  
  GLdouble*   winZ);
????
(je sais que j'ai fais une coupé/collé mais désolé j'ai pas bien compris comment je travail avec cette fonction .:oops:)

Reply

Marsh Posté le 05-07-2010 à 17:38:13    

Oui il me semble que c'est dans ce sens. Par contre je n'ai jamais compris à quoi servait winZ...
Ce soir je cherche un code où je l'utilise et je te poste ça.


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 05-07-2010 à 22:35:29    

Code :
  1. double modelMatrix[16], projMatrix[16];
  2. int viewport[4];
  3. double x,y,z;
  4. const Point& position (obj->getPosition());
  5. glGetDoublev(GL_MODELVIEW_MATRIX,modelMatrix);
  6. glGetDoublev(GL_PROJECTION_MATRIX,projMatrix);
  7. glGetIntegerv(GL_VIEWPORT,viewport);
  8. if ( gluProject( position.getX(),position.getY(),position.getZ(),modelMatrix, projMatrix,viewport,&x,&y,&z) == GL_TRUE &&
  9.      x >= 0 && x < largeurEcran &&
  10.      y >= 0 && y < hauteurEcran)
  11. {
  12.        ...
  13. }


Message édité par ptitchep le 05-07-2010 à 22:38:43

---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 08-07-2010 à 13:08:55    

merci pour le code

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed