|
虚拟摄像机看见的物体在近裁剪面与远裁剪面之间。书上说directx将投影平面定义为z=1.但是我看到一个例子程序把摄像机设在点(0,0,-5)
方向(0,0,0),可视区域为1.0到1000.0。可为什么能看见可视区域之外的物体。我的意思是可视区域就是近裁剪面与远裁剪面之间的空间,但超出了这个空间为什么还能被看到。
物体的空间坐标:
vertices[0] = Vertex(-1.0f, -1.0f, -1.0f);
vertices[1] = Vertex(-1.0f, 1.0f, -1.0f);
vertices[2] = Vertex( 1.0f, 1.0f, -1.0f);
vertices[3] = Vertex( 1.0f, -1.0f, -1.0f);
vertices[4] = Vertex(-1.0f, -1.0f, 1.0f);
vertices[5] = Vertex(-1.0f, 1.0f, 1.0f);
vertices[6] = Vertex( 1.0f, 1.0f, 1.0f);
vertices[7] = Vertex( 1.0f, -1.0f, 1.0f);
观察坐标变换:
D3DXVECTOR3 position(0.0f, 0.0f, -5.0f); 摄像机位置
D3DXVECTOR3 target(0.0f, 0.0f, 0.0f); 被观察点
D3DXVECTOR3 up(0.0f, 1.0f, 0.0f); 表示向上方向的向量
D3DXMATRIX V;
D3DXMatrixLookAtLH(&V, &position, &target, &up);
投影变换:
D3DXMATRIX proj;
D3DXMatrixPerspectiveFovLH(
&proj,
D3DX_PI * 0.5f, // 90 - degree 用弧度表示的视野角度
(float)Width / (float)Height, 宽高比
1.0f, 前裁剪面距离
1000.0f); 后裁剪面距离
Device->SetTransform(D3DTS_PROJECTION, &proj);
根据代码理解,只有坐标在z=1至z=1000之间的物体才能被看见
可例子中的点都在z=-1至z=1之间。头晕中,,,望高手赐教 |
|