亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
男人的j进女人的j一区| 欧美三级三级三级爽爽爽| 在线亚洲精品福利网址导航| 日韩女优制服丝袜电影| 亚洲精品免费在线播放| 国产精品一二三| 7777精品伊人久久久大香线蕉的 | 日韩免费性生活视频播放| 国产精品久久久久久妇女6080 | 亚洲图片欧美一区| 国产成人av电影在线播放| 欧美一区二区三区白人| 亚洲成人你懂的| 欧美性色综合网| 亚洲欧美日本在线| 99久久国产综合精品女不卡| 国产人妖乱国产精品人妖| 国产原创一区二区三区| 精品少妇一区二区三区日产乱码| 日韩精品亚洲一区二区三区免费| 欧美一a一片一级一片| 亚洲图片你懂的| 91视频免费播放| 亚洲色图欧洲色图婷婷| 99精品国产视频| 亚洲天堂2016| 色婷婷精品久久二区二区蜜臂av| 国产精品欧美久久久久一区二区| 国产麻豆视频一区| 久久久亚洲国产美女国产盗摄 | 一本色道久久综合亚洲aⅴ蜜桃| 亚洲国产精品成人综合色在线婷婷 | 国产精品久久久久久亚洲毛片 | 国产一区二区伦理| 久久久综合网站| 国产乱人伦偷精品视频免下载| 欧美精品一区二区三区很污很色的| 麻豆国产精品视频| 久久这里都是精品| 粉嫩久久99精品久久久久久夜| 欧美激情在线观看视频免费| 97se亚洲国产综合自在线| 亚洲男人的天堂在线观看| 欧美亚洲一区二区三区四区| 午夜久久久久久久久久一区二区| 91精品国产一区二区人妖| 久久99精品国产麻豆不卡| 国产亚洲福利社区一区| 99视频一区二区| 亚洲.国产.中文慕字在线| 日韩欧美国产精品| 成人精品免费视频| 亚洲国产一区二区三区| 欧美大片在线观看| 99久久精品免费看国产免费软件| 一区二区三区视频在线观看| 91精品免费在线观看| 国产成人免费视| 一区二区在线免费| 91精品国产色综合久久ai换脸| 国产在线国偷精品免费看| 中文字幕日本乱码精品影院| 欧美久久久久久久久久| 国产精品99久久久久| 一区二区三区在线观看动漫 | 久久精品国产在热久久| 中文字幕免费不卡在线| 欧美三级蜜桃2在线观看| 国产福利一区在线观看| 亚洲高清一区二区三区| 久久久久久久久久美女| 欧洲精品一区二区| 国产精品18久久久久久久久久久久 | 日韩制服丝袜av| 国产嫩草影院久久久久| 制服.丝袜.亚洲.中文.综合| 成人丝袜18视频在线观看| 天天操天天干天天综合网| 欧美激情一区二区| 日韩精品一区二区三区在线播放| 不卡av在线网| 国模无码大尺度一区二区三区| 1区2区3区欧美| 国产午夜亚洲精品羞羞网站| 3d动漫精品啪啪1区2区免费 | 亚洲成av人影院| 国产精品国产三级国产专播品爱网 | 国产精品久久一级| 日韩美女视频在线| 欧美日韩免费一区二区三区视频 | 欧美丰满少妇xxxxx高潮对白| 粉嫩蜜臀av国产精品网站| 日韩成人精品视频| 亚洲一区二区在线免费观看视频| 国产精品视频yy9299一区| 欧美精品一区二区三区在线播放| 精品视频免费看| 色综合久久88色综合天天免费| 国产v日产∨综合v精品视频| 激情综合网天天干| 日韩中文字幕亚洲一区二区va在线 | 另类小说图片综合网| 五月综合激情网| 一二三四区精品视频| 亚洲人成亚洲人成在线观看图片| 欧美韩日一区二区三区| 精品国产sm最大网站| 精品日韩欧美在线| 日韩精品中文字幕在线一区| 日韩三级免费观看| 91精品国产丝袜白色高跟鞋| 91精品国产色综合久久不卡蜜臀| 欧美麻豆精品久久久久久| 欧美日韩国产一二三| 在线观看网站黄不卡| 欧美亚洲国产怡红院影院| 欧美性猛交xxxx黑人交| 欧美无人高清视频在线观看| 色综合久久久久综合体| 91麻豆高清视频| 在线视频你懂得一区二区三区| 一本大道久久a久久精二百 | www.欧美.com| 色婷婷精品久久二区二区蜜臂av | 欧美日韩在线不卡| 欧美日韩国产一级二级| 日韩精品一区二| 国产亚洲成av人在线观看导航| 欧美激情中文字幕一区二区| 成人免费小视频| 五月天久久比比资源色| 美女国产一区二区三区| 国产成人精品综合在线观看| eeuss鲁一区二区三区| 在线精品观看国产| 欧美日本一道本在线视频| 精品欧美乱码久久久久久1区2区| 精品国产sm最大网站| 综合久久给合久久狠狠狠97色| 亚洲综合视频网| 激情综合网av| 一本久道中文字幕精品亚洲嫩| 欧美日韩一区三区四区| 精品福利在线导航| 亚洲视频在线观看三级| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产福利一区二区三区视频 | 国产区在线观看成人精品 | 欧美日韩亚洲综合在线| 欧美电影精品一区二区| 国产精品色婷婷| 日本午夜精品一区二区三区电影| 成人污视频在线观看| 欧美美女直播网站| 国产精品视频看| 久久精品国产精品亚洲精品| 色香蕉成人二区免费| 精品国产一二三区| 亚洲精品网站在线观看| 国内精品嫩模私拍在线| 欧美日韩中字一区| 国产欧美在线观看一区| 青椒成人免费视频| 欧美怡红院视频| 亚洲国产精品成人综合| 麻豆国产精品777777在线| 一本色道久久加勒比精品| 久久午夜色播影院免费高清| 亚洲成av人在线观看| 91色在线porny| 久久综合国产精品| 人人精品人人爱| 欧美日韩电影在线| 亚洲精品日韩综合观看成人91| 国产在线精品一区二区夜色| 欧美一区二区三区免费视频 | 亚洲男人的天堂av| 国产91精品在线观看| 欧美精品一区在线观看| 青青草97国产精品免费观看无弹窗版| 色综合色综合色综合色综合色综合 | 亚洲少妇屁股交4| 国产成人av电影在线观看| 精品999久久久| 麻豆一区二区在线| 欧美日韩电影在线| 日韩精品电影一区亚洲| 欧美性xxxxx极品少妇| 亚洲欧美日韩中文播放| 波多野洁衣一区| 国产精品二区一区二区aⅴ污介绍| 国产剧情在线观看一区二区| 精品av综合导航| 国产精品一二三区在线| 国产午夜精品一区二区三区视频 | 亚洲制服丝袜一区| 欧美怡红院视频| 亚洲国产婷婷综合在线精品| 色天天综合久久久久综合片| 亚洲免费观看在线观看|