c++ - OpenGL 截掉部分屏幕

标签 c++ c opengl

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

我已经基本搞定了,但是当我运行我的应用程序时,部分网格被切断了。我附上了代码的精简版(结果相同)——有谁知道我做错了什么让它切断了屏幕的一部分?我已经修改了很多东西并且我已经运行了一些值但是我无法对这件事进行排序。非常感谢任何朝着正确方向提供的帮助或插入。

代码:

#include <Windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include "deps\glut\glut.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,它超出了范围,将被裁剪。

关于c++ - OpenGL 截掉部分屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8640169/

相关文章:

c++ - OpenGL 的纹理坐标

c++ - 安全中断 C++11 阻塞操作

c++ - 支持表查找的数据结构

c - GCC 不会对从 void * 到 void ** 的隐式转换发出警告

opengl - GLSL 编辑器程序

opengl - 创建保留其世界坐标的固定光源

c++ - G++ 编译器对我明确定义的函数给出 "undefined reference"错误

c++ - 使用 std::vector 和 .at() 检查二维数组边界

C 赋值数组错误

c - 如何精确计算double类型数据来解决C中的三次样条插值?