最近使用clipplane的时候,当渲染物在固定管线的时候,一切正常,但当渲染物用了vertexshader的时候,完全看不到了,找了很久也不知道问题的所在。后来再看DX的SDK时才发现用错了。
SDK里是这样描述的:
When the fixed function pipeline is used the plane equations are assumed to be in world space. When the programmable pipeline is used the plane equations are assumed to be in the clipping space (the same space as output vertices).
假如用了可编程管线,那么必须把截面变换回clip space里,clip space即摄像机的frusturm的空间。下面是代码(OGRE的):
D3DXMATRIX xform;
D3DXMatrixMultiply(&xform, &mDxViewMat, &mDxProjMat);
D3DXMatrixInverse(&xform, NULL, &xform);
D3DXMatrixTranspose(&xform, &xform);
D3DXPlaneTransform(&dx9ClipPlane, &dx9ClipPlane, &xform);
这样就没问题了!