使用平面剪切功能,我们可以屏蔽一些我们不想看到的东西,它就像一块挡光板,挡住了我们的视线.这样我们就可以创建一个镜子。
一、首先我们必需先构造一个平面。在3D中,我们有两种方法来构造一个平面
1、通过平面上的一个点和这个平面的法线,我们就可以确定一个平面。
D3DXVECTOR3 vPosition, vNormal;
D3DXPLANE plane;
D3DXPlaneFromPointNormal( &plane, vPosition, vNormal );
2、通过平面上的任意三点,也可以确定一个平面
D3DXVECTOR3 v1, v2, v3;
D3DXPLANE plane;
D3DXPlaneFromPoints( &plane, &v1, &v2, &v3 );
二、在确定平面之后,我们就要得到相对于这个平面的世界变换,并改变当前世界变换。当然我们得保存现有的世界变换,好在使用完平面之后恢复世界变换。
D3DXMATRIX matSaveWorld , matReflectMirror;
pd3dDevice->GetTransfrom( D3DTS_WORLD, &matSaveWorld );
D3DXMatrixReflect( &matReflectMirror, &plane );
pd3dDevice->SetTransfrom( D3DTS_WORLD, &matReflectMirror );
三、设置D3DRS_CULLMODE 为反面模式 D3DCULL_CW,
pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CW );
四、设置平面剪切方法
pd3dDevice->SetClipPlane( 0, &plane ); // 当要从多面剪切时,设置多个。

本文介绍了如何利用Direct3D的平面剪切功能实现3D镜面效果。通过构造平面、调整世界变换、设置反面剔除模式和剪切平面,以及在渲染后处理中应用Alpha混合,详细展示了创建镜面反射的技术步骤。

2465

被折叠的 条评论
为什么被折叠?



