亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? d3dfile.cpp

?? 3d 游戲編程入門教程之例子源碼--飛機繞茶壺
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//-----------------------------------------------------------------------------
// File: D3DFile.cpp
//
// Desc: Support code for loading DirectX .X files.
//
// Copyright (c) 1997-2001 Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
#define STRICT
#include <tchar.h>
#include <stdio.h>
#include <d3d9.h>
#include <d3dx9.h>
#include <dxfile.h>
#include <rmxfguid.h>
#include <rmxftmpl.h>
#include "D3DFile.h"
#include "DXUtil.h"




//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
CD3DMesh::CD3DMesh( TCHAR* strName )
{
    _tcsncpy( m_strName, strName, sizeof(m_strName) / sizeof(TCHAR) );
    m_strName[sizeof(m_strName) / sizeof(TCHAR) - 1] = _T('\0');
    m_pSysMemMesh        = NULL;
    m_pLocalMesh         = NULL;
    m_dwNumMaterials     = 0L;
    m_pMaterials         = NULL;
    m_pTextures          = NULL;
    m_bUseMaterials      = TRUE;
}




//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
CD3DMesh::~CD3DMesh()
{
    Destroy();
}




//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
HRESULT CD3DMesh::Create( LPDIRECT3DDEVICE9 pd3dDevice, TCHAR* strFilename )
{
    TCHAR        strPath[MAX_PATH];
    LPD3DXBUFFER pAdjacencyBuffer = NULL;
    LPD3DXBUFFER pMtrlBuffer = NULL;
    HRESULT      hr;

    // Find the path for the file, and convert it to ANSI (for the D3DX API)
    DXUtil_FindMediaFileCb( strPath, sizeof(strPath), strFilename );

    // Load the mesh
    if( FAILED( hr = D3DXLoadMeshFromX( strPath, D3DXMESH_SYSTEMMEM, pd3dDevice, 
                                        &pAdjacencyBuffer, &pMtrlBuffer, NULL,
                                        &m_dwNumMaterials, &m_pSysMemMesh ) ) )
    {
        return hr;
    }

    // Optimize the mesh for performance
    if( FAILED( hr = m_pSysMemMesh->OptimizeInplace(
                        D3DXMESHOPT_COMPACT | D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_VERTEXCACHE,
                        (DWORD*)pAdjacencyBuffer->GetBufferPointer(), NULL, NULL, NULL ) ) )
    {
        SAFE_RELEASE( pAdjacencyBuffer );
        SAFE_RELEASE( pMtrlBuffer );
        return hr;
    }

    // Get material info for the mesh
    // Get the array of materials out of the buffer
    if( pMtrlBuffer && m_dwNumMaterials > 0 )
    {
        // Allocate memory for the materials and textures
        D3DXMATERIAL* d3dxMtrls = (D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer();
        m_pMaterials = new D3DMATERIAL9[m_dwNumMaterials];
        if( m_pMaterials == NULL )
        {
            hr = E_OUTOFMEMORY;
            goto LEnd;
        }
        m_pTextures  = new LPDIRECT3DTEXTURE9[m_dwNumMaterials];
        if( m_pTextures == NULL )
        {
            hr = E_OUTOFMEMORY;
            goto LEnd;
        }

        // Copy each material and create its texture
        for( DWORD i=0; i<m_dwNumMaterials; i++ )
        {
            // Copy the material
            m_pMaterials[i]         = d3dxMtrls[i].MatD3D;
            m_pTextures[i]          = NULL;

            // Create a texture
            if( d3dxMtrls[i].pTextureFilename )
            {
                TCHAR strTexture[MAX_PATH];
                TCHAR strTextureTemp[MAX_PATH];
                DXUtil_ConvertAnsiStringToGenericCb( strTextureTemp, d3dxMtrls[i].pTextureFilename, sizeof(strTextureTemp) );
                DXUtil_FindMediaFileCb( strTexture, sizeof(strTexture), strTextureTemp );

                if( FAILED( D3DXCreateTextureFromFile( pd3dDevice, strTexture, 
                                                       &m_pTextures[i] ) ) )
                    m_pTextures[i] = NULL;
            }
        }
    }
    hr = S_OK;

LEnd:
    SAFE_RELEASE( pAdjacencyBuffer );
    SAFE_RELEASE( pMtrlBuffer );

    return hr;
}




//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
HRESULT CD3DMesh::Create( LPDIRECT3DDEVICE9 pd3dDevice,
                          LPDIRECTXFILEDATA pFileData )
{
    LPD3DXBUFFER pMtrlBuffer = NULL;
    LPD3DXBUFFER pAdjacencyBuffer = NULL;
    HRESULT      hr;

    // Load the mesh from the DXFILEDATA object
    if( FAILED( hr = D3DXLoadMeshFromXof( pFileData, D3DXMESH_SYSTEMMEM, pd3dDevice,
                                          &pAdjacencyBuffer, &pMtrlBuffer, NULL,
                                          &m_dwNumMaterials, &m_pSysMemMesh ) ) )
    {
        return hr;
    }

    // Optimize the mesh for performance
    if( FAILED( hr = m_pSysMemMesh->OptimizeInplace(
                        D3DXMESHOPT_COMPACT | D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_VERTEXCACHE,
                        (DWORD*)pAdjacencyBuffer->GetBufferPointer(), NULL, NULL, NULL ) ) )
    {
        SAFE_RELEASE( pAdjacencyBuffer );
        SAFE_RELEASE( pMtrlBuffer );
        return hr;
    }

    // Get material info for the mesh
    // Get the array of materials out of the buffer
    if( pMtrlBuffer && m_dwNumMaterials > 0 )
    {
        // Allocate memory for the materials and textures
        D3DXMATERIAL* d3dxMtrls = (D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer();
        m_pMaterials = new D3DMATERIAL9[m_dwNumMaterials];
        if( m_pMaterials == NULL )
        {
            hr = E_OUTOFMEMORY;
            goto LEnd;
        }
        m_pTextures  = new LPDIRECT3DTEXTURE9[m_dwNumMaterials];
        if( m_pTextures == NULL )
        {
            hr = E_OUTOFMEMORY;
            goto LEnd;
        }

        // Copy each material and create its texture
        for( DWORD i=0; i<m_dwNumMaterials; i++ )
        {
            // Copy the material
            m_pMaterials[i]         = d3dxMtrls[i].MatD3D;
            m_pTextures[i]          = NULL;

            // Create a texture
            if( d3dxMtrls[i].pTextureFilename )
            {
                TCHAR strTexture[MAX_PATH];
                TCHAR strTextureTemp[MAX_PATH];
                DXUtil_ConvertAnsiStringToGenericCb( strTextureTemp, d3dxMtrls[i].pTextureFilename, sizeof(strTextureTemp) );
                DXUtil_FindMediaFileCb( strTexture, sizeof(strTexture), strTextureTemp );

                if( FAILED( D3DXCreateTextureFromFile( pd3dDevice, strTexture, 
                                                       &m_pTextures[i] ) ) )
                    m_pTextures[i] = NULL;
            }
        }
    }
    hr = S_OK;

LEnd:
    SAFE_RELEASE( pAdjacencyBuffer );
    SAFE_RELEASE( pMtrlBuffer );

    return hr;
}




//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
HRESULT CD3DMesh::SetFVF( LPDIRECT3DDEVICE9 pd3dDevice, DWORD dwFVF )
{
    LPD3DXMESH pTempSysMemMesh = NULL;
    LPD3DXMESH pTempLocalMesh  = NULL;

    if( m_pSysMemMesh )
    {
        if( FAILED( m_pSysMemMesh->CloneMeshFVF( D3DXMESH_SYSTEMMEM, dwFVF,
                                                 pd3dDevice, &pTempSysMemMesh ) ) )
            return E_FAIL;
    }
    if( m_pLocalMesh )
    {
        if( FAILED( m_pLocalMesh->CloneMeshFVF( 0L, dwFVF, pd3dDevice,
                                                &pTempLocalMesh ) ) )
        {
            SAFE_RELEASE( pTempSysMemMesh );
            return E_FAIL;
        }
    }

    SAFE_RELEASE( m_pSysMemMesh );
    SAFE_RELEASE( m_pLocalMesh );

    if( pTempSysMemMesh ) m_pSysMemMesh = pTempSysMemMesh;
    if( pTempLocalMesh )  m_pLocalMesh  = pTempLocalMesh;

    // Compute normals in case the meshes have them
    if( m_pSysMemMesh )
        D3DXComputeNormals( m_pSysMemMesh, NULL );
    if( m_pLocalMesh )
        D3DXComputeNormals( m_pLocalMesh, NULL );

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
HRESULT CD3DMesh::RestoreDeviceObjects( LPDIRECT3DDEVICE9 pd3dDevice )
{
    if( NULL == m_pSysMemMesh )
        return E_FAIL;

    // Make a local memory version of the mesh. Note: because we are passing in
    // no flags, the default behavior is to clone into local memory.
    if( FAILED( m_pSysMemMesh->CloneMeshFVF( 0L, m_pSysMemMesh->GetFVF(),
                                             pd3dDevice, &m_pLocalMesh ) ) )
        return E_FAIL;

    return S_OK;

}




//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
HRESULT CD3DMesh::InvalidateDeviceObjects()
{
    SAFE_RELEASE( m_pLocalMesh );

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
HRESULT CD3DMesh::Destroy()
{
    InvalidateDeviceObjects();
    for( UINT i=0; i<m_dwNumMaterials; i++ )
        SAFE_RELEASE( m_pTextures[i] );
    SAFE_DELETE_ARRAY( m_pTextures );
    SAFE_DELETE_ARRAY( m_pMaterials );

    SAFE_RELEASE( m_pSysMemMesh );

    m_dwNumMaterials = 0L;

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
HRESULT CD3DMesh::Render( LPDIRECT3DDEVICE9 pd3dDevice, bool bDrawOpaqueSubsets,
                          bool bDrawAlphaSubsets )
{
    if( NULL == m_pLocalMesh )
        return E_FAIL;

    // Frist, draw the subsets without alpha
    if( bDrawOpaqueSubsets )
    {
        for( DWORD i=0; i<m_dwNumMaterials; i++ )
        {
            if( m_bUseMaterials )
            {
                if( m_pMaterials[i].Diffuse.a < 1.0f )
                    continue;
                pd3dDevice->SetMaterial( &m_pMaterials[i] );
                pd3dDevice->SetTexture( 0, m_pTextures[i] );
            }
            m_pLocalMesh->DrawSubset( i );
        }
    }

    // Then, draw the subsets with alpha
    if( bDrawAlphaSubsets && m_bUseMaterials )
    {
        for( DWORD i=0; i<m_dwNumMaterials; i++ )
        {
            if( m_pMaterials[i].Diffuse.a == 1.0f )
                continue;

            // Set the material and texture
            pd3dDevice->SetMaterial( &m_pMaterials[i] );
            pd3dDevice->SetTexture( 0, m_pTextures[i] );
            m_pLocalMesh->DrawSubset( i );
        }
    }

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
CD3DFrame::CD3DFrame( TCHAR* strName )
{
    _tcsncpy( m_strName, strName, sizeof(m_strName) / sizeof(TCHAR) );
    m_strName[sizeof(m_strName) / sizeof(TCHAR) - 1] = _T('\0');
    D3DXMatrixIdentity( &m_mat );
    m_pMesh  = NULL;

    m_pChild = NULL;
    m_pNext  = NULL;
}




//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
CD3DFrame::~CD3DFrame()
{
    SAFE_DELETE( m_pChild );
    SAFE_DELETE( m_pNext );
}




//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
bool CD3DFrame::EnumMeshes( bool (*EnumMeshCB)(CD3DMesh*,void*),
                            void* pContext )
{
    if( m_pMesh )
        EnumMeshCB( m_pMesh, pContext );
    if( m_pChild )
        m_pChild->EnumMeshes( EnumMeshCB, pContext );
    if( m_pNext )
        m_pNext->EnumMeshes( EnumMeshCB, pContext );

    return TRUE;
}




//-----------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美激情一区二区三区蜜桃视频 | 午夜私人影院久久久久| 国产黄色精品网站| 国产精品私人影院| 色又黄又爽网站www久久| 一区二区三区欧美日| 欧美日韩国产免费| 久久se精品一区精品二区| 国产欧美一区二区精品忘忧草 | 日本麻豆一区二区三区视频| 精品国产伦一区二区三区观看方式| 国产精品影视在线| 国产精品久线在线观看| 91社区在线播放| 亚洲福利视频导航| 精品福利一区二区三区免费视频| 国产激情视频一区二区三区欧美| 亚洲人亚洲人成电影网站色| 欧美日本不卡视频| 国产成人午夜99999| 一区二区三区色| 日韩精品一区二区三区三区免费| 成人少妇影院yyyy| 午夜精品一区在线观看| 久久精品欧美一区二区三区不卡| 99精品国产热久久91蜜凸| 秋霞午夜鲁丝一区二区老狼| 欧美极品美女视频| 4hu四虎永久在线影院成人| 丁香婷婷深情五月亚洲| 婷婷综合五月天| 欧美国产一区二区| 91精品国产入口在线| 99精品1区2区| 国产在线看一区| 亚洲一区二区三区国产| 欧美国产一区在线| 精品美女在线观看| 欧美人伦禁忌dvd放荡欲情| 处破女av一区二区| 秋霞成人午夜伦在线观看| 综合网在线视频| 精品国产三级a在线观看| 欧美三级中文字幕| 972aa.com艺术欧美| 国产一区二区三区电影在线观看| 婷婷丁香久久五月婷婷| 亚洲视频免费观看| 国产日韩欧美高清在线| 欧美成人aa大片| 欧美日韩不卡一区| 欧美无乱码久久久免费午夜一区| 成人动漫一区二区在线| 国产原创一区二区| 久久精品国产第一区二区三区| 亚洲一区中文日韩| 日韩伦理电影网| 亚洲国产激情av| 国产欧美日韩在线看| 亚洲精品一区二区三区精华液 | 91丝袜美女网| 成人av资源在线观看| 国产精品自产自拍| 久久成人免费网| 久久99久久久久久久久久久| 首页亚洲欧美制服丝腿| 水蜜桃久久夜色精品一区的特点| 亚洲成人在线免费| 亚洲成av人片观看| 天天综合网 天天综合色| 亚洲第一在线综合网站| 亚洲大片精品永久免费| 亚洲成人中文在线| 视频一区二区三区中文字幕| 天天影视色香欲综合网老头| 亚洲第一综合色| 日韩电影在线免费| 精品综合久久久久久8888| 蜜桃一区二区三区在线| 奇米色777欧美一区二区| 日韩高清不卡一区| 老汉av免费一区二区三区| 久久精品99国产精品| 精品午夜一区二区三区在线观看 | 国产九色sp调教91| 国产美女av一区二区三区| 国产美女精品在线| 成人激情动漫在线观看| 91同城在线观看| 欧美揉bbbbb揉bbbbb| 欧美日韩免费观看一区三区| 欧美日韩一级二级| 日韩写真欧美这视频| 久久久亚洲精品一区二区三区 | 亚洲免费在线视频一区 二区| 亚洲影院理伦片| 奇米一区二区三区av| 国产精品一区在线观看你懂的| 成人午夜视频网站| 欧美在线短视频| 日韩一区二区三区观看| 国产亚洲成年网址在线观看| 中文字幕日韩一区| 午夜婷婷国产麻豆精品| 国产麻豆视频一区二区| 99riav久久精品riav| 欧美日本不卡视频| 国产亚洲成av人在线观看导航| 亚洲美女精品一区| 热久久久久久久| 成人国产精品免费网站| 69堂国产成人免费视频| 国产亚洲欧洲997久久综合 | 色狠狠色狠狠综合| 欧美成人一区二区| 亚洲婷婷在线视频| 久久精品国产999大香线蕉| 波多野结衣视频一区| 欧美日韩一二三区| 中文字幕av免费专区久久| 亚洲成人免费影院| 国产成人精品一区二区三区四区 | 国产亚洲欧美中文| 婷婷成人激情在线网| 粉嫩aⅴ一区二区三区四区| 欧美日韩在线电影| 亚洲国产精品av| 久久99精品视频| 欧美午夜不卡视频| 国产精品天干天干在观线| 麻豆久久一区二区| 欧美性感一类影片在线播放| 久久久久久久久岛国免费| 午夜久久久久久久久久一区二区| 国产精品456| 7878成人国产在线观看| 中文字幕在线一区| 国产一区亚洲一区| 欧美一区二区三区在线看| 亚洲欧美日韩国产手机在线 | 欧美影片第一页| 自拍视频在线观看一区二区| 久久av中文字幕片| 欧美久久久久久久久久| 亚洲欧美日韩小说| 菠萝蜜视频在线观看一区| 2021久久国产精品不只是精品| 亚洲成人午夜电影| 欧美综合天天夜夜久久| 亚洲人成影院在线观看| 成人app网站| 国产三级精品三级在线专区| 久久精品国产精品亚洲精品| 777亚洲妇女| 丝袜美腿亚洲色图| 欧美精品少妇一区二区三区| 一区二区三区四区在线免费观看| 成人午夜在线免费| 中文在线资源观看网站视频免费不卡| 奇米精品一区二区三区四区| 欧美精品777| 天天综合网天天综合色| 91精品国产一区二区人妖| 午夜激情综合网| 欧美精品1区2区3区| 日本aⅴ精品一区二区三区| 欧美一区二区三区视频免费播放 | 一区二区高清在线| 在线观看免费一区| 五月激情六月综合| 91精品国产欧美一区二区 | 成人一区二区三区中文字幕| 国产婷婷色一区二区三区在线| 国产宾馆实践打屁股91| 国产日产欧美一区二区视频| 成人午夜碰碰视频| 国产精品不卡在线观看| 色哟哟国产精品| 亚洲成a人片在线不卡一二三区| 欧美日本韩国一区二区三区视频| 日韩中文字幕av电影| 欧美电影免费观看高清完整版在线观看 | 日韩精品一区二区三区四区| 国产资源在线一区| 国产精品每日更新| 日本高清免费不卡视频| 亚洲gay无套男同| 欧美成人精品3d动漫h| 国产一区二区三区黄视频| 国产精品美女久久久久久久| 欧美性xxxxxx少妇| 免费一区二区视频| 亚洲国产精品黑人久久久| 色伊人久久综合中文字幕| 视频在线观看91| 久久女同性恋中文字幕| 色婷婷亚洲一区二区三区| 青青国产91久久久久久| 久久蜜桃av一区精品变态类天堂| www.在线成人|