• Direct3D 对X模型载入


    co1409151S442-0[1]


    今天我们来学习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);                                //绘制模型网格
    }
  • 相关阅读:
    C# Asp.net 获取上上次请求的url
    Asp.net 中 Get和Post 的用法
    慎用JavaScript:void(0)
    JS验证RadioButton列表或CheckBox列表是否已填写
    .net 中viewstate的原理和使用
    Javascript与C#互相调用
    获取当前页面URL并UTF8编码之
    C#信息采集工具实现
    C#泛型编程
    C#正则表达式提取HTML中IMG标签的URL地址 .
  • 原文地址:https://www.cnblogs.com/plateFace/p/4985199.html
Copyright © 2020-2023  润新知