opengl - gluortho2d 和 glViewport 之间的实际区别是什么

标签 opengl

我制作了一个大小为 800x600 的窗口。我打了电话

gluOrtho2D(-400,400,-300,300);
glViewport(400,300,400,300);

我在 (-100,-100)(100,100) 之间画了一条线。我想我应该看到从 (0,0)(100,100) 的一行,但我得到了整行。这是为什么呢?

最佳答案

理论上,glViewport doesn't cause any clipping (see section 10) .通常,所有绘图都被剪切到窗口中。由于您已要求 OpenGL 绘制到窗口的某个区域,因此您还需要告诉 OpenGL 裁剪此视口(viewport)之外的坐标。为此,您将需要 glScissor。但是,某些实现确实会将其绘图剪辑到视口(viewport)(有关详细信息,请参阅我的评论)。

另外,你的数学是错误的。您的投影矩阵宽 800 单位,高 600 单位,以 (0, 0) 为中心。然后将其映射到窗口右上角的 400 像素宽 x 300 像素高的窗口部分。

如果您从 (-100, -100) 到 (100, 100) 画一条线,它只会延伸到您的视锥体的一小部分。截锥体的大小适合视口(viewport)。

图中,蓝色框为窗口,红色框为视口(viewport)。黑线应该是你画的线。

An image describing what the paragraph says. http://img696.imageshack.us/img696/6541/opengl.png

希望有帮助!

关于opengl - gluortho2d 和 glViewport 之间的实际区别是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1923658/

相关文章:

java - OpenGL 类似于光照的乘法效果

java - 使用 2D HUD 图标跟踪 3D 环境中的对象

java - LWJGL 无法获取匹配的坐标

c - 为什么我必须手动将 OpenGL 库与 MinGW 链接起来?

opengl - 为什么我会得到 4 个 "undefined reference to ` gluErrorString@ 4'"实例

c++ - 无法在 Linux 上找到 SDL2_gfx 库

c++ - SDL_opengl_glext.h 的用途是什么?

c++ - 在 Visual Studio 2010 中使用 OpenGL - 错误 LNK2019 : unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup

opengl - GLSL:关于连贯的限定词

multithreading - 带有 OpenMP 的 OpenGL 总是出现段错误