OpenGL切割屏幕的一部分
OpenGL cutting off part of screen
我正在学习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) )
)作为远近平面的限制。
相关文章:
- C++:如何使函数只返回作为列表一部分的字符串
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- std::sort()函数无法对向量的一部分进行排序
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 使用 SFML 和 C++ 将 Pixel 打印到屏幕上
- 在 Windows 8/10 技术中完全实时的屏幕捕获,没有延迟
- Winapi:屏幕截图未显示在窗口中
- 如何在快板的屏幕中显示子位图的绘制?
- 将类型声明为类型模板参数的模板参数的一部分是否合法?
- 反转整数的一部分(一半)的函数
- 按回车键后输出屏幕关闭
- 要在屏幕上绘制一些小瓷砖,我应该使用 QQuickItem 还是 QQuickPaintedItem?
- SFML 向下移动时如何围绕屏幕中心旋转?
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- C 指针和对象作为不同类的一部分
- MFC 将屏幕的一部分复制到 CBitmap 中
- 如何在屏幕的一部分中插入图像
- 如何在 SDL 2.0 中清除屏幕的一部分
- 如何在屏幕空间中平铺纹理的一部分
- OpenGL切割屏幕的一部分