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

天行健 君子當(dāng)自強(qiáng)而不息

創(chuàng)建游戲內(nèi)核(5)【C風(fēng)格版】

 

本篇是創(chuàng)建游戲內(nèi)核(4)【C風(fēng)格版】的續(xù)篇,關(guān)于該內(nèi)核的細(xì)節(jié)說明請參考創(chuàng)建游戲內(nèi)核(5)

 

接口:

typedef struct WORLD_POS
{
    BOOL use_billboard;                 
// flag indicates whether use billboard

    
float x_pos, y_pos, z_pos;          // current position
    float x_rot, y_rot, z_rot;          // cuurent rotation
    float x_scale, y_scale, z_scale;    // current scale value

    D3DXMATRIX  mat_world;              
// world transform matrix
    D3DXMATRIX  mat_scale;              // scale matrix
    D3DXMATRIX  mat_rotation;           // rotation matrix
    D3DXMATRIX  mat_translation;        // translation matrix
    D3DXMATRIX* mat_combine_1;          // pointer to combination matrix 1
    D3DXMATRIX* mat_combine_2;          // pointer to combination matrix 2
} *WORLD_POS_PTR;

WORLD_POS_PTR create_world_pos();
void destroy_world_pos(WORLD_POS_PTR world_pos);

void clone_world_pos(WORLD_POS_PTR dest, const WORLD_POS_PTR source);

void move_world_pos(WORLD_POS_PTR world_pos, 
                    
float x_pos, float y_pos, float z_pos);

void move_world_pos_rel(WORLD_POS_PTR world_pos, 
                        
float x_add, float y_add, float z_add);

void rotate_world_pos(WORLD_POS_PTR world_pos, 
                      
float x_rot, float y_rot, float z_rot);

void rotate_world_pos_rel(WORLD_POS_PTR world_pos, 
                          
float x_add, float y_add, float z_add);

void scale_world_pos(WORLD_POS_PTR world_pos, 
                     
float x_scale, float y_scale, float z_scale);

void scale_world_pos_rel(WORLD_POS_PTR world_pos, 
                         
float x_add, float y_add, float z_add);

void update_world_pos(WORLD_POS_PTR world_pos);

實現(xiàn):

//-------------------------------------------------------------------------
// create world position object.
//-------------------------------------------------------------------------
WORLD_POS_PTR create_world_pos()
{
    WORLD_POS_PTR world_pos = (WORLD_POS_PTR) malloc(
sizeof(WORLD_POS));

    memset(world_pos, 0, 
sizeof(WORLD_POS));

    world_pos->use_billboard = TRUE;
    world_pos->x_scale = world_pos->y_scale = world_pos->z_scale = 1.0f;

    update_world_pos(world_pos);
    
    
return world_pos;
}

//-------------------------------------------------------------------------
// destroy world position object.
//-------------------------------------------------------------------------
void destroy_world_pos(WORLD_POS_PTR world_pos)
{
    free(world_pos);
}

//-------------------------------------------------------------------------
// clone world position information to another world position object.
//-------------------------------------------------------------------------
void clone_world_pos(WORLD_POS_PTR dest, const WORLD_POS_PTR source)
{        
    move_world_pos(dest, source->x_pos, source->y_pos, source->z_pos);
    rotate_world_pos(dest, source->x_rot, source->y_rot, source->z_rot);
    scale_world_pos(dest, source->x_scale, source->y_scale, source->z_scale);
    
    dest->use_billboard = source->use_billboard;    
}

//-------------------------------------------------------------------------
// move to new world position with specified relative value.
//-------------------------------------------------------------------------
void move_world_pos(WORLD_POS_PTR world_pos, 
                    
float x_pos, float y_pos, float z_pos)
{    
    world_pos->x_pos = x_pos;
    world_pos->y_pos = y_pos;
    world_pos->z_pos = z_pos;

    D3DXMatrixTranslation(&world_pos->mat_translation, x_pos, y_pos, z_pos);
}

//-------------------------------------------------------------------------
// move to new world position which relative to current position.
//-------------------------------------------------------------------------
void move_world_pos_rel(WORLD_POS_PTR world_pos, 
                        
float x_add, float y_add, float z_add)
{    
    move_world_pos(world_pos, 
        world_pos->x_pos + x_add, world_pos->y_pos + y_add, world_pos->z_pos + z_add);
}

//-------------------------------------------------------------------------
// rotate around x, y, z, axis with specified degree.
//-------------------------------------------------------------------------
void rotate_world_pos(WORLD_POS_PTR world_pos, 
                      
float x_rot, float y_rot, float z_rot)
{    
    world_pos->x_rot = x_rot;
    world_pos->y_rot = y_rot;
    world_pos->z_rot = z_rot;

    
// Builds a matrix with a specified yaw, pitch, and roll.
    D3DXMatrixRotationYawPitchRoll(&world_pos->mat_rotation, y_rot, x_rot, z_rot);
}

//-------------------------------------------------------------------------
// rotate around x, y, z, axis which relative to cuurent x, y, z angle.
//-------------------------------------------------------------------------
void rotate_world_pos_rel(WORLD_POS_PTR world_pos, 
                          
float x_add, float y_add, float z_add)
{   
    rotate_world_pos(world_pos, 
        world_pos->x_rot + x_add, world_pos->y_rot + y_add, world_pos->z_rot + z_add);    
}

//-------------------------------------------------------------------------
// Scale world position.
//-------------------------------------------------------------------------
void scale_world_pos(WORLD_POS_PTR world_pos, 
                     
float x_scale, float y_scale, float z_scale)
{    
    world_pos->x_scale = x_scale;
    world_pos->y_scale = y_scale;
    world_pos->z_scale = z_scale;

    D3DXMatrixScaling(&world_pos->mat_scale, x_scale, y_scale, z_scale);
}

//-------------------------------------------------------------------------
// Scale world position which relative to current scale value.
//-------------------------------------------------------------------------
void scale_world_pos_rel(WORLD_POS_PTR world_pos, 
                         
float x_add, float y_add, float z_add)
{
    scale_world_pos(world_pos, 
        world_pos->x_pos + x_add, world_pos->y_pos + y_add, world_pos->z_pos + z_add);
}

//-------------------------------------------------------------------------
// Update world transformation matrix.
//-------------------------------------------------------------------------
void update_world_pos(WORLD_POS_PTR world_pos)
{   
    D3DXMATRIX mat_view, mat_transposed;    

    
// setup billboarding matrix
    if(world_pos->use_billboard)
    {        
        g_d3d_device->GetTransform(D3DTS_VIEW, &mat_view);
        D3DXMatrixTranspose(&mat_transposed, &mat_view);

        mat_transposed._41 = mat_transposed._42 = mat_transposed._43 = 0.0;
        mat_transposed._14 = mat_transposed._24 = mat_transposed._34 = 0.0;        
    }

    
// combine scaling and rotation matrices first
    D3DXMatrixMultiply(&world_pos->mat_world, &world_pos->mat_scale, &world_pos->mat_rotation);

    
// apply billboard matrix
    if(world_pos->use_billboard)
        D3DXMatrixMultiply(&world_pos->mat_world, &world_pos->mat_world, &mat_transposed);

    
// combine with translation matrix
    D3DXMatrixMultiply(&world_pos->mat_world, &world_pos->mat_world, &world_pos->mat_translation);

    
// combine with combined matrices (if any)

    
if(world_pos->mat_combine_1)
        D3DXMatrixMultiply(&world_pos->mat_world, &world_pos->mat_world, world_pos->mat_combine_1);

    
if(world_pos->mat_combine_2)
        D3DXMatrixMultiply(&world_pos->mat_world, &world_pos->mat_world, world_pos->mat_combine_2);
}

 

posted on 2007-10-25 20:21 lovedday 閱讀(196) 評論(0)  編輯 收藏 引用


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


公告

導(dǎo)航

統(tǒng)計

常用鏈接

隨筆分類(178)

3D游戲編程相關(guān)鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久精品中文字幕免费mv| 男同欧美伦乱| 国产麻豆9l精品三级站| 欧美一区视频| 久久精品国产亚洲aⅴ| 狠狠色综合网站久久久久久久| 欧美中文字幕第一页| 午夜精品久久久久久久久久久久| 国产日韩1区| 欧美风情在线观看| 欧美人体xx| 午夜影院日韩| 久久亚裔精品欧美| 亚洲少妇中出一区| 欧美一区二区精美| 亚洲每日更新| 午夜精品一区二区在线观看| 黄色一区二区在线观看| 亚洲国产99精品国自产| 国产精品久在线观看| 久久久久九九九| 欧美福利小视频| 亚久久调教视频| 美女91精品| 午夜精品久久久久影视| 久久一日本道色综合久久| 一区二区三区欧美成人| 欧美在线三级| 亚洲一区在线直播| 久久久欧美精品| 亚洲欧美日韩精品久久亚洲区 | 日韩午夜电影在线观看| 在线亚洲激情| 亚洲肉体裸体xxxx137| 亚洲欧美日韩直播| 日韩一级黄色片| 久久精品色图| 亚洲一区二区在线观看视频| 卡通动漫国产精品| 久久高清一区| 欧美视频久久| 亚洲激精日韩激精欧美精品| 国产专区综合网| 一区二区三区鲁丝不卡| 亚洲精品看片| 久久久夜色精品亚洲| 欧美在线免费播放| 国产精品免费看久久久香蕉| 亚洲人成欧美中文字幕| 在线播放亚洲| 久久午夜精品| 久久夜色精品一区| 国产一区二区三区不卡在线观看| 99国内精品久久久久久久软件| 精品动漫3d一区二区三区免费| 亚洲男人的天堂在线aⅴ视频| av成人老司机| 欧美精品首页| 亚洲欧洲日本在线| 亚洲乱码国产乱码精品精98午夜| 久久久久这里只有精品| 久久亚洲精品一区| 亚洲国产小视频| 亚洲激情啪啪| 一区二区三区高清| 亚洲精品一区二区在线观看| 鲁大师影院一区二区三区| 久久亚洲精品中文字幕冲田杏梨 | 99精品黄色片免费大全| 最新日韩在线| 欧美日本免费| 在线视频精品| 欧美在线看片a免费观看| 国产亚洲福利| 老司机成人在线视频| 欧美第一黄网免费网站| 亚洲精品一区二区三区福利| 欧美国产大片| 一区二区三区视频在线| 午夜视频久久久| 国产婷婷97碰碰久久人人蜜臀| 久久国产福利国产秒拍| 久热精品视频在线| 亚洲日本理论电影| 欧美天天视频| 午夜精品美女久久久久av福利| 久久青青草综合| 亚洲美女视频| 国产欧美一区二区精品仙草咪 | 亚洲一区二区高清| 久久精品国产免费| 亚洲国产精品视频一区| 欧美日韩视频不卡| 羞羞答答国产精品www一本 | 亚洲一区二区在线播放| 国产日韩欧美亚洲一区| 美女露胸一区二区三区| 一区二区精品| 免费看av成人| 亚洲欧美国产精品桃花| 在线观看视频日韩| 欧美日韩爆操| 久久久水蜜桃| 亚洲欧美999| 亚洲黑丝一区二区| 久久漫画官网| 中日韩在线视频| 亚洲国产成人在线播放| 国产精品久久久一区麻豆最新章节| 欧美在线影院在线视频| 亚洲乱亚洲高清| 鲁大师成人一区二区三区| 亚洲网站视频| 亚洲日本va在线观看| 国产日韩精品视频一区二区三区| 蜜臀91精品一区二区三区| 午夜精品福利一区二区三区av| 亚洲电影中文字幕| 久久婷婷国产综合精品青草| 亚洲图片欧美日产| 亚洲精品一区二区三区不| 伊人久久大香线蕉综合热线 | 久久久久久网站| 亚洲午夜日本在线观看| 亚洲黄一区二区| 欧美高清一区| 久久综合九色综合久99| 欧美在线国产精品| 午夜精品久久久久久久白皮肤 | 欧美中文在线观看国产| 一本一本久久a久久精品综合麻豆| 黄色亚洲精品| 国产视频综合在线| 国产精品天天看| 国产精品进线69影院| 欧美日韩精品不卡| 欧美日韩国产首页| 欧美精品不卡| 欧美男人的天堂| 欧美日韩国产一级| 欧美日韩国产首页| 欧美丝袜一区二区三区| 欧美三级电影大全| 欧美日韩亚洲免费| 欧美午夜激情小视频| 国产精品电影网站| 国产精品美女诱惑| 欧美婷婷久久| 国产欧美一区二区三区国产幕精品| 国产精品久久久久久久浪潮网站 | 久久久99国产精品免费| 欧美亚洲一区二区在线| 欧美永久精品| 久久久亚洲精品一区二区三区| 久久久久9999亚洲精品| 久久综合激情| 欧美激情影院| 国产精品美女久久久久久久| 国产欧美日韩三级| 亚洲成人在线视频网站| 亚洲破处大片| 亚洲影音一区| 久久久噜噜噜| 亚洲激情小视频| 亚洲视屏在线播放| 欧美亚洲尤物久久| 欧美成人精品在线视频| 欧美少妇一区二区| 国产一区免费视频| 亚洲人成在线观看| 午夜视频一区| 欧美激情影院| 亚洲午夜精品一区二区三区他趣 | 亚洲精品一二区| 亚洲欧美日韩一区在线观看| 久久免费黄色| 国产精品成人一区二区三区吃奶| 国产精品视频999| 亚洲国产日韩综合一区| 亚洲一区二区三区精品在线| 久久婷婷一区| av成人天堂| 久久久久久亚洲综合影院红桃| 欧美日韩国产麻豆| 伊甸园精品99久久久久久| 亚洲网址在线| 女人天堂亚洲aⅴ在线观看| 一区二区三区四区蜜桃| 久久亚洲国产成人| 国产精品夜夜夜一区二区三区尤| 在线观看91精品国产麻豆| 亚洲一区二区三区三| 欧美激情bt| 久久国产黑丝| 国产精品久久久久一区| 亚洲美女在线一区| 美女久久网站| 久久riav二区三区| 国产精品普通话对白| 在线视频免费在线观看一区二区|