zoukankan      html  css  js  c++  java
  • DX 的.x 文件

    template Header {
    <3D82AB43-62DA-11cf-AB39-0020AF71E433>
    WORD major;
    WORD minor;
    DWORD flags;
    }

    template Vector {
    <3D82AB5E-62DA-11cf-AB39-0020AF71E433>
    FLOAT x;
    FLOAT y;
    FLOAT z;
    }

    template Coords2d {
    <F6F23F44-7686-11cf-8F52-0040333594A3>
    FLOAT u;
    FLOAT v;
    }

    .......

    ==================================================

    Mesh Body1 {
    303;                                         //下面点(r,g,b)的个数
    0.000000;-0.061426;0.938846;,
    -0.049693;0.200773;0.692165;,

    .....

    599;              //下面点的个数,奇怪的是为什么这里是599 不是303?难道是有些点vertice 没有material
    3;300,301,302;,
    3;299,300,302;,
    3;298,300,299;,

    }

    *******由于迷惑不解我就去查了一下,原来我完全理解错了。303是顶点个数 599是面数。303下面的是顶点坐标根本不是rgb

    599下面是前面303个顶点的索引*******

    http://wenku.baidu.com/link?url=CYKd7-nGeu3msat2AVXmHoWv5foNt7R4IdeBBGYEBzEVm71860wrzLPoi6YkNMFJQZ-azPaePsaRkHvahgnHOSJXy3fXZTybWEujMW3gLV_

    这里讲的很详细了

    MeshMaterialList {
    1;
    1;
    0;;
    Material {
    0.694118;0.694118;0.694118;1.000000;;//face color
    50.000000;                //power
    1.000000;1.000000;1.000000;;      //specular color
    0.000000;0.000000;0.000000;;      //emissive color
    TextureFilename {
    "tiger.bmp";
    }
    }
    }

    MeshTextureCoords {
    303;                              //下面点(u,v)的个数
    0.190860;-0.544059;,
    0.272086;-0.355992;,
    0.077337;-0.522561;,

    }

    ===========================================

    开始是一堆类型定义

    之后是一堆数据

    mesh body 就是material 和 vertice 两部分(我猜的)猜错了。。。

    mesh body是点和面

    MeshMaterialList是material

    MeshTextureCoords就是顶点的uv坐标了

    我产生这种错觉是因为

    render mesh的时候的代码 看起来都没有画vertices的

    VOID Render()
    {
    // Clear the backbuffer and the zbuffer
    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
    D3DCOLOR_XRGB( 0, 0, 255 ), 1.0f, 0 );

    // Begin the scene
    if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
    {
    // Setup the world, view, and projection matrices
    SetupMatrices();

    // Meshes are divided into subsets, one for each material. Render them in
    // a loop
    for( DWORD i = 0; i < g_dwNumMaterials; i++ )
    {
    // Set the material and texture for this subset
    g_pd3dDevice->SetMaterial( &g_pMeshMaterials[i] );
    g_pd3dDevice->SetTexture( 0, g_pMeshTextures[i] );

    // Draw the mesh subset
    g_pMesh->DrawSubset( i );
    }

    // End the scene
    g_pd3dDevice->EndScene();
    }

    找来找去 既然setMaterial 和setTexture都是字面的意思

    那就只能是DrawSubset做得了

    跟进去看的时候 发现一个interface的实现

    mesh material drawsubset什么的都用到了这个方法

    #define DECLARE_INTERFACE_(iface, baseiface)            interface DECLSPEC_NOVTABLE iface : public baseiface

    DECLARE_INTERFACE_(ID3DXMesh, ID3DXBaseMesh)
    {
    // IUnknown
    STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
    STDMETHOD_(ULONG, Release)(THIS) PURE;

    #define STDMETHOD(method)        virtual COM_DECLSPEC_NOTHROW HRESULT STDMETHODCALLTYPE method

    这样写读起来还真麻烦,一堆宏的缩写。

    翻译过来其实就是

    interface DECLSPEC_NOVTABLE ID3DXMesh :public ID3DxBaseMesh

    {

    virtual COM_DECLSPEC_NOTHROW HRESULT STDMETHODCALLTYPE QueryInterface(THIS_ REFIID iid, LPVOID *ppv) PURE;

    这个继承实现的是interface的功能。。。。。除了翻译这些里面还有一堆宏。。。。

    总之g_pMesh->DrawSubset( i );这个句画出了模型。。dx不开源

  • 相关阅读:
    docker配置国内加速器
    pwm原理与stm32控制
    【C语言】赋值表达式自增自减逗号表达式
    linux下利用paho.mqtt.c进行mqtt开发 #c编程
    linux下tcp #c编程
    windows下的linux子系统虚拟串口的使用
    linux下搭建mqtt服务器(mosquitto)
    linux下paho.mqtt.c下载安装
    树莓派&mysql数据库
    vscode+mysql数据库编程
  • 原文地址:https://www.cnblogs.com/minggoddess/p/3492677.html
Copyright © 2011-2022 走看看