//----------------------------------------------------------------------------- // Purpose: Generates a view matrix based on our current yaw, pitch, and roll. // The view matrix does not consider FOV or clip plane distances. //----------------------------------------------------------------------------- void CCamera::BuildViewMatrix() { // The camera transformation is produced by multiplying roll * yaw * pitch. // This will transform a point from world space into quake camera space, // which is exactly what we want for our view matrix. However, quake // camera space isn't the same as material system camera space, so // we're going to have to apply a transformation that goes from quake // camera space to material system camera space. CameraIdentityMatrix( m_ViewMatrix ); RotateAroundAxis(m_ViewMatrix, m_fPitch, 0 ); RotateAroundAxis(m_ViewMatrix, m_fRoll, 1); RotateAroundAxis(m_ViewMatrix, m_fYaw, 2); // Translate the viewpoint to the world origin. VMatrix TempMatrix; TempMatrix.Identity(); TempMatrix.SetTranslation( -m_ViewPoint ); m_ViewMatrix = m_ViewMatrix * TempMatrix; m_ViewProjMatrix = m_ProjMatrix * m_ViewMatrix; m_ViewProjMatrix.InverseGeneral( m_InvViewProjMatrix ); }
int SOPAngle::RotateAroundAxis(lua_State *L) { SOPAngle *ang = RotateAroundAxis(Lunar<SOPVector>::check(L, 1), luaL_checknumber(L, 2)); if(ang) { Lunar<SOPAngle>::push(L, ang, true); return 1; } lua_pushnil(L); return 1; }