本文整理汇总了C#中IRenderer.GetMatrix方法的典型用法代码示例。如果您正苦于以下问题:C# IRenderer.GetMatrix方法的具体用法?C# IRenderer.GetMatrix怎么用?C# IRenderer.GetMatrix使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IRenderer
的用法示例。
在下文中一共展示了IRenderer.GetMatrix方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetFrustum
public bool GetFrustum(IRenderer r)
{
////////////////////////////////////////////////////////////////////////
// Fetch the current projection and modelview matrices from OpenGL
// and recalculate the 6 frustum planes from it
////////////////////////////////////////////////////////////////////////
float[] fProj=new float[16]; // For grabbing the projection matrix
float[] fView=new float[16]; // For grabbing the modelview matrix
float[] fClip=new float[16]; // Holds the result of projection * modelview
r.GetMatrix(fView,fProj);
float fT;
// Get the current projection matrix from OpenGL
//glGetFloatv(GL_PROJECTION_MATRIX, fProj);
// Get the current modelview matrix from OpenGL
//Gl.glGetFloatv(GL_MODELVIEW_MATRIX, fView);
// Concenate the two matrices
fClip[ 0] = fView[ 0] * fProj[ 0] + fView[ 1] * fProj[ 4] + fView[ 2] * fProj[ 8] + fView[ 3] * fProj[12];
fClip[ 1] = fView[ 0] * fProj[ 1] + fView[ 1] * fProj[ 5] + fView[ 2] * fProj[ 9] + fView[ 3] * fProj[13];
fClip[ 2] = fView[ 0] * fProj[ 2] + fView[ 1] * fProj[ 6] + fView[ 2] * fProj[10] + fView[ 3] * fProj[14];
fClip[ 3] = fView[ 0] * fProj[ 3] + fView[ 1] * fProj[ 7] + fView[ 2] * fProj[11] + fView[ 3] * fProj[15];
fClip[ 4] = fView[ 4] * fProj[ 0] + fView[ 5] * fProj[ 4] + fView[ 6] * fProj[ 8] + fView[ 7] * fProj[12];
fClip[ 5] = fView[ 4] * fProj[ 1] + fView[ 5] * fProj[ 5] + fView[ 6] * fProj[ 9] + fView[ 7] * fProj[13];
fClip[ 6] = fView[ 4] * fProj[ 2] + fView[ 5] * fProj[ 6] + fView[ 6] * fProj[10] + fView[ 7] * fProj[14];
fClip[ 7] = fView[ 4] * fProj[ 3] + fView[ 5] * fProj[ 7] + fView[ 6] * fProj[11] + fView[ 7] * fProj[15];
fClip[ 8] = fView[ 8] * fProj[ 0] + fView[ 9] * fProj[ 4] + fView[10] * fProj[ 8] + fView[11] * fProj[12];
fClip[ 9] = fView[ 8] * fProj[ 1] + fView[ 9] * fProj[ 5] + fView[10] * fProj[ 9] + fView[11] * fProj[13];
fClip[10] = fView[ 8] * fProj[ 2] + fView[ 9] * fProj[ 6] + fView[10] * fProj[10] + fView[11] * fProj[14];
fClip[11] = fView[ 8] * fProj[ 3] + fView[ 9] * fProj[ 7] + fView[10] * fProj[11] + fView[11] * fProj[15];
fClip[12] = fView[12] * fProj[ 0] + fView[13] * fProj[ 4] + fView[14] * fProj[ 8] + fView[15] * fProj[12];
fClip[13] = fView[12] * fProj[ 1] + fView[13] * fProj[ 5] + fView[14] * fProj[ 9] + fView[15] * fProj[13];
fClip[14] = fView[12] * fProj[ 2] + fView[13] * fProj[ 6] + fView[14] * fProj[10] + fView[15] * fProj[14];
fClip[15] = fView[12] * fProj[ 3] + fView[13] * fProj[ 7] + fView[14] * fProj[11] + fView[15] * fProj[15];
// Extract the right plane
planes[0][0] = fClip[ 3] - fClip[ 0];
planes[0][1] = fClip[ 7] - fClip[ 4];
planes[0][2] = fClip[11] - fClip[ 8];
planes[0][3] = fClip[15] - fClip[12];
// Normalize the result
fT = (float) Math.Sqrt(planes[0][0] * planes[0][0] + planes[0][1] * planes[0][1] +
planes[0][2] * planes[0][2]);
planes[0][0] /= fT;
planes[0][1] /= fT;
planes[0][2] /= fT;
planes[0][3] /= fT;
// Extract the left plane
planes[1][0] = fClip[ 3] + fClip[ 0];
planes[1][1] = fClip[ 7] + fClip[ 4];
planes[1][2] = fClip[11] + fClip[ 8];
planes[1][3] = fClip[15] + fClip[12];
// Normalize the result
fT = (float) Math.Sqrt(planes[1][0] * planes[1][0] + planes[1][1] * planes[1][1] +
planes[1][2] * planes[1][2]);
planes[1][0] /= fT;
planes[1][1] /= fT;
planes[1][2] /= fT;
planes[1][3] /= fT;
// Extract the bottom plane
planes[2][0] = fClip[ 3] + fClip[ 1];
planes[2][1] = fClip[ 7] + fClip[ 5];
planes[2][2] = fClip[11] + fClip[ 9];
planes[2][3] = fClip[15] + fClip[13];
// Normalize the result
fT = (float) Math.Sqrt(planes[2][0] * planes[2][0] + planes[2][1] * planes[2][1] +
planes[2][2] * planes[2][2]);
planes[2][0] /= fT;
planes[2][1] /= fT;
planes[2][2] /= fT;
planes[2][3] /= fT;
// Extract the top plane
planes[3][0] = fClip[ 3] - fClip[ 1];
planes[3][1] = fClip[ 7] - fClip[ 5];
planes[3][2] = fClip[11] - fClip[ 9];
planes[3][3] = fClip[15] - fClip[13];
// Normalize the result
fT = (float) Math.Sqrt(planes[3][0] * planes[3][0] + planes[3][1] * planes[3][1] +
planes[3][2] * planes[3][2]);
planes[3][0] /= fT;
planes[3][1] /= fT;
planes[3][2] /= fT;
planes[3][3] /= fT;
// Extract the far plane
planes[4][0] = fClip[ 3] - fClip[ 2];
planes[4][1] = fClip[ 7] - fClip[ 6];
planes[4][2] = fClip[11] - fClip[10];
//.........这里部分代码省略.........
示例2: Draw
public void Draw(IRenderer r, Node n)
{
CreateBuffers();
Material mq = Material.CreateSimpleMaterial(Root.Instance.ResourceManager.LoadTexture("revenant.tga"));
mq.twosided = true;
mq.wire = true;
r.SetMode(RenderMode.Draw3D);
r.SetMaterial(mq);
IEffect e = (IEffect)Root.Instance.ResourceManager.Load("shaders/simple.cgfx", typeof(IEffect));
float[] modelview = new float[16];
float[] projection = new float[16];
r.GetMatrix(modelview, projection);
Matrix4 m1 = Matrix4Extensions.FromFloats(modelview);
Matrix4 m2 = Matrix4Extensions.FromFloats(projection);
Matrix4 m3 = m2*m1;
e.SetParameter(e.GetParameter("mvp"), Matrix4Extensions.ToFloats(m3));
e.SetParameter(e.GetParameter("mv"), modelview);
e.SetParameter(e.GetParameter("Color"), new float[] {1,0,0,1 });
e.BeginPass(0);
foreach (Md5Mesh m in Meshes)
{
m.Draw(r,n);
}
e.EndPass(0);
}