| 746 | } |
| 747 | |
| 748 | void PlaneReflector::setGFXMatrices( const MatrixF &camTrans ) |
| 749 | { |
| 750 | if ( objectSpace ) |
| 751 | { |
| 752 | // set up camera transform relative to object |
| 753 | MatrixF invObjTrans = mObject->getRenderTransform(); |
| 754 | invObjTrans.inverse(); |
| 755 | MatrixF relCamTrans = invObjTrans * camTrans; |
| 756 | |
| 757 | MatrixF camReflectTrans = getCameraReflection( relCamTrans ); |
| 758 | MatrixF objTrans = mObject->getRenderTransform() * camReflectTrans; |
| 759 | objTrans.inverse(); |
| 760 | |
| 761 | GFX->setWorldMatrix(objTrans); |
| 762 | |
| 763 | // use relative reflect transform for modelview since clip plane is in object space |
| 764 | objTrans = camReflectTrans; |
| 765 | objTrans.inverse(); |
| 766 | |
| 767 | // set new projection matrix |
| 768 | gClientSceneGraph->setNonClipProjection( (MatrixF&) GFX->getProjectionMatrix() ); |
| 769 | MatrixF clipProj = getFrustumClipProj(objTrans); |
| 770 | GFX->setProjectionMatrix( clipProj ); |
| 771 | } |
| 772 | else |
| 773 | { |
| 774 | // set world mat from new camera view |
| 775 | MatrixF camReflectTrans = getCameraReflection( camTrans ); |
| 776 | camReflectTrans.inverse(); |
| 777 | GFX->setWorldMatrix( camReflectTrans ); |
| 778 | |
| 779 | // set new projection matrix |
| 780 | gClientSceneGraph->setNonClipProjection( (MatrixF&) GFX->getProjectionMatrix() ); |
| 781 | MatrixF clipProj = getFrustumClipProj( camReflectTrans ); |
| 782 | GFX->setProjectionMatrix( clipProj ); |
| 783 | } |
| 784 | } |
| 785 | |
| 786 | MatrixF PlaneReflector::getCameraReflection( const MatrixF &camTrans ) |
| 787 | { |
nothing calls this directly
no test coverage detected