设定视图参数
渲染场景之前,首先必须设立摄像头(从哪个位置进行观察渲染)和输出窗口(把渲染结果送到哪里),其中指定输出窗口讨论起来较简单
输出窗口
窗口位置以左上角坐标指定(winPosx, winPosy)
,整数winResx、winResy指定窗口的宽高,单位为px。这里需要注意窗口的实际物理大小和像素大小的区别
我们也不一定是要在屏幕上渲染,也许只是将渲染结果保存到一个TGA文件或者AVI文件的一帧中,而我们用来保存正在渲染图形的那块内存
称为“帧缓存”
,
像素横纵比
不管是渲染到屏幕还是缓存区,我们都必须知道像素横纵比。它的值一般为1,不过也有一些特殊比例值的屏幕,以下是计算公式
其中
- pixPhys表示像素的物理尺寸,x方向比上y方向的值为即为像素横纵比。
- devPhys是显示设备的物理宽高,例如:4:3、16:9等不同比例的显示器
- devRes是显示设备的物理像素个数,例如1920 x 1080指的是devResx=1920、devResy=1080
视锥体
视锥体是摄像机可见的空间体积,它分为6个面,包括4个侧边和1个顶面、1个底面。侧面分别是上、下、左、右面,距离摄像机距离较远的面为远裁剪面、较近的称为近裁剪面
视场与缩放
摄像机和物体一样都有朝向和位置,同时它还有一个额外的属性--视场。视场是视锥体截取的角,包含两个角,分别是水平视场角、垂直视场角
缩放表示的是物体的实际大小与物体在视场角=90度的视场中的大小比值,例如:如果一个物体的缩放比例为2,那么表示在90度视角中的物体是实际物体大小的2倍
先考虑2D场景中,只需要一个水平视场角
根据图中可知,缩放与视场角之间的转换公式为
相应的在3D场景下,需要水平视场角、垂直视场角,两者可以虽然赋值,但是如果给值的比例不恰当会导致图像显示错误,最佳的缩放比例应与输出窗口的尺寸保持一致
假如不知道输出窗口的物理大小,但是知道像素的横纵比(这种情况很常见),我们可以根据像素的横纵比公式进行换算
- zoom表示放缩大小
- pixPhys表示像素的物理尺寸
- winPhys表示输出窗口的物理尺寸
- winRes表示输出窗口的分辨率
- devPhys表示输出设备的物理尺寸
- devRes表示输出设备的分辨率
INFO
注意区分窗口和输出设备