opengl-es - Webgl - 改变视点时三角形部分消失

标签 opengl-es webgl orthographic

我正在遵循 webgl 简介书籍(WebGL 编程指南:使用 WebGL 进行交互式 3D 图形编程)中的示例,但我无法理解为什么正交投影有助于解决这个特定问题。

其中一个示例让我们通过应用一些矩阵变换来改变我们查看 3 个三角形的“视点”。他们表明,如果我们将视点改变得足够向右(+X),三角形就会开始消失。这是本书网站上的确切 webgl 示例(按向右箭头键旋转三角形):http://www.magic.ubc.ca/webgl-pg/uploads/examples/ch07/LookAtTrianglesWithKeys.html

书中说发生这种情况是因为“这是因为你没有正确指定可见范围(你实际看到的边界)。”

为了解决这个问题,他们首先对每个顶点应用正交投影矩阵,然后问题就得到解决。为什么这可以解决问题,矩阵变换如何使以前不存在的东西现在可见?在哪里可以找到有关 webgl 为什么选择不再显示三角形的完整解释?

最佳答案

OpenGL 中渲染对象的坐标系(屏幕空间)的范围为 [-1,1]对于 x , y ,和z .

viewMatrix.setLookAt(g_eyeX, g_eyeY, g_eyeZ, 0, 0, 0, 0, 1, 0);您的示例创建一个变换矩阵,用于将三角形的坐标从世界空间变换到相机空间(您观察该对象的方向)。

由于此转换将更改三角形的坐标,因此这些三角形的坐标可能不在 [-1,1] 的范围内再者,在您的示例中,这种情况发生在 z 上。坐标(移动到屏幕后面)。

要解决此问题,您可以使用正交法来更改 z范围坐标不改变视角看,只有当前z屏幕空间的值已缩放。

关于opengl-es - Webgl - 改变视点时三角形部分消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21082313/

相关文章:

c - 从 glOrtho 切换到 gluPerspective

opengl-es-2.0 - 在着色器中禁用/跳过顶点

javascript - 三.js + .OBJ加载: triangular faces only?

unity-game-engine - 相机正投影尺寸一定宽度

javascript - WebGL。它是在 GPU 中创建缓冲区吗?

Android OpenGL 3D采摘

ios - 在Cocos 2d-x中绘制六边形网格

iOS:Core Graphics 是在 OpenGL 之上实现的吗?

javascript - THREE.js 代码仅在存在断点时运行

scroll - libGDX:如何让相机指向移动的 Sprite ?