一直在整合这个相机教程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 我一直试图将物体转换得更靠近相机,但没有像我预期的那样工作。现在我不确定我需要做什么。
感谢任何帮助。
答案 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();
}