private void DrawPrimitives(GameTime gameTime, ref IndexedMatrix view, ref IndexedMatrix projection) { Matrix mView = view.ToMatrix(); Matrix mProj = projection.ToMatrixProjection(); DrawPrimitives(gameTime, mView, mProj); }
public void RenderDebugLines(GameTime gameTime, ref IndexedMatrix view, ref IndexedMatrix projection) { m_debugEffect.World = Matrix.Identity; m_debugEffect.View = view.ToMatrix(); m_debugEffect.Projection = projection.ToMatrixProjection(); if (m_lineIndex > 0) { foreach (EffectPass pass in m_debugEffect.CurrentTechnique.Passes) { pass.Apply(); m_game.GraphicsDevice.DrawUserPrimitives<VertexPositionColor>(PrimitiveType.LineList, m_lineVertices, 0, m_lineIndex / 2); } } m_lineIndex = 0; }
//---------------------------------------------------------------------------------------------- public virtual void UpdateCamera() { float rele = m_pitch; float razi = m_yaw; Quaternion rot = Quaternion.CreateFromAxisAngle(m_cameraUp.ToVector3(), razi); IndexedVector3 eyePos = new IndexedVector3(); eyePos[m_forwardAxis] = -m_cameraDistance; IndexedVector3 forward = eyePos; if (forward.LengthSquared() < MathUtil.SIMD_EPSILON) { forward = new IndexedVector3(0,0,-1); } IndexedVector3 right = IndexedVector3.Cross(m_cameraUp, IndexedVector3.Normalize(forward)); Quaternion roll = Quaternion.CreateFromAxisAngle(right.ToVector3(), -rele); rot.Normalize(); roll.Normalize(); IndexedMatrix m1 = IndexedMatrix.CreateFromQuaternion(rot); IndexedMatrix m2 = IndexedMatrix.CreateFromQuaternion(roll); IndexedMatrix m3 = m1 * m2; eyePos = new IndexedVector3(Vector3.Transform(eyePos.ToVector3(),(rot * roll))); //m_cameraTargetPosition = m_cameraPosition + eyePos; m_cameraPosition = eyePos; m_cameraPosition += m_cameraTargetPosition; if (m_glutScreenWidth == 0 && m_glutScreenHeight == 0) return; m_lookAt = IndexedMatrix.CreateLookAt(m_cameraPosition, m_cameraTargetPosition, m_cameraUp); Matrix t = Matrix.CreateLookAt(m_cameraPosition.ToVector3(), m_cameraTargetPosition.ToVector3(), m_cameraUp.ToVector3()); Matrix t2 = m_lookAt.ToMatrix(); if (t != t2) { int ibreak2 = 0; } int ibreak = 0; }