OpenGL:旋转立方体的错误投影
OpenGL: Wrong projection for rotating cube
我有以下代码块。
OpenGL初始化:
glClearDepth(1.0);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-WIDTH / (float) HEIGHT, WIDTH / HEIGHT, -1.0f, 1.0f, -1.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
OpenGL 循环:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f,0.0f,-1.0f);
glRotatef(xrot,1.0f,0.0f,0.0f);
glRotatef(yrot,0.0f,1.0f,0.0f);
glRotatef(zrot,0.0f,0.0f,1.0f);
glBindTexture(GL_TEXTURE_2D, texture.getTextureID());
glBegin(GL_QUADS);
{
// The first of six sides
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-0.75f, -0.75f, 0.75f);
glTexCoord2f(0.75f, 0.0f);
glVertex3f(0.75f, -0.75f, 0.75f);
glTexCoord2f(0.75f, 0.75f);
glVertex3f(0.75f, 0.75f, 0.75f);
glTexCoord2f(0.0f, 0.75f);
glVertex3f(-0.75f, 0.75f, 0.75f);
....
宽 = 800,高 = 600。我希望有一个完美旋转的立方体;但是,从某些角度看,它看起来不正确。
我认为我在 glOrtho 中遇到了问题,因为我不知道如何创建正确的表达式。
您的立方体被前平面和近平面剪裁。你的立方体的范围是 1.5,它的中心距离你的 "camera" 有 1 个单位,但是你的剪裁范围只是 [-1,1](相对于相机),所以更远的边缘将是在视锥之外。
glPerspective() 是比 glOrtho() 更好的 3D 渲染方法。使用 glPerspective() 创建观察体积。
当我用
替换 glOrtho() 表达式时
gluPerspective(45f, (float) WIDTH / (float) HEIGHT, 0.1f, 100f);
我得到了完美的立方体。
我有以下代码块。
OpenGL初始化:
glClearDepth(1.0);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-WIDTH / (float) HEIGHT, WIDTH / HEIGHT, -1.0f, 1.0f, -1.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
OpenGL 循环:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f,0.0f,-1.0f);
glRotatef(xrot,1.0f,0.0f,0.0f);
glRotatef(yrot,0.0f,1.0f,0.0f);
glRotatef(zrot,0.0f,0.0f,1.0f);
glBindTexture(GL_TEXTURE_2D, texture.getTextureID());
glBegin(GL_QUADS);
{
// The first of six sides
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-0.75f, -0.75f, 0.75f);
glTexCoord2f(0.75f, 0.0f);
glVertex3f(0.75f, -0.75f, 0.75f);
glTexCoord2f(0.75f, 0.75f);
glVertex3f(0.75f, 0.75f, 0.75f);
glTexCoord2f(0.0f, 0.75f);
glVertex3f(-0.75f, 0.75f, 0.75f);
....
宽 = 800,高 = 600。我希望有一个完美旋转的立方体;但是,从某些角度看,它看起来不正确。
您的立方体被前平面和近平面剪裁。你的立方体的范围是 1.5,它的中心距离你的 "camera" 有 1 个单位,但是你的剪裁范围只是 [-1,1](相对于相机),所以更远的边缘将是在视锥之外。
glPerspective() 是比 glOrtho() 更好的 3D 渲染方法。使用 glPerspective() 创建观察体积。
当我用
替换 glOrtho() 表达式时
gluPerspective(45f, (float) WIDTH / (float) HEIGHT, 0.1f, 100f);
我得到了完美的立方体。