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 内的各个参数在用的时候有一定的顺序之分......
XNA 中3D模型的显示的更多相关文章
- 总结一下一般游戏中3D模型各种勾边方法遇到的工程性问题
以前做过简单的rim light勾边,几何勾边,这次又做了后处理的勾边,工程化的时候,都遇到很多问题,简单总结一下. 首先是火炬之光勾边效果,类似轮廓光的实现,简单的卡通渲染也是通过类似的算法加采样色 ...
- 3D模型选中显示样式改变
osg::ref_ptr<osg::Material> material = new osg::Material(); //模型材质信息 material->setTranspare ...
- 在SAP UI中使用纯JavaScript显示产品主数据的3D模型视图
在Jerry写这篇文章时,通过Google才知道,SAP其实是有自己的3D模型视图显示解决方案的. 故事要从Right Hemisphere说起,这是一家专业的企业级2D/3D模型浏览及转换的软件供应 ...
- OpenGL编程(七)3D模型的深度(z轴)检测
下图是我们要修改后的效果图: 一.深度检测 1.模型Z轴显示有问题: 上一次试验中,如果认真留意,会发现一个问题.当控制锥体在左右或上下旋转时,你会发现锥体看起来是在+-180度之间来回摆动,而不是3 ...
- OpenGL编程(六)通过三角形绘画出3D模型
使用三角形绘制3D模型 三角形是基本的多边形,任何多变形都能由三角形组成.三角形是由三个顶点的连线组成.三个点分别是v0:v1:v2. 1.绕法 从某个顶点开始,有两种连线的方法,顺时针和逆时针,这是 ...
- Flash Stage3D 在2D UI 界面上显示3D模型问题完美解决
一直以来很多Stage3D开发者都在为3D模型在2DUI上显示的问题头疼.Stage3D一直是在 Stage2D下面.为了做到3D模型在2DUI上显示通常大家有几种实现方式,下面来说说这几种实现方式吧 ...
- Unity在UI界面上显示3D模型/物体,控制模型旋转
Unity3D物体在UI界面的显示 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- Unity3D 3D模型在GUI之上显示
原来旧的办法是,在主相机上加一个Panel,把3D模型显示在Panel上面,感觉这个方法不怎么好,现在进行改进: 现在用了两个相机,一个相机显示3D模型,另外一个是主相机.还需要GUITexture来 ...
- OpenGl读取导入3D模型并且添加鼠标移动旋转显示
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11543828.html 最近实习要用到opengl库就是跟opencv 有点像的那个,然后下了 ...
随机推荐
- java调用linux管道信息的误区
String cmd = "ps -ef | grep "XXX" " 使用Runtime rt = Runtime.getRuntime();类时 rt.ex ...
- 创建Jutil (单元测试)
如何创建JUtil 这里拿Dynamic项目来演示,首先创建一个Dynamic项目,起名,点next, 继续点next, 将web.xml文件勾选,finish, 接下来在Java Resources ...
- unittest测试框架详谈及实操(五)
测试报告——生成HTML格式的测试报告 前面的实例输出的所有测试结果都是以命令行日志的方式展示,不止于难看,但也不适合直接把那样的测试结果截图发给相关人员,尤其是领导.这时需要更加友好的测试结果,既能 ...
- 设计模式9---装饰模式(Decorator Pattern)
装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式的结构 装饰模式以对客户透明的方式动态地给一个对象附加上一些责任.换言之,客户端 ...
- route -A inet6查看路由 getnameinfo failed [UNKNOWN]解决方案
route -A inet6查看路由 getnameinfo failed [UNKNOWN]解决方案, 结果如下: route -A inet6 -n 查看即可
- POJ 3581 Sequence(后缀数组)
Description Given a sequence, {A1, A2, ..., An} which is guaranteed A1 > A2, ..., An, you are to ...
- Mysql简介与编译安装
==========MYSQL工作原理图: 1>数据库简介:简单的说数据库(database)就是一个存储数据的仓库,它将数据按照特定的规律存储到磁盘上,通过数据库管理系统,能够有效的管理存储在 ...
- WPF判断当前窗体是否为模态
WPF判断当前窗体是否为模态 1.使用System.Windows.Interop.ComponentDispatcher.IsThreadModal来判断 参照:https://social.m ...
- leetcode 加一
给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 示例 1: ...
- WinForm心得
如果有UI部分可以复用,那么可以单独设置为一个UserControl或者一个自定义子类控件 如果是单一一个控件,只是继承并修改了默认控件的样式行为,那么可以直接创建一个class并继承该控件,缺点是D ...