// next arguments probably contain redundant info, for later... void RAS_OpenGLRasterizer::SetViewMatrix(const MT_Matrix4x4 &mat, const MT_Matrix3x3 & camOrientMat3x3, const MT_Point3 & pos, bool perspective) { m_viewmatrix = mat; // correction for stereo if (Stereo() && perspective) { MT_Vector3 unitViewDir(0.0, -1.0, 0.0); // minus y direction, Blender convention MT_Vector3 unitViewupVec(0.0, 0.0, 1.0); MT_Vector3 viewDir, viewupVec; MT_Vector3 eyeline; // actual viewDir viewDir = camOrientMat3x3 * unitViewDir; // this is the moto convention, vector on right hand side // actual viewup vec viewupVec = camOrientMat3x3 * unitViewupVec; // vector between eyes eyeline = viewDir.cross(viewupVec); switch (m_curreye) { case RAS_STEREO_LEFTEYE: { // translate to left by half the eye distance MT_Transform transform; transform.setIdentity(); transform.translate(-(eyeline * m_eyeseparation / 2.0)); m_viewmatrix *= transform; } break; case RAS_STEREO_RIGHTEYE: { // translate to right by half the eye distance MT_Transform transform; transform.setIdentity(); transform.translate(eyeline * m_eyeseparation / 2.0); m_viewmatrix *= transform; } break; } } m_viewinvmatrix = m_viewmatrix; m_viewinvmatrix.invert(); // note: getValue gives back column major as needed by OpenGL MT_Scalar glviewmat[16]; m_viewmatrix.getValue(glviewmat); glMatrixMode(GL_MODELVIEW); glLoadMatrixd(glviewmat); m_campos = pos; }
MT_Transform BSP_GhostTestApp3D:: GetTransform( int i ){ MT_Quaternion q_ax(MT_Vector3(0,1,0),m_rotation_settings[i].m_angle_x); MT_Quaternion q_ay(MT_Vector3(1,0,0),m_rotation_settings[i].m_angle_y); MT_Point3 tr( m_translation_settings[i].m_t_x, m_translation_settings[i].m_t_y, m_translation_settings[i].m_t_z ); MT_Matrix3x3 rotx(q_ax); MT_Matrix3x3 roty(q_ay); MT_Matrix3x3 rot = rotx * roty; MT_Transform trans(tr,rot); MT_Transform scalet; scalet.setIdentity(); scalet.scale(m_scale_settings[i],m_scale_settings[i],m_scale_settings[i]); return trans * scalet; }
void SG_Tree::get(MT_Point3 *box) const { MT_Transform identity; identity.setIdentity(); m_bbox.get(box, identity); }