// 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;
}
示例#2
0
	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;
}
示例#3
0
文件: SG_Tree.cpp 项目: jinjoh/NOOR
void SG_Tree::get(MT_Point3 *box) const
{
	MT_Transform identity;
	identity.setIdentity();
	m_bbox.get(box, identity);
}