1

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

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

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

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

4

1 回答 1

2

OpenGL 中的对象被渲染的坐标系(屏幕空间)的范围[-1,1]xyz

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

因为这种转换会改变三角形的坐标,这些坐标可能不再在范围内[-1,1] ,在你的例子中,z坐标发生了这种情况(在屏幕后面移动)。

要解决此问题,您可以使用正交来更改坐标范围z而不更改透视外观,仅z缩放屏幕空间的当前值。

于 2014-01-13T01:20:49.027 回答