Create a clipping frustum, ref #43

This commit is contained in:
kaetemi 2013-06-26 21:35:36 +02:00
parent 922b0e67ad
commit a68f54b4e8
2 changed files with 14 additions and 0 deletions

View file

@ -91,6 +91,8 @@ public:
virtual void getScreenResolution(uint &width, uint &height); virtual void getScreenResolution(uint &width, uint &height);
/// Set latest camera position etcetera /// Set latest camera position etcetera
virtual void updateCamera(uint cid, const NL3D::UCamera *camera); virtual void updateCamera(uint cid, const NL3D::UCamera *camera);
/// Get the frustum to use for clipping
virtual void getClippingFrustum(uint cid, NL3D::UCamera *camera) const;
/// Is there a next pass /// Is there a next pass
virtual bool nextPass(); virtual bool nextPass();
@ -143,6 +145,7 @@ private:
int m_Stage; int m_Stage;
CViewport m_LeftViewport; CViewport m_LeftViewport;
CViewport m_RightViewport; CViewport m_RightViewport;
CFrustum m_ClippingFrustum[NL_STEREO_MAX_USER_CAMERAS];
CFrustum m_LeftFrustum[NL_STEREO_MAX_USER_CAMERAS]; CFrustum m_LeftFrustum[NL_STEREO_MAX_USER_CAMERAS];
CFrustum m_RightFrustum[NL_STEREO_MAX_USER_CAMERAS]; CFrustum m_RightFrustum[NL_STEREO_MAX_USER_CAMERAS];
CMatrix m_CameraMatrix[NL_STEREO_MAX_USER_CAMERAS]; CMatrix m_CameraMatrix[NL_STEREO_MAX_USER_CAMERAS];

View file

@ -219,6 +219,17 @@ void CStereoOVR::initCamera(uint cid, const NL3D::UCamera *camera)
m_LeftFrustum[cid].Right += projectionCenterOffset; m_LeftFrustum[cid].Right += projectionCenterOffset;
m_RightFrustum[cid].Left -= projectionCenterOffset; m_RightFrustum[cid].Left -= projectionCenterOffset;
m_RightFrustum[cid].Right -= projectionCenterOffset; m_RightFrustum[cid].Right -= projectionCenterOffset;
// TODO: Clipping frustum should also take into account the IPD
m_ClippingFrustum[cid] = m_LeftFrustum[cid];
m_ClippingFrustum[cid].Left = min(m_LeftFrustum[cid].Left, m_RightFrustum[cid].Left);
m_ClippingFrustum[cid].Right = max(m_LeftFrustum[cid].Right, m_RightFrustum[cid].Right);
}
/// Get the frustum to use for clipping
void CStereoOVR::getClippingFrustum(uint cid, NL3D::UCamera *camera) const
{
camera->setFrustum(m_ClippingFrustum[cid]);
} }
void CStereoOVR::updateCamera(uint cid, const NL3D::UCamera *camera) void CStereoOVR::updateCamera(uint cid, const NL3D::UCamera *camera)