当前位置: 首页>>代码示例>>C#>>正文


C# IRenderer.GetMatrix方法代码示例

本文整理汇总了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];
//.........这里部分代码省略.........
开发者ID:cody82,项目名称:spacewar-arena,代码行数:101,代码来源:Math.cs

示例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);
 }
开发者ID:cody82,项目名称:spacewar-arena,代码行数:25,代码来源:Doom3Md5.cs


注:本文中的IRenderer.GetMatrix方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。