Viewing

Viewing Transformations

视角变换用于映射3d位置。

它是一头复杂的野兽,依赖于包括相机坐标、orientation(取向),投影的类型,视角的区域,和图片的清晰度(resolution);

它是通过几个简单变换点乘获得

  • 相机变换(camera/eye transformation)
  • 投影变换(projection transformation)
  • 视口(窗口)变换(viewport transformation)

模型空间->世界空间->相机空间->规范化视线空间->屏幕空间

The Viewport Transformation

假设我们想要看到的几何体在规范的视图体积空间(canonical view volume)

然后我们想要在z轴方向用**正交(orthographic)**相机观察

canonical view volume(规范视图空间)是一个包含了所有3d坐标的正方体,这些坐标

在笛卡尔坐标系(cartesian coordinates)中处于(-1,1)之间

我们将x = -1投射到屏幕的左边,y = -1投射到屏幕的底部,像素坐标的定义是围绕着

以整数坐标为中心的方形。这样图像的边缘就有半个unit的overshoot

如果我们想要在图片上画nx * ny个像素,我们需要将square[-1.1]映射到[-0.5,nx - 0.5]

x [-0.5,ny - 0.5]

这里是假设线段完全在规范视角空间里,后面会放下这个假设,讨论clipping(裁剪)

Xscreen = nx/2 * Xcanonical + (nx - 1) / 2

注意这个矩阵忽略了z分量,因为这不影响投影到图片,但是在正式称呼这个矩阵为视口矩阵

(transform to screen),我们需要增加一一行和一列来存储z分量,不改变z分量

最终这个投影到屏幕

The Orthographic Projection Transformation

当然,我们通常想要在除了canonical view volume空间的一些区域渲染几何体。我们的第一步是生成视图,这个视图保持view dir,orrientation不变,looking alone -z with +y up.

我们将在右边乘以另一个矩阵来增广这个矩阵。

the six params are respectively left,right,bottom,top,near,far

正交视图空间是在-z轴上,所以f是更小的负数

在z轴上,这样近视图反而比远视图更大,这是非直觉性的(uninstuitive)

omit …..

相机变换

投影变换

透视投影