OpenGL切割屏幕的一部分

OpenGL cutting off part of screen

本文关键字:一部分 屏幕 OpenGL      更新时间:2023-10-16

我正在学习OpenGL,我正在阅读一本书来帮助我长。我已经完成了一半,现在我已经熟悉了基础知识,决定走自己的路。我已经开始开发一个应用程序,目的是只是显示一个网格。

我基本上已经搞定了,但是当我运行我的应用程序时,部分网格被切断了。我附了一个浓缩版本的代码(这有相同的结果)-有人知道我做错了什么,使它切断屏幕的一部分?我已经修改了很多,我已经运行了一些值,但我就是不能把这个东西排序。在正确的方向上任何帮助或推动都是非常感激的。

代码:

#include <Windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include "depsglutglut.h"
void display();
int main(int argc, char **argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(800, 600);
    glutCreateWindow("");
    glutDisplayFunc(display);
    glClearColor(1.0, 1.0, 1.0, 1.0);
    glColor3f(0.0, 0.0, 0.0);
    // Init
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-8.0, 8.0, -8.0, 8.0, -8.0, 8.0);
    glutMainLoop();
    return 0;
}
void display() {
    float f;
    // Clear the screen
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0);
    // This next bit of code just creates the grid
    glColor3f(0.0f, 0.0f, 0.0f);
    glPointSize(1.0);
    for(f=-10.0f;f<10.0f;f++) {
        glBegin(GL_LINES);
            glVertex3f(f, 0.0f, -10.0f);
            glVertex3f(f, 0.0f, 10.0f);
        glEnd();
    }
    glRotatef(90, 0.0, 1.0, 0.0);
    for(f=-10.0f;f<10.0f;f++) {
        glBegin(GL_LINES);
            glVertex3f(f, 0.0f, -10.0f);
            glVertex3f(f, 0.0f, 10.0f);
        glEnd();
    }
    // Swap the buffers
    glutSwapBuffers();
}

不能在单位立方体外画图

您的glOrtho调用缩放坐标,以便您可以使用范围-8...8为x, y和z坐标,但您的for循环然后尝试使用-10...10,这超过了范围,将被剪切。

由于单位立方体的对角线比边长sqrt(3),您正在达到Z极限。所以我建议你使用-14…14 (= ± round( 8*sqrt(3) ))作为远近平面的限制。