Bonjour, pour un projet d'imagerie médicale je dois mettre à disposition une interface permettant la visualisation d'images 3d avec des voxels.
Cette partie étant finis je dois arriver maintenant à faire des plan de coupe sur ces objets, ainsi je dessine vraiment le plan à l'écran avec un simple maillage de lignes.
Le problème est de lier mon plan réelle à mon équation passé en paramètre dans mon glClipPlane(GL_CLIP_PLANExx , Equation).
Voici mon code pour calculer celle-ci:
La fonction TransformMatrix sert juste à trouver la nouvelle coordonnée de mon point après une rotation. UpdateEqual met à jours l'équation du plan.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 glPushMatrix(); glRotatef(deg_alpha, 1.0, 0.0, 0.0);//Rotation plan seul glRotatef(deg_beta, 0.0, 1.0, 0.0); glGetDoublev(GL_MODELVIEW_MATRIX, matrix); glColor3fv(plane_color); glLineWidth(LineWith); glBegin(GL_LINES); for (int i=0; i<=Largeur*2; i++)//nombre de maillage en hauteur { glVertex3f(-((double)Largeur-i)/5.0, ((double)Hauteur)/5.0, 0); glVertex3f(-((double)Largeur-i)/5.0, -((double)Hauteur)/5.0, 0); } for (int i=0; i<=Hauteur*2; i++)//nombre de maillage en largeur { glVertex3f(((double)Largeur)/5.0, ((double)Hauteur-i)/5.0, 0); glVertex3f(-((double)Largeur)/5.0, ((double)Hauteur-i)/5.0, 0); } glEnd(); glPopMatrix(); A.TransformMatrix(matrix); B.TransformMatrix(matrix); Point3D N = A ^ B; UpdateEqual(N.setX(),N.setY(),N.setZ();) glClipPlane(GL_CLIP_PLANE0 + Id,Equal); ... void init() { ... A = Point3D((double)-Largeur/5.0, (double)Hauteur/5.0, 0); B = Point3D((double)-Largeur/5.0, (double)-Hauteur/5.0, 0); ... }
Problème le plan de coupe ne suis vraiment pas mon plan, il est beaucoup trop rapide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 void Point3D::TransformMatrix(GLdouble matrix [16]) { x = matrix [0]*x + matrix [1]*y + matrix [2]*z + matrix [3]*w; y = matrix [4]*x + matrix [5]*y + matrix [6]*z + matrix [7]*w; z = matrix [8]*x + matrix [9]*y + matrix [10]*z + matrix [11]*w; w = matrix [12]*x + matrix [13]*y + matrix [14]*z + matrix [15]*w; } void Clip::UpdateEqual(double alpha, double beta, double rho) { Equal[0] = alpha; Equal[1] = beta; Equal[2] = rho; }.
Tous vos conseils sont les biens venus.Merci.
Partager