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 内的各个参数在用的时候有一定的顺序之分......

XNA 中3D模型的显示的更多相关文章

  1. 总结一下一般游戏中3D模型各种勾边方法遇到的工程性问题

    以前做过简单的rim light勾边,几何勾边,这次又做了后处理的勾边,工程化的时候,都遇到很多问题,简单总结一下. 首先是火炬之光勾边效果,类似轮廓光的实现,简单的卡通渲染也是通过类似的算法加采样色 ...

  2. 3D模型选中显示样式改变

    osg::ref_ptr<osg::Material> material = new osg::Material(); //模型材质信息 material->setTranspare ...

  3. 在SAP UI中使用纯JavaScript显示产品主数据的3D模型视图

    在Jerry写这篇文章时,通过Google才知道,SAP其实是有自己的3D模型视图显示解决方案的. 故事要从Right Hemisphere说起,这是一家专业的企业级2D/3D模型浏览及转换的软件供应 ...

  4. OpenGL编程(七)3D模型的深度(z轴)检测

    下图是我们要修改后的效果图: 一.深度检测 1.模型Z轴显示有问题: 上一次试验中,如果认真留意,会发现一个问题.当控制锥体在左右或上下旋转时,你会发现锥体看起来是在+-180度之间来回摆动,而不是3 ...

  5. OpenGL编程(六)通过三角形绘画出3D模型

    使用三角形绘制3D模型 三角形是基本的多边形,任何多变形都能由三角形组成.三角形是由三个顶点的连线组成.三个点分别是v0:v1:v2. 1.绕法 从某个顶点开始,有两种连线的方法,顺时针和逆时针,这是 ...

  6. Flash Stage3D 在2D UI 界面上显示3D模型问题完美解决

    一直以来很多Stage3D开发者都在为3D模型在2DUI上显示的问题头疼.Stage3D一直是在 Stage2D下面.为了做到3D模型在2DUI上显示通常大家有几种实现方式,下面来说说这几种实现方式吧 ...

  7. Unity在UI界面上显示3D模型/物体,控制模型旋转

    Unity3D物体在UI界面的显示 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...

  8. Unity3D 3D模型在GUI之上显示

    原来旧的办法是,在主相机上加一个Panel,把3D模型显示在Panel上面,感觉这个方法不怎么好,现在进行改进: 现在用了两个相机,一个相机显示3D模型,另外一个是主相机.还需要GUITexture来 ...

  9. OpenGl读取导入3D模型并且添加鼠标移动旋转显示

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11543828.html 最近实习要用到opengl库就是跟opencv 有点像的那个,然后下了 ...

随机推荐

  1. C# JSON使用过程中开发的小工具

    我在用JSON的过程中,经常要去看一下JSON的结构,而JSON串大不部分时候都是未格式化的数据,一次我不得不用一些网页上的在线解析和格式化工具来进行格式化查看,但是这些网页有时候并不好用:因此就结合 ...

  2. Python之安装第三方扩展库

    PyPI 地址:https://pypi.python.org/pypi 如果你知道你要找的库的名字,那么只需要在右上角搜索栏查找即可. 1.pip安装扩展库 (1)安装最新版本的扩展库: cmd&g ...

  3. (转)@RequestParam @RequestBody @PathVariable 等参数绑定注解详解

    引言: 接上一篇文章,对@RequestMapping进行地址映射讲解之后,该篇主要讲解request 数据到handler method 参数数据的绑定所用到的注解和什么情形下使用: 简介: han ...

  4. SQL存储原理及聚集索引、非聚集索引、唯一索引、主键约束的关系(补)

    索引类型 1.          唯一索引:唯一索引不允许两行具有相同的索引值 2.          主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型.主键索引要求主键中的 ...

  5. DbSet中Find,AsNoTracking,Attach及DBEntityEntry,ChangeTracker

    Find,AsNoTracking,Attach,DBEntityEntry,ChangeTracker,Local 一:DBSet 我们在SaveChange的时候,如果获取到DbSet中一些Ent ...

  6. openedx使用中可能用到的一些资源

    这几天一直在弄openedx,你会发现安装好只是第一步,后面还有很多东西在等着你,那么哪里可以看到较新的资料了,分享几个站点: 1.https://readthedocs.org/projects/e ...

  7. IIS 发布webservice 需要用户名和密码访问 解决

    今天,我在IIS上发布了一个自己写的webservice,然后我在远程通过浏览器来访问这个webservice的时候出现一个登录界面如下  之前我朋友发布webservice的时候也出现过一次,那次好 ...

  8. Winform Log4net 配置写不同文件

    以下配置了二种写文件,第一种根据日期写文件yyyyMMdd.txt,第二种是写固定文件login.txt. 1, 下载Log4net组件: http://logging.apache.org/log4 ...

  9. GridView中文属性

    GridControl的中文属性: 1  Appearance 外观 Appearance 外观设置 ColumnFilterButton  行过滤器按钮 BackerColor  背景色 Backe ...

  10. Conditional Expressions

    Conditional Expressions建立一些逻辑关系 The conditional expression classes from django.db import models clas ...