青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

http://hi.baidu.com/zyb_debug/blog/item/cb3fe2ca9ca3f015bf09e682.html

開始了Advanced Animation with DirectX的閱讀
基礎(chǔ)類庫的構(gòu)建是重要的,過后打算把它們加入我的zybToos的Framework里。
代碼來自書中

#ifndef ZYBANIMATIONTOOLS_H

#define ZYBANIMATIONTOOLS_H

#include 
"DXUT.h"

//=========================================
    /**
    擴(kuò)充D3DXMESHCONTAINER
    擴(kuò)充D3DXFrame
    
*/
//=========================================


namespace zyb
{

    
#define ReleaseCOM(x) { if(x!=NULL) x->Release(); x=NULL; }

    
// Declare an extended version of D3DXFRAME
    
// that contains a constructor and destructor
    
// as well as a combined transformation matrix
    struct D3DXFRAME_EX : D3DXFRAME 
    {
        D3DXMATRIX matCombined;   
// Combined matrix
        D3DXMATRIX matOriginal;   // Original transformation from .X

        D3DXFRAME_EX()
        {
            Name 
= NULL;
            pMeshContainer 
= NULL;
            pFrameSibling 
= pFrameFirstChild = NULL;
            D3DXMatrixIdentity(
&matCombined);
            D3DXMatrixIdentity(
&matOriginal);
            D3DXMatrixIdentity(
&TransformationMatrix);
        }

        
~D3DXFRAME_EX()
        { 
            delete [] Name;          Name 
= NULL;
            delete pFrameSibling;    pFrameSibling 
= NULL;
            delete pFrameFirstChild; pFrameFirstChild 
= NULL;
        }

        
// Function to scan hierarchy for matching frame name
        D3DXFRAME_EX *Find(const char *FrameName)
        {
            D3DXFRAME_EX 
*pFrame, *pFramePtr;

            
// Return this frame instance if name matched
            if(Name && FrameName && !strcmp(FrameName, Name))
                
return this;

            
// Scan siblings
            if((pFramePtr = (D3DXFRAME_EX*)pFrameSibling)) {
                
if((pFrame = pFramePtr->Find(FrameName)))
                    
return pFrame;
            }

            
// Scan children
            if((pFramePtr = (D3DXFRAME_EX*)pFrameFirstChild)) {
                
if((pFrame = pFramePtr->Find(FrameName)))
                    
return pFrame;
            }

            
// Return none found
            return NULL;
        }

        
// Reset transformation matrices to originals
        void Reset()
        {
            
// Copy original matrix
            TransformationMatrix = matOriginal;

            
// Reset sibling frames
            D3DXFRAME_EX *pFramePtr;
            
if((pFramePtr = (D3DXFRAME_EX*)pFrameSibling))
                pFramePtr
->Reset();

            
// Reset child frames
            if((pFramePtr = (D3DXFRAME_EX*)pFrameFirstChild))
                pFramePtr
->Reset();
        }

        
// Function to combine matrices in frame hiearchy
        void UpdateHierarchy(D3DXMATRIX *matTransformation = NULL)
        {
            D3DXFRAME_EX 
*pFramePtr;
            D3DXMATRIX matIdentity;

            
// Use an identity matrix if none passed
            if(!matTransformation) {
                D3DXMatrixIdentity(
&matIdentity);
                matTransformation 
= &matIdentity;
            }

            
// Combine matrices w/supplied transformation matrix
            matCombined = TransformationMatrix * (*matTransformation);

            
// Combine w/sibling frames
            if((pFramePtr = (D3DXFRAME_EX*)pFrameSibling))
                pFramePtr
->UpdateHierarchy(matTransformation);

            
// Combine w/child frames
            if((pFramePtr = (D3DXFRAME_EX*)pFrameFirstChild))
                pFramePtr
->UpdateHierarchy(&matCombined);
        }

        
void Count(DWORD *Num)
        {
            
// Error checking
            if(!Num)
                
return;

            
// Increase count of frames
            (*Num)+=1;

            
// Process sibling frames
            D3DXFRAME_EX *pFrame;
            
if((pFrame=(D3DXFRAME_EX*)pFrameSibling))
                pFrame
->Count(Num);

            
// Process child frames
            if((pFrame=(D3DXFRAME_EX*)pFrameFirstChild))
                pFrame
->Count(Num);
        }
    };

    
// Declare an extended version of D3DXMESHCONTAINER
    
// that contains a constructor and destructor
    
// as well as an array of textures, a mesh object
    
// that contains the generated skin mesh, and 
    
// matrices that map to the frame hierarchy's and
    
// for updating bones.
    struct D3DXMESHCONTAINER_EX : D3DXMESHCONTAINER
    {
        IDirect3DTexture9 
**pTextures;
        ID3DXMesh          
*pSkinMesh;

        D3DXMATRIX        
**ppFrameMatrices;
        D3DXMATRIX         
*pBoneMatrices;

        D3DXMESHCONTAINER_EX()
        {
            Name               
= NULL;
            MeshData.pMesh     
= NULL;
            pMaterials         
= NULL;
            pEffects           
= NULL;
            NumMaterials       
= 0;
            pAdjacency         
= NULL;
            pSkinInfo          
= NULL;
            pNextMeshContainer 
= NULL;
            pTextures          
= NULL;
            pSkinMesh          
= NULL;
            ppFrameMatrices    
= NULL;
            pBoneMatrices      
= NULL;
        }

        
~D3DXMESHCONTAINER_EX()
        {
            
if(pTextures && NumMaterials) {
                
for(DWORD i=0;i<NumMaterials;i++)
                    ReleaseCOM(pTextures[i]);
            }
            delete [] pTextures;       pTextures 
= NULL;
            NumMaterials 
= 0;

            delete [] Name;            Name 
= NULL;
            delete [] pMaterials;      pMaterials 
= NULL;
            delete pEffects;           pEffects 
= NULL;

            delete [] pAdjacency;      pAdjacency 
= NULL;
            delete [] ppFrameMatrices; ppFrameMatrices 
= NULL;
            delete [] pBoneMatrices;   pBoneMatrices 
= NULL;

            ReleaseCOM(MeshData.pMesh);
            ReleaseCOM(pSkinInfo);
            ReleaseCOM(pSkinMesh);

            delete pNextMeshContainer; pNextMeshContainer 
= NULL;
        }

        D3DXMESHCONTAINER_EX 
*Find(char *MeshName)
        {
            D3DXMESHCONTAINER_EX 
*pMesh, *pMeshPtr;

            
// Return this mesh instance if name matched
            if(Name && MeshName && !strcmp(MeshName, Name))
                
return this;

            
// Scan next in list
            if((pMeshPtr = (D3DXMESHCONTAINER_EX*)pNextMeshContainer)) {
                
if((pMesh = pMeshPtr->Find(MeshName)))
                    
return pMesh;
            }

            
// Return none found
            return NULL;
        }
    };

    

    








}


#endif
Posted on 2009-09-11 21:51 zyb_debug 閱讀(1439) 評(píng)論(0)  編輯 收藏 引用

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩一区二区视频在线 | 欧美日韩日韩| 性色av一区二区怡红| 亚洲免费观看高清完整版在线观看| 乱人伦精品视频在线观看| 新片速递亚洲合集欧美合集| 99精品国产福利在线观看免费| 亚洲大片一区二区三区| 在线播放一区| 在线综合亚洲| 久久女同互慰一区二区三区| 欧美电影在线观看| 亚洲午夜久久久久久久久电影院| 久久精品观看| 国产精品久久久久一区二区| 精久久久久久| 久久gogo国模啪啪人体图| 免费在线一区二区| 一区二区三区不卡视频在线观看| 亚洲黄网站在线观看| 欧美一区二区三区男人的天堂| 久久久久网站| 一本久久综合亚洲鲁鲁五月天| 亚洲欧美制服中文字幕| 欧美激情第五页| 激情久久久久久久| 欧美亚洲系列| 亚洲亚洲精品三区日韩精品在线视频| 亚洲一级在线观看| 欧美高清在线一区| 狠狠色狠狠色综合日日小说| 99国产麻豆精品| 最新日韩中文字幕| 欧美亚洲日本国产| 国产精品视频一区二区高潮| 亚洲欧美精品suv| 91久久精品国产91性色tv| 久久久久久亚洲精品不卡4k岛国| 国产精品国产精品国产专区不蜜| 亚洲一区二区三区在线看| 欧美天堂亚洲电影院在线观看| 亚洲视频在线观看网站| 一区二区三区产品免费精品久久75| 欧美日产国产成人免费图片| 99热免费精品在线观看| 亚洲免费成人av电影| 国产精品久久久久久久一区探花| 99成人免费视频| 日韩一级在线观看| 国产精品久久一卡二卡| 久久久噜噜噜久久中文字免| 久久亚洲美女| 亚洲免费视频成人| 亚洲日韩第九十九页| 欧美激情 亚洲a∨综合| 中文亚洲字幕| 亚洲欧美日本日韩| 狠狠色狠狠色综合日日tαg| 欧美激情一区| 国产精品theporn88| 久久躁日日躁aaaaxxxx| 嫩模写真一区二区三区三州| 亚洲午夜激情网站| 欧美α欧美αv大片| 久久成人精品一区二区三区| 欧美日韩综合| 亚洲欧洲日本在线| 亚洲精品影院在线观看| 久久久久久尹人网香蕉| 午夜精品短视频| 国产精品每日更新| 国产精品美女久久久| 日韩图片一区| 亚洲视频综合| 国产日韩精品一区二区浪潮av| 亚洲精品视频一区| 亚洲一区二区三区四区在线观看| 久久在线91| 亚洲精品国产精品国自产观看浪潮 | 亚洲社区在线观看| 亚洲欧美日韩国产中文 | 亚洲女ⅴideoshd黑人| 欧美在线在线| 亚洲国产精品日韩| 欧美日韩一区二区欧美激情| 亚洲日本中文字幕区| 99ri日韩精品视频| 国产精品亚洲综合一区在线观看| 先锋影音国产精品| 欧美成人有码| 亚洲综合国产激情另类一区| 精品成人国产在线观看男人呻吟| 欧美国产大片| 久久久精品一品道一区| 欧美二区不卡| 午夜亚洲伦理| 一区二区激情视频| 在线观看成人网| 国产日韩精品一区二区三区 | 久久成人精品视频| 亚洲人线精品午夜| 欧美国产先锋| 久久免费精品视频| 久久精品视频在线免费观看| 亚洲色图综合久久| 亚洲精品免费一二三区| 欧美国内亚洲| 久久久久久久久久久一区 | 久久国产精品黑丝| 欧美一区二区视频在线| 一区二区三区精品在线| 亚洲视频中文字幕| 午夜精品久久一牛影视| 午夜精品影院| 久久精品综合| 玖玖玖国产精品| 欧美国产日产韩国视频| 亚洲国产成人久久| 国产一区二区三区视频在线观看 | 最新亚洲电影| 99国产精品一区| 午夜一区不卡| 欧美插天视频在线播放| 欧美激情一区二区三区成人| 亚洲国产视频一区| 亚洲一区久久| 免费欧美高清视频| 国产精品成人v| 国产日韩欧美综合一区| 91久久线看在观草草青青| 99re66热这里只有精品3直播| 99这里只有久久精品视频| 久久国产乱子精品免费女 | 久久精品九九| 亚洲国产日韩欧美在线图片| 亚洲午夜久久久久久久久电影院| 久久成人一区二区| 国产精品二区在线观看| 国产一区二区中文字幕免费看| 亚洲激情成人网| 久久综合网hezyo| 亚洲影视在线播放| 国产精品高潮呻吟| 亚洲一区国产| 亚洲第一页中文字幕| 欧美自拍丝袜亚洲| 狠狠色伊人亚洲综合成人| 亚洲永久精品大片| 亚洲国产精选| 欧美乱妇高清无乱码| 最新日韩欧美| 亚洲精选视频免费看| 欧美日韩精品综合在线| 一区二区激情| 欧美女人交a| 最新成人在线| 亚洲国产一区二区三区青草影视 | 国产精品欧美日韩一区| 亚洲视频在线观看视频| 亚洲一区图片| 极品av少妇一区二区| 欧美高清视频| 欧美激情一区在线| 香蕉久久国产| 毛片基地黄久久久久久天堂| 亚洲国产精品久久人人爱蜜臀 | 久久久久久久综合狠狠综合| 136国产福利精品导航| 亚洲国产欧美一区| 国产精品久久久亚洲一区| 麻豆91精品| 欧美调教视频| 欧美sm视频| 国产一区二区精品在线观看| 欧美mv日韩mv国产网站app| 欧美日韩日本国产亚洲在线| 久久久久久穴| 一本色道久久综合亚洲精品按摩| 国产欧美 在线欧美| 欧美国产视频在线观看| 国内一区二区在线视频观看| 亚洲精品永久免费| 亚洲激情国产| 欧美电影在线观看完整版| 久久久久久久国产| 国产日韩亚洲| 欧美中文字幕不卡| 欧美在线视频免费观看| 国产性做久久久久久| 亚洲欧美日韩综合| 久久se精品一区二区| 国产偷久久久精品专区| 久久精品夜色噜噜亚洲a∨| 欧美午夜不卡视频| 亚洲一区在线播放| 理论片一区二区在线| 欧美亚洲免费电影| 国产一区二区丝袜高跟鞋图片| 亚洲欧美视频在线观看| 欧美在线亚洲综合一区|