Direct3D 对X模型载入



今天我们来学习Direct3D对模型的导入使用,Direct3D支持.X模型文件导入使用,.X文件是微软定义的3D模型文件格式,其中包含网格,动画,纹理等等一些信息. 目前3DS Max 和 Maya本身已经不支持对X模型的导出了, 只能使用3DS Max上有一个插件叫”3DS Max panda”可以把模型转换成X文件。

模型: http://yunpan.cn/cLXcxGKjwmqgk  访问密码 ec5c
X模型查看器:  http://yunpan.cn/cLXcnArcQ7h5y  访问密码 8605

 

Direct3D使用模型需要以下步骤

  • 对X文件加载网络模型
  • 载入材质和纹理
  • 绘制网格

 

1. 对X文件加载网络模型

D3DXLoadMeshFromX(
        L"miki.X",                //模型的名称
        D3DXMESH_MANAGED,        //创建网格的时候附加选项, D3DMESH枚举值 一个或多个值
        g_pd3dDevice,            //D3D设备
        &pAdjBuffer,            //每一个多边形周围的多边形信息的缓冲区内存地址
        &pMtrlBuffer,            //保存所有网格的子集材质,用于保存模型的材质和纹理文件的缓冲区地址
        NULL,                    //存储网格模型的特殊效果,直接NULL
        &g_dwNumMtrls,            //所有材质的个数
        &g_pMesh);                //模型网格

2. 载入材质和纹理

D3DXMATERIAL *pMtrls = (D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer();    //创建一个D3DXMATERIAL结构体用于读取材质和纹理信息
g_pMaterials = new D3DMATERIAL9[g_dwNumMtrls];                                    //创建材质数组
g_pTextures  = new LPDIRECT3DTEXTURE9[g_dwNumMtrls];                            //创建贴图数组

 for (DWORD i=0; i<g_dwNumMtrls; i++)
 {  

        g_pMaterials[i] = pMtrls[i].MatD3D;                            //获取材质,
        g_pMaterials[i].Ambient = g_pMaterials[i].Diffuse;            //并设置一下环境光的颜色值  

        //创建一下纹理对象 ,从材质里面创建贴图
        g_pTextures[i]  = NULL;
        D3DXCreateTextureFromFileA(g_pd3dDevice, pMtrls[i].pTextureFilename, &g_pTextures[i]);
 }

3. 绘制网格

// 进行网格各个部分的绘制
for (DWORD i = 0; i < g_dwNumMtrls; i++)
 {
        g_pd3dDevice->SetMaterial(&g_pMaterials[i]);        //设置材质
        g_pd3dDevice->SetTexture(0, g_pTextures[i]);        //设置图片
        g_pMesh->DrawSubset(i);                                //绘制模型网格
}
时间: 2024-12-29 23:21:42

Direct3D 对X模型载入的相关文章

Direct3D基础概念和模型整理

转自:http://blog.csdn.net/blues1021/article/details/41099705 参考整理自文章: http://zh.wikipedia.org/zh/Direct3D http://blog.csdn.net/weili_2007/article/details/1907066 http://msdn.microsoft.com/en-us/library/windows/desktop/bb219679(v=vs.85).aspx#Direct3D_Sy

《逐梦旅程 WINDOWS游戏编程之从零开始》笔记8——载入三维模型&amp;Alpha混合技术&amp;深度测试与Z缓存

第17章 三维游戏模型的载入 主要是如何从3ds max中导出.X文件,以及如何从X文件加载三维模型到DirextX游戏程序里.因为复杂的3D物体,要用代码去实现,那太反人类了,所以我们需要一些建模软件. 对于3ds max,要到出.X文件,要装个Panda插件.然后就是作者推荐的一个3D模型资源网站:http://www.cgmodel.com/. 网格模型接口ID3DXMesh 这个接口表示网格,继承自ID3DXBaseMesh.ID3DXMesh接口中的D3DXCreateMesh()可用

Direct3D中 SetTextureStageState 函数

先说明几个概念: 1, Multipass(多通道)     将一个任务划分成几个阶段,由多个pass处理不同阶段,后续pass总是处理前一个pass的结果.例如复杂的光照方程可以分成几个pass来计算.     用不同的纹理通过多个pass来多次渲染一个图元,这样可以实现许多很酷的特效.例如LightMap,它就是用不同的纹理来表示复杂的光.影效果.         2, Multitexture(多纹理)     很显然,pass越多,效率越低.为了降低pass的数量,有些硬件加速卡支持在一

【译】Import Changes from Direct3D 11 to Direct3D 12

译者:林公子 出处:木木的二进制人生 转载请注明作者和出处,谢谢! 这是微软公布的Direct3D 12文档的其中一篇,此翻译留作学习记录备忘,水平有限,错漏难免,还望海涵. 原文链接是https://msdn.microsoft.com/en-us/library/windows/desktop/dn899194(v=vs.85).aspx Direct3D 12到Direct3D 11的重大改变 Direct3D 12是对Direct3D 11编程模型的一个巨大颠覆.Direct3D 12让

pytorch模型转caffe模型

Pytorch模型转换Caffe模型踩坑指南,代码使用的是Github上的工程,地址:https://github.com/longcw/pytorch2caffe 操作环境:ubuntu = 14.04 miniconda 3 caffe pytorch = 0.2.0 torchvision = 0.1.8 python = 2.7 环境配置: 第一步 : 在miniconda创建一个虚拟环境pytorch2caffe : conda create -n pytorch2caffe pyth

纹理(讲得比较详细的文章)

纹理是增强计算机生成的三维图像的真实感的有力工具.Microsoft® Direct3D®支持广泛的纹理特性,并使开发人员可以很方便地使用高级纹理技术. 本节讲述如何使用纹理. 纹理的基本概念 纹理坐标 纹理过滤 纹理资源 纹理环绕 纹理混合 表面 以下主题将更详细地介绍另外的纹理功能. Mipmap的自动生成 自动纹理管理 压缩纹理资源 使用纹理时需要考虑的硬件问题 立体纹理资源 要提高性能,可以考虑使用动态纹理.动态纹理在每一帧都可以被锁定,写入及解锁.更多信息请参阅使用动态纹理. 纹理的基

网格模型和X文件使用面面观(转)

在本篇文章中,我们一起详细探索了Direct3D网格相关的知识,对当前两款主流的三维建模软件(3DS Max和Maya)进行了介绍,了解了如何从3DS Max 中导出X文件,以及如何从X文件加载三维模型到DirectX游戏程序中.文章最后,我们依旧配了一个比较好玩的demo来让大家对本篇文章所学的知识融会贯通,最后提供了这个demo详细注释的源代码下载. 首先我们复习一个之前讲过的概念. 在计算机所描绘的3D世界中,所有的物体模型(如树木,人物,山峦)都是通过多边形网格来逼近表示的,就像这幅DO

3DS文件在菠菜网站开发OpenGL的读入和显示

学习菠菜网站开发 dsluntan.com VX:17061863513了Blender之后,很想将自己设计的模型载入自己编写的程序中,因此考虑了比较常见的3DS文件格式.这回尝试着将3DS文件载入自己写的OpenGL程序并且显示出来. 首先查找了许多现成载入3DS格式的例子,发现只有一个程序是可以运行的,于是就拿这个程序的源代码进行研究.同时查看了一些国外的格式说明文档,结合Blender中Outliner中数据的组织,我开始了解3DS格式的组织方式. 3DS文件是二进制的,并且是Autode

Cocos2d-x 的3D游戏制作官方教程(中文翻译)

Cocos2d-x 在版本3开始已经支持了3D游戏开发的特性,我在官网文档看到3D开发的部分,觉得有必要记录一下,权当做学习笔记.因为只花了半天时间翻译,而且能力有限,各位看官勿喷. 本博客虽然水分很足,但是也算是博主的苦劳了,如需转载,请附上本文链接http://blog.csdn.net/cyh_24/article/details/45702343,不甚感激! 相信,你已经对Cocos2d-x有所了解,并且将它作为一种2D游戏引擎来看待.但是,从版本3开始,我们已经将3D一些特性添加到了C