OpenGL相机位置和天空盒

时间:2011-11-12 16:16:39

标签: c++ opengl

一直在整合这个相机教程http://www.swiftless.com/tutorials/opengl/camera2.html,并且在天空盒中将相机置于中心位置时会遇到一些麻烦。

使用下面的代码使我的相机在盒子里面:

void reshape(int w, int h)
{
   glViewport(0, 0, (GLsizei) w, (GLsizei) h);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   if (w <= h)
      glOrtho(-1.0, 1.0, -1.0*(GLfloat)h/(GLfloat)w, 
              1.0*(GLfloat)h/(GLfloat)w, -10.0, 10.0);
   else
      glOrtho(-1.0*(GLfloat)w/(GLfloat)h, 
              1.0*(GLfloat)w/(GLfloat)h, -1.0, 1.0, -10.0, 10.0);
   glMatrixMode(GL_MODELVIEW);
} 

为了绘制天空盒,我遵循了本教程:http://sidvind.com/wiki/Skybox_tutorial 我一直试图将物体转换得更靠近相机,但没有像我预期的那样工作。现在我不确定我需要做什么。

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

首先:不要在重塑处理程序中应用投影。否则简单的事情似乎是不可能的(比如做一个天空盒)。第二:要使天空盒工作,你必须使用完全相同的投影,就像渲染场景的其余部分一样。您应该更改的是将模型视图转换为0,同时保持相机方向。

您可以通过将modelview矩阵的最后一列设置为(0,0,0,1)。

来完成此操作

所以这会使你的渲染代码如下:

void render_skybox()
{

    push_modelview();
    set_modelview_column(3, 0, 0, 1);
    draw_skybox();
    pop_modelview();

}

void render()
{
    set_viewport();
    set_projection();

    apply_camera_transform();

    render_skybox();
    render_scene();
}