2016-06-07 5 views
-1

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 !!!

+0

Ai-je fait une mauvaise question? –

Répondre

1

votre direction de visualisation avec

gluLookAt (85.0f, 340.0f, 131.5f, 85.0f, 85.0f, 131.5f, 0.0f, -1.0f, 0.0f) 

est (0, 85-340, 0), qui est colinéaires à votre up vecteur de (0,-1,0). gluLookAt va juste échouer, parce que vos entrées ne décrivent pas une orientation de caméra distincte.

+0

Tout d'abord merci pour votre réponse! Dois-je modifier le vecteur haut? –

+0

Maintenant ça marche !! Si je mets gluLookAt (85.0f, 340.0f, 131.5f, 85.0f, 85.0f, 131.5f, 0.0f, 1.0f, 1.0f) tout va comme je le ferais !!! Merci beaucoup!!!!!!!!!!! –