Skip to content

设定视图参数

渲染场景之前,首先必须设立摄像头(从哪个位置进行观察渲染)和输出窗口(把渲染结果送到哪里),其中指定输出窗口讨论起来较简单

输出窗口

窗口位置以左上角坐标指定(winPosx, winPosy),整数winResx、winResy指定窗口的宽高,单位为px。这里需要注意窗口的实际物理大小和像素大小的区别

img.png

我们也不一定是要在屏幕上渲染,也许只是将渲染结果保存到一个TGA文件或者AVI文件的一帧中,而我们用来保存正在渲染图形的那块内存称为“帧缓存”

像素横纵比

不管是渲染到屏幕还是缓存区,我们都必须知道像素横纵比。它的值一般为1,不过也有一些特殊比例值的屏幕,以下是计算公式

pixPhysxpixPhysy=devPhysxdevPhysy·devResydevResx

其中

  • pixPhys表示像素的物理尺寸,x方向比上y方向的值为即为像素横纵比。
  • devPhys是显示设备的物理宽高,例如:4:3、16:9等不同比例的显示器
  • devRes是显示设备的物理像素个数,例如1920 x 1080指的是devResx=1920、devResy=1080

视锥体

视锥体是摄像机可见的空间体积,它分为6个面,包括4个侧边和1个顶面、1个底面。侧面分别是上、下、左、右面,距离摄像机距离较远的面为远裁剪面、较近的称为近裁剪面

img.png

视场与缩放

摄像机和物体一样都有朝向和位置,同时它还有一个额外的属性--视场。视场是视锥体截取的角,包含两个角,分别是水平视场角、垂直视场角

img.png

缩放表示的是物体的实际大小与物体在视场角=90度的视场中的大小比值,例如:如果一个物体的缩放比例为2,那么表示在90度视角中的物体是实际物体大小的2倍

先考虑2D场景中,只需要一个水平视场角

img.png

根据图中可知,缩放与视场角之间的转换公式为

zoom=1tan(fov/2)fov=2arctan(1/zoom)

相应的在3D场景下,需要水平视场角、垂直视场角,两者可以虽然赋值,但是如果给值的比例不恰当会导致图像显示错误,最佳的缩放比例应与输出窗口的尺寸保持一致

zoomxzoomy=winPhysxwinPhysy

假如不知道输出窗口的物理大小,但是知道像素的横纵比(这种情况很常见),我们可以根据像素的横纵比公式进行换算

zoomxzoomy=winPhysxwinPhysy=pixPhysxpixPhysy·winResxwinResy=devPhysxdevPhysy·devResydevResx·winResxwinResy
  • zoom表示放缩大小
  • pixPhys表示像素的物理尺寸
  • winPhys表示输出窗口的物理尺寸
  • winRes表示输出窗口的分辨率
  • devPhys表示输出设备的物理尺寸
  • devRes表示输出设备的分辨率

INFO

注意区分窗口和输出设备