计算机图形学基础笔记(7.3)

278 阅读5分钟

Category:Higher Mathematics & Computer Graphics Application

正文

7 查看(Viewing)

7.4透视转换的某些属性

透视变换的一个重要特性是它需要线到线和平面到平面。此外,它将视图体积中的线段转换为规范体积中的线段。要看到这一点,请考虑线段 image.png

当被一个 4×4 矩阵 M 变换时,它是一个具有可能变化的齐次坐标的点:

image.png

均质化的 3D 线段为

image.png

如果方程(7.6)可以改写为

image.png

然后所有均匀化的点都位于一条 3D 线上。等式(7.6)的蛮力操作产生这样的形式

image.png

事实证明,线段确实映射到保留点顺序的线段(练习 8),即它们不会被重新排序或“撕裂”。

将线段转换为线段的变换的副产品是将三角形的边和顶点转换为另一个三角形的边和顶点。因此,它需要三角形到三角形和平面到平面。

7.5 视野

虽然我们可以使用 (l, r, b, t) 和 n 值指定任何窗口,但有时我们希望有一个更简单的系统,我们可以通过窗口的中心查看。这意味着约束

image.png

如果我们还加上像素是正方形的约束,即图像中没有形状失真,那么r与t的比值必须与水平像素数与垂直像素数的比值相同:

image.png

一旦指定了 nx 和 ny,就只剩下一个自由度。这通常使用图 7.14 中显示为 θ 的视场来设置。这有时被称为垂直视野,以将其与左右两侧之间的角度或对角之间的角度进行区分。从图中我们可以看出

image.png

image.png

如果指定了 n 和 θ,那么我们可以推导出 t 并将代码用于更通用的查看系统。在某些系统中,n 的值被硬编码为某个合理的值,因此我们的自由度减少了一个。

经常问的问题

• 正交投影在实践中是否有用?

它在相对长度判断很重要的应用中很有用。在某些医学可视化应用程序中透视过于昂贵的情况下,它还可以产生简化。

• 我在透视图中绘制的镶嵌球体看起来像椭圆。这是一个错误吗?

不,这是正确的行为。如果您将眼睛放在与虚拟查看器相对于视口的位置相同的相对位置,那么这些椭圆将看起来像圆形,因为它们本身是从一个角度观看的。

• 透视矩阵是否以相反的顺序将负z 值转换为正z 值?这不会造成麻烦吗?

是的。变换 z 的方程是

image.png 所以 z = 被转换为 z = -∞ 并且 z = - 被转换为 z = ∞。 因此,任何跨越 z = 0 的线段都将被“撕裂”,尽管所有点都将投影到适当的屏幕位置。当所有对象都包含在查看体积中时,这种撕裂是不相关的。这通常通过裁剪到视图体积来保证。然而,第 8 章讨论的撕裂现象使剪裁本身变得更加复杂。

• 透视矩阵改变齐次坐标的值。这不会使移动和规模转换不再正常工作吗?

将平移应用于我们拥有的同质点

image.png

其他变换也有类似的效果(参见练习 5)。

笔记

大多数关于查看矩阵的讨论都基于实时渲染(Akenine-M¨oller 等人,2008 年)、OpenGL 编程指南(Shreiner 等人,2004 年)、计算机图形学(Hearn & Baker,1986 年)中的信息) 和 3D 游戏引擎设计 (Eberly, 2000)。

练习

  1. 构建系统所需的视口矩阵,其中像素坐标从图像顶部向下计数,而不是从底部向上计数。
  2. 将视口和正交投影矩阵相乘,证明结果也可以通过单次应用公式(6.7)得到。
  3. 从为近平面和远平面上的点保留 z 的约束导出方程 (7.3) 的第三行。
  4. 以代数方式显示透视矩阵在视图体积内保留了 z 值的顺序。
  5. 对于一个 4×4 矩阵,其前三行是任意的,其底行是 (0, 0, 0, 1),证明点 (x, y, z, 1) 和 (hx, hy, hz, h) 均质化后变换到同一点。
  6. 验证文中给出的 M-1 p 的形式是否正确。
  7. 验证规范矩阵 Mprojection 的完整视角是否将 (r, t, n) 变为 (1, 1, 1)。
  8. 写下 n = 1, f = 2 的透视矩阵。
  9. 对于点 p = (x, y, z, 1),习题 6 中透视矩阵变换的点的均质化和非均质化结果是多少?
  10. 对于眼睛位置 e = (0, 1, 0),注视向量 g = (0, -1, 0) 和向上视图向量 t = (1, 1, 0),结果是什么用于坐标旋转的正交uvw基础?
  11. 表明,对于透视变换,从视体积开始的线段在均质化后确实映射到规范体积中的线段。此外,表明两个线段上的点的相对顺序是相同的。提示:证明方程 (7.8) 中的 f(t) 具有性质 f(0) = 0, f(1) = 1,f 的导数对于所有 t ∈ [0, 1] 都是正的,并且齐次坐标不改变符号。

文章如有错误,请及时指出谢谢,如果觉得不错,可以支持一下