我正在关注webgl书的介绍(WebGL编程指南:使用WebGL进行交互式3D图形编程),我很难理解为什么正交投影有助于解决这个特定问题。
其中一个例子让我们通过应用一些矩阵变换来改变我们如何查看3个三角形的“视点”。他们表明,如果我们将视点足够向右(+ X)改变,三角形开始消失。以下是本书网站上的确切webgl示例(按右箭头键旋转三角形):http://www.magic.ubc.ca/webgl-pg/uploads/examples/ch07/LookAtTrianglesWithKeys.html
这本书说这是因为“这是因为你没有正确指定可见范围(你实际可以看到的界限)。”
为了解决这个问题,他们首先将正交投影矩阵应用于每个顶点,然后解决问题。为什么这会解决问题,矩阵转换如何导致之前不存在的东西现在可见?我在哪里可以找到关于为什么webgl选择不再显示三角形的完整解释?
答案 0 :(得分:2)
渲染OpenGL中的对象(屏幕空间)的坐标系对[-1,1]
,x
和y
的范围为z
。
使用viewMatrix.setLookAt(g_eyeX, g_eyeY, g_eyeZ, 0, 0, 0, 0, 1, 0);
,您的示例会创建一个变换矩阵,用于将三角形的坐标从世界空间转换为相机空间(您查看该对象的方向)。
因为此变换会改变三角形的坐标,所以这些变换可能不在[-1,1]
的范围内,在您的示例中,z
坐标会发生这种情况(在后面移动 >你的屏幕。)
要解决此问题,您可以使用拼写来更改z
坐标的范围,而无需更改透视效果,只需更改当前{{1屏幕空间的值被缩放。