c++ - OpenGL:旋转立方体的错误投影

标签 c++ opengl orthographic

我有以下代码块。

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。我希望有一个完美旋转的立方体;但是,从某些角度看,它看起来不正确。

Rotating cube 我认为我在 glOrtho 中遇到了问题,因为我不知道如何创建正确的表达式。

最佳答案

您的立方体被前平面和近平面剪裁。您的立方体的范围为 1.5,其中心距离您的“相机”1 个单位,但您的剪裁范围仅为 [-1,1](相对于相机),因此较远的边缘将超出视锥体。

关于c++ - OpenGL:旋转立方体的错误投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30017930/

相关文章:

c++ - 在 C++ 的模板化子类中继承模板化基类方法而不列出每个方法

c++ - Range-for-statement 不能用数组函数参数构建范围表达式

OpenGL + SSH 上的 GLUT 段错误

java - 构建为 jar 时读取 .shader 文件

c++ - 绘制许多四边形

c++ - 对字符串指针数组进行排序

c++ - C++复合设计模式中的操作重载

opengl - OpenGL中的正交投影矩阵问题

OpenGL:为什么远近在正交投影中是负的?