2010-07-22 95 views
3

我想在我的世界中绘制汽车。 但我的汽车旋转时灯光有问题,汽车旋转时看起来灯光位置发生变化; 但当我绘制简单的立方体与谷歌功能,它工作正常。openGL与照明问题旋转

空隙mydisplay(){

glLoadIdentity() 
glDisable(GL_LIGHT0); 
glColorMaterial (GL_FRONT_AND_BACK, GL_DIFFUSE) ; 
glColor3f(1.0,1.0,1.0); 
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 
p2[0]=50.0; 
p2[1]=3.0; 
p2[2]=0.0; 
glLightfv(GL_LIGHT0,GL_POSITION,p2); 
glEnable(GL_LIGHT0); 
gluLookAt(50.0,3.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0); 
glPushMatrix(); 
glRotatef(tet,0.0,1.0,0.0); 
glutSolidCube(20); 
glPopMatrix(); 
tet+=3.141592653/4; 
glutSwapBuffers(); 

}

时glutSolidCube(20);改变我的绘图代码,它在恶劣的工作方式 我的代码:

无效图纸(){

glEnableClientState(GL_VERTEX_ARRAY); 
GLfloat CubeVertex[]={ -20.0,0.0,10.0,//\/\/\/\/\/\\\///\/\/\/\/\/\/\/\/\/\/\/\/\/\/ 
       -20.0,0.0,-10.0, 
       -20.0,3.0,-10.0, 
       -20.0,3.0,10.0, ///BIG CUBE 
      20.0,0.0,10.0, 
      20.0,0.0,-10.0, 
      20.0,3.0,-10.0, 
      20.0,3.0,10.0,////////\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ 
      -10.0,3.0,10.0, 
      -10.0,3.0,-10.0, 
      -10.0,5.0,-10.0, 
      -10.0,5.0,10.0,  //SMALL CUBE 
      10.0,3.0,10.0, 
      10.0,3.0,-10.0, 
      10.0,5.0,-10.0, 
      10.0,5.0,10.0,//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\// 
      -100.0,-2.4,100.0, 
      -100.0,-2.4,-100.0,  //FLOOR 
      100.0,-2.4,100.0, 
      100.0,-2.4,-100.0 
      };//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\\/\// 
GLubyte big_back[]={0,3,2,1}; 
GLubyte big_front[]={4,5,6,7}; 
GLubyte big_left[]={4,0,3,7}; 
GLubyte big_right[]={1,2,6,5}; 
GLubyte big_up[]={2,3,7,6}; 
GLubyte big_down[]={0,1,5,4}; 
GLubyte small_back[]={9,10,11,8}; 
GLubyte small_front[]={12,13,14,15}; 
GLubyte small_left[]={8,11,15,12}; 
GLubyte small_right[]={9,10,14,13}; 
GLubyte small_up[]={10,11,15,14}; 
GLubyte floor[]={16,17,19,18}; 
GLsizei count[]={4,4,4,4,4,4,4,4,4,4,4,4}; 
GLvoid* indices[12]={big_back,big_front,big_left,big_right,big_up,big_down,small_back,small_front,small_left,small_right,small_up,floor}; 
glVertexPointer(3,GL_FLOAT,0,CubeVertex); 
for(int i=0;i<12;i++){//////////////////glMultiDrawElement//////////////// 
if(count[i]>0) 
    glDrawElements(GL_QUADS,count[i],GL_UNSIGNED_BYTE,indices[i]); 
}//////////////////////////////glMultiDrawElements////////////////////// 

}

谢谢。

+0

我说我的代码与glutSolidCube(20)正常工作,但有问题与glDrawElements。为什么?谢谢。 – pooya 2010-07-23 07:09:52

回答