世界变换与观察变换
2015-04-23 16:41
134 查看
将坐标从局部坐标系转换到世界坐标系的过程称为世界变换(world transform),相应的变换矩阵称为世界矩阵(world matrix)。当所有的物体都从局部空间变换到世界空间后,这些物体就会位于同一个坐标系(世界空间)中。世界矩阵描述的是一个物体的局部空间相对于世界空间的原点位置和坐标轴方向。从世界空间到观察空间的坐标转换称为观察变换(view transform),相应的矩阵称为观察矩阵(view matrix)。为了生成场景2D图像,我们必须在场景中放置一架虚拟摄像机。虚拟摄像机指定了观察者可以看到的场景范围。
创建观察矩阵:
D3DXMATRIX* D3DXMatrixLookAtLH(
_Inout_ D3DXMATRIX *pOut, //the result of the operation
_In_ const D3DXVECTOR3 *pEye, //Input camera position
_In_ const D3DXVECTOR3 *pAt, //Input target point
_In_ const D3DXVECTOR3 *pUp //Input world up vector
);
This function uses the following formula to compute the returned matrix:
zaxis = normal(At - Eye)
xaxis = normal(cross(Up, zaxis))
yaxis = cross(zaxis, xaxis)
xaxis.x yaxis.x zaxis.x 0
xaxis.y yaxis.y zaxis.y 0
xaxis.z yaxis.z zaxis.z 0
-dot(xaxis, eye) -dot(yaxis, eye) -dot(zaxis, eye) 1
通常,世界坐标系的y 轴就是“向上”方向,所以“向上”向量 通常设为(0, 1, 0)。举一个例子,假设摄像机相对于世界空间的位置为(5, 3,−10),目标点为世界原点(0, 0, 0)。
我们可以使用如下代码创建观察矩阵:
D3DXVECTOR3 position(5.0f, 3.0f, -10.0f);
D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 worldUp(0.0f, 1.0f, 0.0f);
D3DXMATRIX V;
D3DXMatrixLookAtLH(&V, &position, &target, &worldUp);
创建观察矩阵:
D3DXMATRIX* D3DXMatrixLookAtLH(
_Inout_ D3DXMATRIX *pOut, //the result of the operation
_In_ const D3DXVECTOR3 *pEye, //Input camera position
_In_ const D3DXVECTOR3 *pAt, //Input target point
_In_ const D3DXVECTOR3 *pUp //Input world up vector
);
This function uses the following formula to compute the returned matrix:
zaxis = normal(At - Eye)
xaxis = normal(cross(Up, zaxis))
yaxis = cross(zaxis, xaxis)
xaxis.x yaxis.x zaxis.x 0
xaxis.y yaxis.y zaxis.y 0
xaxis.z yaxis.z zaxis.z 0
-dot(xaxis, eye) -dot(yaxis, eye) -dot(zaxis, eye) 1
通常,世界坐标系的y 轴就是“向上”方向,所以“向上”向量 通常设为(0, 1, 0)。举一个例子,假设摄像机相对于世界空间的位置为(5, 3,−10),目标点为世界原点(0, 0, 0)。
我们可以使用如下代码创建观察矩阵:
D3DXVECTOR3 position(5.0f, 3.0f, -10.0f);
D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 worldUp(0.0f, 1.0f, 0.0f);
D3DXMATRIX V;
D3DXMatrixLookAtLH(&V, &position, &target, &worldUp);
相关文章推荐
- Direct3D几何流水线由世界变换、观察变换、投影变换和视口变换几个部分组成。
- [转]世界变换、观察变换、投影变换 矩阵
- DirectX 3D_基础之模型表示 顶点格式 三角形 索引 虚拟摄像机 投影窗口 绘制流水线 局部坐标系 观察坐标系 世界坐标系 背面消隐 光照 裁剪 投影 视口变换 光栅化
- unity3D中 局部坐标,世界坐标以及屏幕坐标,transform变换坐标以及 变换方向心得
- Strolling Penguin(漫步企鹅).岁月匆匆,伴随着变换的世界,伴随着前进的脚步,还有那颗永久向前的心。
- 渲染世界的OpenGL<6>基础变换
- 世界坐标系与摄像机坐标系的变换
- Unity3D - Shader - 模型、世界、观察、裁剪空间坐标转换
- [新闻]科学家在世界最大对撞机中观察到首批粒子
- 5.OpenGL--3D世界(视图变换,模型变换,投影变换,视口变换)
- 设计技巧24:观察 Observer 一对多通知状态的变换
- D3D世界变换
- 世界坐标变换
- 【Visual C++】游戏开发笔记三十八 浅墨DirectX提高班之六 携手迈向三维世界:四大变换展身手
- 世界坐标变换要先缩放、后旋转、再平移的原因
- 职场与非洲大草原的动物世界-观察
- osg::NodeVisitor中计算一个节点对应的世界变换矩阵、法向量、顶点坐标
- 『国际观察』 [经济博弈]世界各国房价收入比(献给包括我在内的各位房奴)(转载)
- Study 3D《6、世界坐标到相机坐标的变换》
- 摸爬滚打DirectX11_day05——三维世界中的四大变换