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:

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);
...
}
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
 
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;
}
Problème le plan de coupe ne suis vraiment pas mon plan, il est beaucoup trop rapide .

Tous vos conseils sont les biens venus .Merci.