当前位置: 代码迷 >> 电脑整机及配件 >> Computer Graphics Thinking - 视线矩阵 view matrix
  详细解决方案

Computer Graphics Thinking - 视线矩阵 view matrix

热度:495   发布时间:2016-04-29 02:42:03.0
Computer Graphics Thinking - 视野矩阵 view matrix

3D世界中,在计算各个物体位置的时候是以世界坐标为主的,但是最终却是所有3D模型都需要转换到视野空间中的(view space),这样才能在屏幕中显示出来。


我们可以想象3D空间中有很多模型(人物,汽车,枪等),同时也一直都存在一个摄像头,而我们就是通过这个摄像头去看我们创造的3D世界的。

这个时候,只要我们知道摄像头在3D世界中的位置,即摄像头的世界坐标,那么就可以通过位置变换操作(Transformation)计算出一个矩阵V,表示乘以这个矩阵就可以把摄像头放到需要的位置。

这个时候,只要计算矩阵V的逆矩阵(V的负一次方)用view表示,就可以把世界空间中的所有物体的位置乘以这个矩阵view,那么就是这些物体在视野空间中(view space)的相对位置了。


原理是这样的,但是到了D3D中,要求这个view matrix是有现成的函数XMMatrixLookAtLH(...),代码如下:

	float x = radius*sinf(phi)*cosf(theta);	float y = radius*sinf(phi)*sinf(theta);	float z = radius*cosf(phi);	XMVECTOR camera_pos = XMVectorSet(x, y, z, 1.0f);	XMVECTOR focus_pos = XMVectorZero();	XMVECTOR up  = XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f);	view = XMMatrixLookAtLH(camera_pos, focus_pos, up);

这个函数是根据三个参数来计算出最终的矩阵的,分别是:摄像头的位置camera_pos, 镜头聚焦点focus_pos; 和垂直方向up,一般是垂直向上。

当然其中的数学计算过程还是挺复杂的,不过了解了原理,用起这个函数就不会觉得那么神秘了,也不过是利用数学计算出一个矩阵罢了。否则我总觉得会害怕碰这些函数的,尤其是一有错的时候,就会猜测会不会这些神秘函数的问题呢?



  相关解决方案