zoukankan      html  css  js  c++  java
  • XNA 中3D模型的显示

     XNA 中3D模型的显示:

            ModelMeshPart[] meshParts;

            Model start_model;

            Matrix[] dq_model_transforms;

       Matrix view = Matrix.CreateLookAt(new Vector3(72.93132f, 67.70515f, 101.329f), new Vector3(7.16512f, 66.22025f, 5.214687f), new Vector3(-0.01481795f, 0.9998762f, -0.0053083f));

            Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(88f), 800f / 600f, 0.1f, 1000000f);

            Matrix[] dq_transforms;

            Dictionary<string, Matrix> dq_transforms_d = new Dictionary<string, Matrix>();

            Dictionary<string, ModelMeshPart> dq_ModelMeshPart_d = new Dictionary<string, ModelMeshPart>();

           public void add_Set_model(string model_name)

            {

                Model model = contentManager.Load<Model>(model_name);

                start_model = model;

                Set_mesh(start_model, model_name);

            }

            public void Set_mesh(Model model, string model_name)

            {

                dq_transforms = new Matrix[model.Bones.Count];

                model.CopyAbsoluteBoneTransformsTo(dq_transforms);

                //dq_model_transforms = dq_transforms;

                foreach (ModelMesh mesh in model.Meshes)

                {

                    if (!dq_transforms_d.ContainsKey(mesh.Name))

                    {

                        dq_transforms_d.Add(mesh.Name, dq_transforms[mesh.ParentBone.Index]);

                    }

                    //dq_model_transforms_All.Add(dq_model_transforms);

                    foreach (ModelMeshPart part in mesh.MeshParts)

                    {

                        if (!dq_ModelMeshPart_d.ContainsKey(mesh.Name))

                        {

                            dq_ModelMeshPart_d.Add(mesh.Name, part);

                        }

                    }

                }

            }

            protected override void Draw()

            {

                Color backColor = new Color(BackColor.R, BackColor.G, BackColor.B);

                GraphicsDevice.Clear(Color.Black);

                #region ModelMeshPart画模型

                //foreach (Effect effect_ls in mesh.Effects)

                foreach (var dq_part in dq_ModelMeshPart_d)

                {

                    //dq_part.Value.Effect

                    BasicEffect myBasicEffect = dq_part.Value.Effect as BasicEffect;

                    //dq_transforms_d[dq_part.Key]

                    myBasicEffect.World = dq_transforms_d[dq_part.Key];

                    myBasicEffect.View = view;

                    myBasicEffect.Projection = projection;

                    myBasicEffect.EnableDefaultLighting();

                    myBasicEffect.PreferPerPixelLighting = true;

                    myBasicEffect.SpecularPower = 16;

                    //获取或设置活动技术。  获取此渲染技术所需的EffectPass对象的集合。 开始这个

                    myBasicEffect.CurrentTechnique.Passes[0].Apply();

                    GraphicsDevice.Indices = dq_part.Value.IndexBuffer;

                    GraphicsDevice.SetVertexBuffer(dq_part.Value.VertexBuffer);

                    GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, dq_part.Value.VertexOffset, 0, dq_part.Value.NumVertices, dq_part.Value.StartIndex, dq_part.Value.PrimitiveCount);

                }

                #endregion

               #region model.Draw画模型

                //foreach (ModelMesh mesh in start_model.Meshes)

                //{

                //    foreach (Effect effect_ls in mesh.Effects)

                //    {

                //        Type effects_type = effect_ls.GetType();

                //        if (effects_type.Name == "BasicEffect")

                //        {

                //            BasicEffect effect = (BasicEffect)effect_ls;

                //            effect.World = dq_model_transforms[mesh.ParentBone.Index];

                //            effect.View = view;

                //            effect.Projection = projection;

                //            effect.EnableDefaultLighting();

                //            effect.PreferPerPixelLighting = true;

                //            effect.SpecularPower = 16;

                //        }

                //    }

                //    if (!line_mode_flag)

                //    {

                //        mesh.Draw();

                //    }

                //    else

                //    {

                //        foreach (ModelMeshPart part in mesh.MeshParts)

                //        {

                //            BasicEffect myBasicEffect = part.Effect as BasicEffect;

                //            myBasicEffect.World = dq_model_transforms[mesh.ParentBone.Index];

                //            //myBasicEffect.View = view;

                //            //myBasicEffect.Projection = projection;

                //            // myBasicEffect.TextureEnabled = true;

                //            myBasicEffect.CurrentTechnique.Passes[0].Apply();

                //            //myBasicEffect.Alpha = dq_Alpha;

                //            GraphicsDevice.Indices = part.IndexBuffer;

                //            GraphicsDevice.SetVertexBuffer(part.VertexBuffer);

                //            GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleStrip, part.VertexOffset, 0, part.NumVertices, part.StartIndex, part.PrimitiveCount);

                //        } 

                //    }

         #endregion

                }

            }

        }

    }

     注:Model model = contentManager.Load<Model>(model_name);  通过content的Load方法从content中加载.xnb的模型,另外,BasicEffect 内的各个参数在用的时候有一定的顺序之分......

    支持个人观看使用,如商用或转载,请告知! -----萧朗(QQ:453929789 Email:xiaolang_xl@sina.com)
  • 相关阅读:
    JavaScript 严格模式
    JavaScript 编码规范 之 循环语句
    分享21个基于jquery菜单导航的效果
    揭秘:淘宝搜索排名真正规则和技巧
    11款网站死链检测工具
    收集Windows 8 Metro UI 风格网站资源,觉得不错的顶啊!!
    29个非常流行的jQuery提示信息插件
    分享14个很酷的jQuery导航菜单插件
    jquery select 常用操作总结
    必须去收藏14个响应式布局的前端开发框架
  • 原文地址:https://www.cnblogs.com/XiaoLang0/p/10174352.html
Copyright © 2011-2022 走看看