zoukankan      html  css  js  c++  java
  • 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);                                //绘制模型网格
    }
  • 相关阅读:
    LeetCode 264. Ugly Number II
    LeetCode 231. Power of Two
    LeetCode 263. Ugly Number
    LeetCode 136. Single Number
    LeetCode 69. Sqrt(x)
    LeetCode 66. Plus One
    LeetCode 70. Climbing Stairs
    LeetCode 628. Maximum Product of Three Numbers
    Leetcode 13. Roman to Integer
    大二暑假周进度报告03
  • 原文地址:https://www.cnblogs.com/plateFace/p/4985199.html
Copyright © 2011-2022 走看看