1.背面拣选主要是为了减轻渲染的负担,因为裁剪掉背面和未裁剪的图形在摄像机的观察点看来将绘制相同的场景到后备表面。D3D中默认顶点以顺时针方向(在视图空间)形成的三角形为正面,以逆时针形成的三角形是背面。如果我们不想使用默认的拣选状态,我们可以通过改变D3DRS_CULLMODE来设置渲染状态:Device->SetRenderState(D3DRS_CULLMODE,Value); Value可以是:D3DCULL_NONE,D3DCULL_CW,D3DCULL_CCW(这个是默认值,拣选逆时针方向环绕的三角形)。
2.光源定义在世界空间中,不是通过视图空间变换被变换到视图控件中的。
3.视图空间的主要任务就是将3D场景转换为2D图形显示。这种从n维到n-1维的过程就叫做投影。我们只关注透视投影,因为这种投影产生近大远小的效果。投影变换的实质就是定义可视体并将可视体内的几何图形变换到投影窗口上去。投影转换矩阵求解为:
D3DXMATRIX * D3DXMatrixPerspectiveFovLH( D3DXMATRIX *pOut,
FLOAT fovy,
FLOAT Aspect,
FLOAT zn,
FLOAT zf);
The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXMatrixPerspectiveFovLH function can be used as a parameter for another function.This function computes the returned matrix as shown:
xScale 0 0 0
0 yScale 0 0
0 0 zf/(zf-zn) 1
0 0 -zn*zf/(zf-zn) 0
where:yScale = cot(fovY/2) ; xScale = yScale / aspect ratio.
4.视口变换是将投影窗口变换为屏幕上的一个矩形区域的可靠的变换,这个矩形区域就是我们所说的视口。视口矩形是由他所在的窗口坐标系来描述的。eg:D3DVIEWPORT vp={0,0,1024,768,0,1}; Device->SetViewPort(&vp);
5.光栅化的过程就是计算需要显示的每个三角形中每个点的颜色值。
2.光源定义在世界空间中,不是通过视图空间变换被变换到视图控件中的。
3.视图空间的主要任务就是将3D场景转换为2D图形显示。这种从n维到n-1维的过程就叫做投影。我们只关注透视投影,因为这种投影产生近大远小的效果。投影变换的实质就是定义可视体并将可视体内的几何图形变换到投影窗口上去。投影转换矩阵求解为:
D3DXMATRIX * D3DXMatrixPerspectiveFovLH( D3DXMATRIX *pOut,
FLOAT fovy,
FLOAT Aspect,
FLOAT zn,
FLOAT zf);
The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXMatrixPerspectiveFovLH function can be used as a parameter for another function.This function computes the returned matrix as shown:
xScale 0 0 0
0 yScale 0 0
0 0 zf/(zf-zn) 1
0 0 -zn*zf/(zf-zn) 0
where:yScale = cot(fovY/2) ; xScale = yScale / aspect ratio.
4.视口变换是将投影窗口变换为屏幕上的一个矩形区域的可靠的变换,这个矩形区域就是我们所说的视口。视口矩形是由他所在的窗口坐标系来描述的。eg:D3DVIEWPORT vp={0,0,1024,768,0,1}; Device->SetViewPort(&vp);
5.光栅化的过程就是计算需要显示的每个三角形中每个点的颜色值。