- 热门文章:
- · 如何让 DevExpress 的 DateEdit 控件正确显示日期的周名
- · ASP.net下的前台日历控件源代码(不刷新页面)
- · 通过可视化继承和页面模板控制站点设计
- · 在ASP.Net中两种利用CSS实现多界面的方法
- · 数据表单向导的快速实现
- · Posting form data from ASP.NET page to another URL
- · Asp.net中Treeview终极解决方案
- · 解决ASP.NET创建的线程的用户改变引发的拒绝访问错误
- · 有关sql注入
- · 一个动态编译的例子
- · 一个拷贝整个文件夹(包括子文件夹)的方法(原创)
- · 在ASP.NET中实现弹出日历
DX图形显示基本流程(基于MESH静态模型绘制----托管代码)
MESH的得到一般使用Mesh.FromFile方法。当然它有很多个重载。
一般使用 public static Mesh FromFile(string, MeshFlags, Device, out ExtendedMaterial); 方法。要注意的是,MESH的读取要在初始D3D设备以后来作。在MESH的初始方法中都需要D3D设备为参数,以后的MESH绘制也使用此设备。
对D3D设备的初始化中设置一般的显示属性,比如:深度测试,多重采样,灯光渲染开关,等等。
PresentParameters presentParams = new PresentParameters();
presentParams.Windowed=true;
presentParams.SwapEffect = SwapEffect.Discard;
presentParams.EnableAutoDepthStencil=true;
presentParams.AutoDepthStencilFormat=DepthFormat.D16;
presentParams.MultiSample=MultiSampleType.NonMaskable;
MyDev = new Device(0, DeviceType.Hardware, this,CreateFlags.HardwareVertexProcessing, presentParams);
MyDev.RenderState.MultiSampleAntiAlias=true;
MyDev.RenderState.Lighting=true;
MyDev.RenderState.CullMode=Cull.None;
MyDev.RenderState.ZBufferEnable=true;
MyDev.RenderState.ZBufferFunction=Compare.LessEqual;
MyDev.RenderState.ZBufferWriteEnable=true;
MyDev.RenderState.Ambient=MaterColor;
PresentParameters presentParams = new PresentParameters();
presentParams.Windowed=true;
presentParams.SwapEffect = SwapEffect.Discard;
presentParams.EnableAutoDepthStencil=true;
presentParams.AutoDepthStencilFormat=DepthFormat.D16;
presentParams.MultiSample=MultiSampleType.NonMaskable;
MyDev = new Device(0, DeviceType.Hardware, this,CreateFlags.HardwareVertexProcessing, presentParams);
MyDev.RenderState.MultiSampleAntiAlias=true;
MyDev.RenderState.Lighting=true;
MyDev.RenderState.CullMode=Cull.None;
MyDev.RenderState.ZBufferEnable=true;
MyDev.RenderState.ZBufferFunction=Compare.LessEqual;
MyDev.RenderState.ZBufferWriteEnable=true;
MyDev.RenderState.Ambient=MaterColor;
对于灯光的设置,可以根据需要放在每侦渲染函数内调整,也可以把固定灯光放在绘制之前。
一般绘制一个MESH时候,其中每个模型块都采用相同的世界矩阵。在绘制MESH之前设置好WORLDMATRIX即可。有时一个场景内MESH太多,而有些MESH共同组成一个物体时,对于每个MESH调整WORLDMATRIX可能会非常麻烦。所以最好是按照对应相对坐标调整好这些MESH的坐标,之后对这一组MESH采用同样的WORLDMATRIX。在修改MESH顶点数据之前,先使用Mesh.Clone复制出一个自己控制顶点数据格式的MESH。
public Mesh Clone(MeshFlags, VertexFormats, Device);
根据你需要的 VertexFormats格式,便可以容易的遍历修改顶点数据。当然,在修改前不要忘记LOCK你要修改的数据流。
对于MESH里包含的材质和纹理,需要你手动来调整。在MESH的FROMFILE中,已经OUT出了一个包含纹理的材质组ExtendedMaterial。
我们要声明一个材质组,一个纹理组。
Texture[] meshTextures = new Texture[materials.Length];
Material[] meshMaterials = new Direct3D.Material[materials.Length];
之后分离材质和纹理。
for( int i=0; i<materials.Length; i++ )
{
meshMaterials[i] = materials[i].Material3D;
// Set the ambient color for the material. Direct3D
// does not do this by default.
meshMaterials[i].Ambient = meshMaterials[i].Diffuse;
// Create the texture.
meshTextures[i] = TextureLoader.FromFile(dev,materials[i].TextureFilename);
}
现在我们可以绘制MESH了。
for( int i=0; i<meshMaterials.Length; i++ )
{
// Set the material and texture for this subset.
device.Material = meshMaterials[i];
device.SetTexture(0, meshTextures[i]);
// Draw the mesh subset.
mesh.DrawSubset(i);
}
最后别忘记device.EndScene();device.Present();
在上边D3D设备初始的时候,我们启动了趁度测试,所以,在绘制每侦前,调用CLEAR函数时,一并要清理深度缓冲,否则绘制会一踏糊涂。
以上是基本MESH静态模型绘制。对于其他高级效果的绘制,以后再写。
相关文章:
- · 在DataGrids和DropDownLists中使用ADO
- · asp.net 页面中生成 RSS 2.0 提要
- · Session登陆后丢失的解决办法
- · 基于HTTP协议用WinSock实现任意文件下载
- · 奔腾Flash Player source code
- · 《Essential .Net》读书笔记 - Chapter 2
- · 《Essential .Net》读书笔记 - Chapter 1
- · 获取指定IP的终端的MAC地址
- · 网络传输(FTP)问题
- · Paint.NET: An Open Source GDI+ App Likes Photoshop
- · 看到有人用 WebClient来下载, 发篇用 WebRequest 实现有进度下载的吧.
- · 树形控件TreeView的序列化
- · 使用javascript+XML实现分页
- · 使用Control.Invoke处理多线程应用程序界面
- · WEB页面TreeView的应用-(得到所有选中的节点)
- · DotNetNuke(DNN)
- · 枚举器模式(Enumerator pattern)
- · 用ASP.NET 1.1 新特征防止Script攻击
- · 关于ASP.Net中的时间处理
- · javascript实现的数据表格:冻结列、调整列宽和客户端排序
- · [常见问题]cookie使用1.Page与HttpContext的Request、Response
- · 怎样在页面和页面的用户控件进行交互
- · webform页面间传值的特殊方法
- · 怎么直接建立一个DataTable并且为之添加数据
- · 我的第一个Asp.Net程序
- · 如何把数据放到web不能访问的文件夹中并给用户下载?
- · How to handle the concurrency problems on ASP.Net Database
- · 后台动态设置前台标签内容和属性
- · ASP.NET中让同一个页面不同的文本框回车响应不同的事件
- · 认识ASP.NET配置文件Web.config
- · 将ArrayList中的ListItem绑定到DropDownList中去
- · 安全存放web项目数据库连接字符串
- · 分享:Project级别的权限控制
- · Solidworks二次开发—06—在装配体中添加配合
- · 在Repeater中嵌套使用Repeater
- · 一个简单的加密/解密方法
- · 加入身份验证信息的SMTP mail发送
- · webconfig的设置节点说明
