J'essaie de montrer une matrice 3D composée de 7600700 points et je veux obtenir un parallélépipède qui est noir sur la surface et rouge à l'intérieur. J'ai le parallélépipède et il est noir sur la surface et rouge à l'intérieur et j'utilise trois fenêtres différentes pour montrer trois plans différents qui sectionnent le parallélépipède et pressant une touche il est possible de se déplacer dans une direction (dans une fenêtre le long du x, dans un autre le long du y et dans le troisième le long de la z) regarder une section à la fois. Déplacer z et x ne me pose aucun problème, je peux voir les plans de section correctement, mais quand j'essaye de montrer quelque chose dans la troisième fenêtre (celle qui me permet de me déplacer le long de la coordonnée y sectionnant le parallélépipède avec le xz plan) je reçois des choses différentes. Si j'écrisJe ne peux voir qu'un seul point quand je change gluLookAt
gluLookAt (85.0f, 340.0f, 131.5f, 85.0f, 85.0f, 131.5f, 0.0f, -1.0f, 0.0f)
je reçois un seul point, mais si j'écris
gluLookAt (340.0f, 85.0f, 131.5f, 85.0f, 85.0f, 131.5f, 0.0f, -1.0f, 0.0f)
ou
gluLookAt (85.0f, 85.0f, 526.0f, 85.0f, 85.0f, 131.5f, 0.0f, -1.0f, 0.0f)
je reçois un plan. Mon parallélépipède est composé de 170 valeurs pour le x, 170 valeurs pour le y et 263 pour le z donc je règle habituellement les trois paramètres de gluLookAt de cette façon: je double la coordonnée le long de laquelle je vais bouger et je divise par deux deux coordonnées. Voici un morceau de mon code:
void fill_array_3() {
g_vertex_buffer_data_3=new GLfloat[3*p_mat_size_tot];
int i=0;
int k=0;
for(int y=0;y<170;y++) {
for(int z=0;z<263;z++) {
for(int x=0;x<170;x++) {
g_vertex_buffer_data_3[i]=(GLfloat)x+0.5f;
g_vertex_buffer_data_3[i+1]=(GLfloat)y+0.5f;
g_vertex_buffer_data_3[i+2]=(GLfloat)z+0.5f;
i+=3;
}
}
}
void display_3(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt (85.0f, 340.0f, 131.5f, 85.0f, 85.0f, 131.5f, 0.0f, -1.0f, 0.0f);
glPushMatrix();
glRotatef(step15, 1.0f, 0.0f, 0.0f);
glRotatef(step16, 0.0f, 1.0f, 0.0f);
glScalef(step17, step17, step17);
glTranslatef(0.0f, 0.0f, step18);
glTranslatef(step19, 0.0f, 0.0f);
glTranslatef(0.0f, step20, 0.0f);
glMatrixMode(GL_MODELVIEW);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glVertexPointer(3, GL_FLOAT, sizeof(Point), &points3[0].x);
glColorPointer(3, GL_FLOAT, sizeof(Point), &points3[0].r);
glPointSize(3.0);
glDrawArrays(GL_POINTS, step21*170*263, 170*263);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glFlush();
glPopMatrix();
glutSwapBuffers();
}
void reshape_3(int w, int h)
{
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
glFrustum (-1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 5000.0f);
glMatrixMode (GL_MODELVIEW);
}
int main(int argc, char** argv)
{
[...]
fill_array_1();
fill_array_2();
fill_array_3();
fill_array();
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(600,600);
glutInitWindowPosition (1100, 100);
window_3 = glutCreateWindow(argv[0]);
glutSetWindowTitle("Vista y");
init();
glutDisplayFunc(display_3);
glutReshapeFunc(reshape_3);
glutKeyboardFunc(keyPressed_3);
glutMainLoop();
return 0;
}
Nous vous remercions de votre aide !!!
Ai-je fait une mauvaise question? –