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

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

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

#ifndef ZYBANIMATIONTOOLS_H

#define ZYBANIMATIONTOOLS_H

#include 
"DXUT.h"

//=========================================
    /**
    擴充D3DXMESHCONTAINER
    擴充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 閱讀(1440) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   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国产精品久久| 国产亚洲va综合人人澡精品| 欧美v国产在线一区二区三区| 欧美片在线播放| 久久大综合网| 欧美高清自拍一区| 欧美一区二区三区喷汁尤物| 裸体素人女欧美日韩| 在线一区二区三区做爰视频网站| 亚洲欧美日韩精品久久亚洲区 | 久久精品噜噜噜成人av农村| 好看不卡的中文字幕| 亚洲精品九九| 国产一区二区三区自拍 | 欧美在线观看你懂的| 久久综合色婷婷| 亚洲一区二区在线播放| 久久久久久久久久久久久女国产乱 | 国产精品丝袜xxxxxxx| 久久躁日日躁aaaaxxxx| 欧美精品在线观看播放| 久久久人成影片一区二区三区观看 | 久久久人成影片一区二区三区| 一区二区三区高清| 久久这里有精品15一区二区三区| 亚洲一级二级| 欧美成人黑人xx视频免费观看| 欧美在线播放视频| 欧美日韩一区二区三| 欧美国产精品一区| 国产一区在线免费观看| 亚洲一区国产精品| 日韩午夜激情电影| 免费欧美日韩| 久久亚洲美女| 国产午夜精品久久久久久久| 亚洲卡通欧美制服中文| 亚洲电影在线播放| 欧美在线免费视屏| 欧美亚洲专区| 国产精品你懂得| 一区二区三区欧美视频| 在线视频日韩精品| 欧美激情在线观看| 亚洲精华国产欧美| 亚洲人体影院| 欧美激情亚洲另类| 亚洲国产精品激情在线观看| 亚洲激情二区| 欧美顶级大胆免费视频| 欧美黑人在线观看| 亚洲日本在线观看| 欧美精品一区二区三区很污很色的| 欧美成人日韩| 亚洲精品自在久久| 欧美日韩妖精视频| 一区二区三区国产在线观看| 国产精品99久久久久久人 | 欧美一区深夜视频| 久久精品久久综合| 国内精品久久久久国产盗摄免费观看完整版| 亚洲综合三区| 老司机成人在线视频| 尤物精品在线| 欧美α欧美αv大片| 亚洲精品免费一区二区三区| 亚洲人成啪啪网站| 国产精品va| 欧美一区二区三区成人| 老司机精品导航| 夜夜嗨av色综合久久久综合网| 欧美日韩中字| 欧美一级久久久| 欧美成人免费网站| 亚洲一区二区毛片| 黄色精品网站| 欧美国产日本在线| 国产精品99久久久久久久久| 久久精品99久久香蕉国产色戒 | 欧美视频专区一二在线观看| 亚洲一区自拍| 欧美大片免费观看| 亚洲永久在线观看| 一区免费视频| 欧美视频亚洲视频| 欧美在线一级va免费观看| 亚洲电影免费观看高清完整版| 一区二区三区久久网| 国产一区欧美| 欧美黄色小视频| 欧美在线1区| 亚洲九九精品| 女同性一区二区三区人了人一| 亚洲在线播放电影| 亚洲电影免费在线 | 开元免费观看欧美电视剧网站| 日韩一区二区电影网| 久久久亚洲国产天美传媒修理工 | 国产精品视频内| 牛夜精品久久久久久久99黑人 | 亚洲精品欧美| 久久综合狠狠综合久久综合88 | 怡红院精品视频| 欧美性猛片xxxx免费看久爱| 免费国产一区二区| 欧美一区深夜视频| 亚洲一级片在线观看| 亚洲国产日韩欧美一区二区三区| 欧美亚洲网站| 亚洲一区在线播放| 亚洲理论在线| 亚洲人成免费| 尤物在线精品| 在线观看免费视频综合| 国产午夜精品理论片a级大结局 | 欧美一区三区二区在线观看| 99视频在线观看一区三区| 亚洲激情在线观看| 欧美福利视频在线| 欧美成人精品一区| 毛片av中文字幕一区二区| 欧美亚洲一区在线| 亚洲欧美日韩精品久久久久| 亚洲一区二区三区四区五区黄| 亚洲乱码国产乱码精品精可以看| 亚洲黄网站在线观看| 在线免费不卡视频| 在线精品高清中文字幕| 黄色欧美成人| 亚洲国产激情| 亚洲精品国产精品国自产在线 | 欧美精品一区二区三区在线播放 | 欧美日韩综合在线免费观看| 欧美激情视频一区二区三区不卡| 免费观看成人www动漫视频| 久久青草福利网站| 久色婷婷小香蕉久久| 欧美成年人视频网站| 欧美成人中文字幕在线| 欧美国产成人精品| 欧美视频一区二区三区四区| 国产精品卡一卡二| 国产美女精品视频免费观看| 国产欧美va欧美va香蕉在| 国产无一区二区| 精品动漫3d一区二区三区| 亚洲激情欧美激情| 一区二区欧美亚洲| 欧美一级艳片视频免费观看| 久久久免费av| 最新国产成人在线观看| 亚洲色图自拍| 久久精品国产v日韩v亚洲| 欧美1区视频| 国产精品国产三级欧美二区 | 欧美视频在线免费看| 国产乱码精品一区二区三区忘忧草 | 亚洲砖区区免费| 久久久久这里只有精品| 欧美日韩一区二区三| 国产亚洲午夜| 99视频精品全部免费在线| 久久成人人人人精品欧| 欧美高清视频一区| 亚洲一区欧美激情| 久久这里有精品15一区二区三区| 欧美日韩免费| 狠狠色综合色区| 在线视频日韩精品| 免费在线日韩av| 亚洲一区国产精品| 欧美国产日韩一区| 国内视频一区| 亚洲欧美中文另类| 亚洲国产你懂的| 久久久999精品免费| 欧美性大战久久久久久久| 亚洲国产精品传媒在线观看 |