📄 mgcgpcamera.txt
字号:
header file
//*** used by renderers
void ComputeModelToViewTransform (const MgcMatrix3& rkWorldRotate,
const MgcVector3& rkWorldTranslate, MgcReal fWorldScale,
MgcMatrix3& rkMatrix, MgcVector3& rkTranslate) const;
MgcReal GetFarDivideNear () const;
MgcReal GetFarDivideFarMinusNear () const;
//***
MgcReal m_fInverseNear; // 1/N
MgcReal m_fFarDivideNear; // F/N
MgcReal m_fFarDivideFarMinusNear; // F/(F-N)
MgcReal m_fNearDivideFar; // N/F
MgcReal m_fTwoDivRmL; // 2/(R-L)
MgcReal m_fTwoDivTmB; // 2/(T-B)
MgcReal m_fRpLDivNRmL; // (R+L)/((R-L)*N)
MgcReal m_fTpBDivNTmB; // (T+B)/((T-B)*N)
void UpdateFrustumData ();
MgcReal GetNearDivideFar () const;
// camera projetion-times-view matrix
MgcMatrix3 m_kProjViewMat;
MgcVector3 m_kProjViewTrn;
source file
//---------------------------------------------------------------------------
void MgcCamera::UpdateFrustumData ()
{
m_fInverseNear = 1.0/m_fNear;
m_fFarDivideNear = m_fFar*m_fInverseNear;
m_fFarDivideFarMinusNear = m_fFar/(m_fFar-m_fNear);
m_fNearDivideFar = m_fNear/m_fFar;
m_fTwoDivRmL = 2.0/(m_fRight-m_fLeft);
m_fRpLDivNRmL = ((m_fRight+m_fLeft)/(m_fRight-m_fLeft))*m_fInverseNear;
m_fTwoDivTmB = 2.0/(m_fTop-m_fBottom);
m_fTpBDivNTmB = ((m_fTop+m_fBottom)/(m_fTop-m_fBottom))*m_fInverseNear;
}
//---------------------------------------------------------------------------
void MgcCamera::ComputeModelToViewTransform (const MgcMatrix3& rkWorldRotate,
const MgcVector3& rkWorldTranslate, MgcReal fWorldScale,
MgcMatrix3& rkMatrix, MgcVector3& rkTranslate) const
{
MgcMatrix3 kMat
(
m_fTwoDivRmL*m_kLeft[0] - m_fRpLDivNRmL*m_kDirection[0],
m_fTwoDivRmL*m_kLeft[1] - m_fRpLDivNRmL*m_kDirection[1],
m_fTwoDivRmL*m_kLeft[2] - m_fRpLDivNRmL*m_kDirection[2],
m_fTwoDivTmB*m_kUp[0] - m_fTpBDivNTmB*m_kDirection[0],
m_fTwoDivTmB*m_kUp[1] - m_fTpBDivNTmB*m_kDirection[1],
m_fTwoDivTmB*m_kUp[2] - m_fTpBDivNTmB*m_kDirection[2],
m_fInverseNear*m_kDirection[0],
m_fInverseNear*m_kDirection[1],
m_fInverseNear*m_kDirection[2]
);
rkTranslate = kMat*(rkWorldTranslate - m_kLocation);
rkMatrix = fWorldScale*(kMat*rkWorldRotate);
}
//---------------------------------------------------------------------------
MgcReal MgcCamera::GetFarDivideNear () const
{
return m_fFarDivideNear;
}
//---------------------------------------------------------------------------
MgcReal MgcCamera::GetFarDivideFarMinusNear () const
{
return m_fFarDivideFarMinusNear;
}
//---------------------------------------------------------------------------
MgcReal MgcCamera::GetNearDivideFar () const
{
return m_fNearDivideFar;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -