将相机放入我的天空盒内

时间:2010-09-18 21:12:01

标签: c++ opengl camera

所以我正在完成一项家庭作业,我设法制作了我的天空盒,它看起来是正确的,唯一的问题是我的相机在天空盒外面。

我尝试了命令gluLookAt思考可能会把我的注意力放在盒子里,但它没有用。这是我现在的代码。如果有人能让我知道我做错了什么,我将不胜感激:

 gluLookAt(
       0,0,0,
       0,0,0
       0,1,0);
 glPushMatrix();
 //load identity matrix
 glLoadIdentity();

 //update x, y and z rotation directions
 glRotatef(currentRotation[1], 1.0, 0.0, 0.0); //x rotation
 glRotatef(currentRotation[2], 0.0, 1.0, 0.0); //y rotation
 glRotatef(currentRotation[3], 0.0, 0.0, 1.0); //z rotation
 /*
 //update scale of display
 glScalef(currentScaling[1],
    currentScaling[2],
    currentScaling[3]);*/

 //translate the image
 glTranslatef(currentTranslation[1],
     currentTranslation[2],
     currentTranslation[3]);

  /* Clear buffers */
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glEnable(GL_TEXTURE_2D); // Enable texturing from now on


  //front quadrant
  glBindTexture(GL_TEXTURE_2D,frontTextureId); // select which texture to use 
  glBegin(GL_QUADS);  
  glColor3f(1.0, 1.0, 1.0); 
  glTexCoord2f(1.0 ,0.0); glVertex3f(-0.5, 0.5, 0.5);
  glTexCoord2f(0.0 ,0.0); glVertex3f(0.5, 0.5, 0.5);
  glTexCoord2f(0.0 ,1.0); glVertex3f(0.5, 0.5, -0.5);
  glTexCoord2f(1.0 ,1.0); glVertex3f(-0.5, 0.5, -0.5);
  glEnd();

//left quadrant
  glBindTexture(GL_TEXTURE_2D, leftTextureId);
  glBegin(GL_QUADS);
  glColor3f(1.0, 1.0, 1.0);
  glTexCoord2f(0.0, 1.0); glVertex3f(-0.5, 0.5, -0.5);
  glTexCoord2f(1.0, 1.0); glVertex3f(-0.5, -0.5, -0.5);
  glTexCoord2f(1.0, 0.0); glVertex3f(-0.5, -0.5, 0.5);
  glTexCoord2f(0.0, 0.0); glVertex3f(-0.5, 0.5, 0.5);
  glEnd();

  //back quadrant
  glBindTexture(GL_TEXTURE_2D, backTextureId);
  glBegin(GL_QUADS);
  glColor3f(1.0, 1.0, 1.0);
  glTexCoord2f(1.0, 1.0); glVertex3f(0.5, -0.5, -0.5);
  glTexCoord2f(1.0, 0.0); glVertex3f(0.5, -0.5, 0.5);
  glTexCoord2f(0.0, 0.0); glVertex3f(-0.5, -0.5, 0.5);
  glTexCoord2f(0.0, 1.0); glVertex3f(-0.5, -0.5, -0.5);
  glEnd();

  //right quadrant
  glBindTexture(GL_TEXTURE_2D, rightTextureId);
  glBegin(GL_QUADS);
  glColor3f(1.0, 1.0, 1.0);
  glTexCoord2f(1.0, 1.0); glVertex3f(0.5, 0.5, -0.5);
  glTexCoord2f(1.0, 0.0); glVertex3f(0.5, 0.5, 0.5);
  glTexCoord2f(0.0, 0.0); glVertex3f(0.5, -0.5, 0.5);
  glTexCoord2f(0.0, 1.0); glVertex3f(0.5, -0.5, -0.5);
  glEnd();

  //up quadrant
  glBindTexture(GL_TEXTURE_2D, upTextureId);
  glBegin(GL_QUADS);
  glColor3f(1.0, 1.0, 1.0);
  glTexCoord2f(0.0, 0.0); glVertex3f(-0.5, -0.5, 0.5);
  glTexCoord2f(1.0, 0.0); glVertex3f(-0.5, 0.5, 0.5);
  glTexCoord2f(1.0, 1.0); glVertex3f(0.5, 0.5, 0.5);
  glTexCoord2f(0.0, 1.0); glVertex3f(0.5, -0.5, 0.5);
  glEnd();

  //down quadrant
  glBindTexture(GL_TEXTURE_2D, downTextureId);
  glBegin(GL_QUADS);
  glColor3f(1.0, 1.0, 1.0);
  glTexCoord2f(0.0, 0.0); glVertex3f(-0.5, -0.5, -0.5);
  glTexCoord2f(0.0, 1.0); glVertex3f(-0.5, 0.5, -0.5);
  glTexCoord2f(1.0, 1.0); glVertex3f(0.5, 0.5, -0.5);
  glTexCoord2f(1.0, 0.0); glVertex3f(0.5, -0.5, -0.5);
  glEnd();

感谢您提供任何帮助!

3 个答案:

答案 0 :(得分:1)

我认为你的问题在于glulookat

尝试使用此值

 gluLookAt(0.0, 0.0 , 2.0 , 
            0.0, 0.0, 0.0, 
            0.0, 1.0, 0.0);

答案 1 :(得分:0)

几乎没有问题:gluLookAt参数:前三个是摄像头位置,接下来三个是摄像头目标 - 不应该是相同的,摄像头必须有有效的方向向量。接下来,你的天空盒只有1.0单位大小 - 让它更大。在任何地方使用常数而不是0.5,这样就可以在一个地方控制它。

答案 2 :(得分:0)

那么你在那里有一个glTranslate()电话,所以除非你把它传给零,这可能就是为什么你不在盒子里。