c - 无法绘制带有 3D 图形的简单四边形

标签 c opengl glut

我正在尝试使用 OpenGL 绘制一个简单的四边形。如果我不使用深度并以 0.0 作为 z 坐标绘制四边形,则相同的代码不会失败。
似乎没有启用深度或其他任何内容:

#import <OpenGL/OpenGL.h>
#import <GLUT/GLUT.h>

int width=500, height=500, depth=500;


void init()
{
    glEnable(GL_DEPTH_TEST);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glViewport(0, width, height, 0);
    gluLookAt(250, 250, 250, 250, 250, -250, 0, 1, 0);
    gluPerspective(45, 1, 1.0, 200.0);
}


void display()
{
    glClearColor(0.0, 0.0, 0.0, 0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor4f(1, 0, 0, 0);
    glBegin(GL_QUADS);
    glVertex3i(100, 100, 100);
    glVertex3i(100, 300, 100);
    glVertex3i(300, 300, 100);
    glVertex3i(300, 100, 100);
    glEnd();

    glutSwapBuffers();
}


int main(int argc, char * argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(width, height);
    glutCreateWindow("Test");
    glutDisplayFunc(display);
    init();
    glutMainLoop();
    return 0;
}

我只看到一个黑色的窗口,但我应该看到里面有一个红色的四边形。

最佳答案

将您的 init() 函数更改为:

void init()
{
    glEnable(GL_DEPTH_TEST);
    glViewport(0, width, height, 0);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45, 1, 1.0, 200.0);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(250, 250, 250, 250, 250, -250, 0, 1, 0);
}

您的问题是 gluLookAt() 应该用于定义模型 View 矩阵,但您乘以投影矩阵。此外,glViewport() 调用与矩阵计算无关,因此我将其移至函数的开头。不是真的需要,但我发现这更清楚。

关于c - 无法绘制带有 3D 图形的简单四边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13434941/

相关文章:

c - 我怎么知道II和&&之间的顺序?

c - 抑制 ld symbol not found 错误以便稍后在运行时解决

c++ - OpenGL - 重新绑定(bind) glBindVertexArray 不会在屏幕上绘制任何内容

C++ 链接器错误 (Visual Studio C++ 2010)

c - 从 glOrtho 切换到 gluPerspective

c - 我的代码中有一个关于线性过程计算的阻塞

C: 有没有办法降低 printf 输出的速度

相机在 OpenGL 中不会移动

mouseevent - GLUT鼠标按钮按下

c++ - 在 GLUT 中用鼠标画一个矩形