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

天行健 君子當自強而不息

創(chuàng)建游戲內核(6)【C風格版】

 

本篇是創(chuàng)建游戲內核(5)【C風格版】的續(xù)篇,關于該內核的細節(jié)說明請參考創(chuàng)建游戲內核(6)。

 

接口:

typedef struct CAMERA
{
    
float x_pos, y_pos, z_pos;                      // camera current position
    float x_rot, y_rot, z_rot;                      // camera current rotation

    
float start_x_pos, start_y_pos, start_z_pos;    // start tracking position
    float start_x_rot, start_y_rot, start_z_rot;    // start tracking rotation

    
float end_x_pos, end_y_pos, end_z_pos;          // end tracking position
    float end_x_rot, end_y_rot, end_z_rot;          // end tracking rotation

    D3DXMATRIX mat_view;                           
// world transform matrix
    D3DXMATRIX mat_translation;                     // translation matrix
    D3DXMATRIX mat_rotation;                        // rotation matrix
} *CAMERA_PTR;

CAMERA_PTR create_camera();
void destroy_camera(CAMERA_PTR camera);

void move_camera(CAMERA_PTR camera, 
                 
float x_pos, float y_pos, float z_pos);

void move_camera_rel(CAMERA_PTR camera, 
                     
float x_add, float y_add, float z_add);

void rotate_camera(CAMERA_PTR camera, 
                   
float x_rot, float y_rot, float z_rot);

void point_camera(CAMERA_PTR camera, 
                  
float x_eye, float y_eye, float z_eye, 
                  
float x_at, float y_at, float z_at);

void start_track_camera(CAMERA_PTR camera);
void end_track_camera(CAMERA_PTR camera);
void track_camera(CAMERA_PTR camera, float time_ratio);
void update_camera_pos(CAMERA_PTR camera);

實現(xiàn):

//----------------------------------------------------------------------------------------
// Create camera.
//----------------------------------------------------------------------------------------
CAMERA_PTR create_camera()
{
    CAMERA_PTR camera = (CAMERA_PTR) malloc(
sizeof(CAMERA));

    memset(camera, 0, 
sizeof(CAMERA));

    
return camera;
}

//----------------------------------------------------------------------------------------
// Destroy camera.
//----------------------------------------------------------------------------------------
void destroy_camera(CAMERA_PTR camera)
{
    free(camera);
}

//----------------------------------------------------------------------------------------
// move camera to new position.
//----------------------------------------------------------------------------------------
void move_camera(CAMERA_PTR camera, 
                 
float x_pos, float y_pos, float z_pos)
{    
    camera->x_pos = x_pos;
    camera->y_pos = y_pos;
    camera->z_pos = z_pos;

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

//----------------------------------------------------------------------------------------
// Move camera to new position relative to current position.
//----------------------------------------------------------------------------------------
void move_camera_rel(CAMERA_PTR camera, 
                     
float x_add, float y_add, float z_add)
{
    move_camera(camera, 
                camera->x_pos + x_add, camera->y_pos + y_add, camera->z_pos + z_add);
}

//-------------------------------------------------------------------------
// rotate camera.
//-------------------------------------------------------------------------
void rotate_camera(CAMERA_PTR camera, 
                   
float x_rot, float y_rot, float z_rot)
{
    D3DXMATRIX mat_x_rot, mat_y_rot, mat_z_rot;    

    camera->x_rot = x_rot;
    camera->y_rot = y_rot;
    camera->z_rot = z_rot;

    D3DXMatrixRotationX(&mat_x_rot, -x_rot);
    D3DXMatrixRotationY(&mat_y_rot, -y_rot);
    D3DXMatrixRotationZ(&mat_z_rot, -z_rot);

    camera->mat_rotation = mat_z_rot;

    D3DXMatrixMultiply(&camera->mat_rotation, &camera->mat_rotation, &mat_y_rot);
    D3DXMatrixMultiply(&camera->mat_rotation, &camera->mat_rotation, &mat_x_rot);
}

//-------------------------------------------------------------------------
// rotate camera.
//-------------------------------------------------------------------------
void rotate_camera_rel(CAMERA_PTR camera, 
                       
float x_add, float y_add, float z_add)
{
    rotate_camera(camera, 
                  camera->x_pos + x_add, camera->y_pos + y_add, camera->z_pos + z_add);
}

//-------------------------------------------------------------------------
// move camera to new position and look at new target position.
//-------------------------------------------------------------------------
void point_camera(CAMERA_PTR camera, 
                  
float x_eye, float y_eye, float z_eye, 
                  
float x_at, float y_at, float z_at)
{
    
// calculate angles between points

    
float x_diff = x_at - x_eye;
    
float y_diff = y_at - y_eye;
    
float z_diff = z_at - z_eye;

    
float x_rot = (float) atan2(-y_diff, sqrt(x_diff * x_diff + z_diff * z_diff));
    
float y_rot = (float) atan2(x_diff, z_diff);

    
// move camera to new position and look at new target
    move_camera(camera, x_eye, y_eye, z_eye);
    rotate_camera(camera, x_rot, y_rot, 0.0);
}

//-------------------------------------------------------------------------
// set camera's start tracking position and rotation.
//-------------------------------------------------------------------------
void start_track_camera(CAMERA_PTR camera)
{    
    camera->start_x_pos = camera->x_pos;
    camera->start_y_pos = camera->y_pos;
    camera->start_z_pos = camera->z_pos;

    camera->start_x_rot = camera->x_rot;
    camera->start_y_rot = camera->y_rot;
    camera->start_z_rot = camera->z_rot;
}

//-------------------------------------------------------------------------
// set camera's end tracking position and rotation.
//-------------------------------------------------------------------------
void end_track_camera(CAMERA_PTR camera)
{    
    camera->end_x_pos = camera->x_pos;
    camera->end_y_pos = camera->y_pos;
    camera->end_z_pos = camera->z_pos;

    camera->end_x_rot = camera->x_rot;
    camera->end_y_rot = camera->y_rot;
    camera->end_z_rot = camera->z_rot;
}

//-------------------------------------------------------------------------
// move camera to new position and ratation by giving time, 
// 0 <= time_ratio <= 1.
//-------------------------------------------------------------------------
void track_camera(CAMERA_PTR camera, float time_ratio)
{       
    
float x_move = (camera->end_x_pos - camera->start_x_pos) * time_ratio;
    
float y_move = (camera->end_y_pos - camera->start_y_pos) * time_ratio;
    
float z_move = (camera->end_z_pos - camera->start_z_pos) * time_ratio;

    move_camera(camera, 
        camera->start_x_pos + x_move, camera->start_y_pos + y_move, camera->start_z_pos + z_move);

    
float x_rotate = (camera->end_x_rot - camera->start_x_rot) * time_ratio;
    
float y_rotate = (camera->end_y_rot - camera->start_y_rot) * time_ratio;
    
float z_rotate = (camera->end_z_rot - camera->start_z_rot) * time_ratio;

    rotate_camera(camera, 
        camera->start_x_rot + x_rotate, camera->start_y_rot + y_rotate, camera->start_z_rot + z_rotate);
}

//-------------------------------------------------------------------------
// update new camera world transform matrix.
//-------------------------------------------------------------------------
void update_camera_pos(CAMERA_PTR camera)
{
    D3DXMatrixMultiply(&camera->mat_view, &camera->mat_translation, &camera->mat_rotation);
}

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


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


公告

導航

統(tǒng)計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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在线| 欧美日韩另类在线| 久久综合中文字幕| 欧美视频中文字幕在线| 久久亚洲精品一区二区| 欧美日韩伦理在线| 裸体女人亚洲精品一区| 欧美午夜激情在线| 欧美高清视频一区二区| 国产精品一区二区久久久久 | 国产欧美在线视频| 亚洲电影免费| 国模大胆一区二区三区| 9国产精品视频| 在线观看一区二区精品视频| 亚洲一区二区三区免费视频 | 午夜精品一区二区三区电影天堂 | 一区二区三区产品免费精品久久75 | 午夜精品国产精品大乳美女| 亚洲三级电影在线观看| 欧美一区二区在线看| 在线亚洲一区| 欧美成黄导航| 老司机成人网| 国产一区二区中文| 99爱精品视频| 亚洲理论在线观看| 久久久亚洲成人| 久久精品国亚洲| 欧美亚州在线观看| 亚洲精品乱码久久久久| 亚洲黄色影片| 久久综合九色综合久99| 久久久久久久久久码影片| 国产精品久久久久久影院8一贰佰| 亚洲高清色综合| 亚洲国产精品久久久久婷婷老年| 久久国产精品99国产精| 久久不射中文字幕| 国产精品免费久久久久久| 一本色道久久88精品综合| 99热精品在线| 欧美日韩91| 99热这里只有成人精品国产| 中文亚洲欧美| 国产精品大片| 亚洲综合成人在线| 欧美在线视频一区| 国产一区二区三区久久悠悠色av| 午夜在线电影亚洲一区| 久久久久国内| 亚洲国产三级在线| 欧美丰满高潮xxxx喷水动漫| 亚洲欧洲一区二区在线播放| 99在线精品视频在线观看| 欧美日韩日本国产亚洲在线| 99香蕉国产精品偷在线观看| 亚洲欧美www| 国产香蕉久久精品综合网| 久久精品麻豆| 亚洲二区在线视频| 亚洲一级在线观看| 国产亚洲成av人片在线观看桃| 久久成人亚洲| 欧美激情中文字幕一区二区| 日韩视频―中文字幕| 欧美日韩在线观看视频| 亚洲欧美日韩国产成人| 蜜臀a∨国产成人精品| 亚洲国产精品美女| 欧美视频亚洲视频| 久久成人国产精品| 亚洲激情在线观看| 欧美一区二区三区久久精品| 伊人天天综合| 欧美日韩亚洲一区二区三区四区| 亚洲女人av| 欧美国产精品中文字幕| 一区二区三区高清在线观看| 国产欧美大片| 欧美成人国产| 亚洲香蕉伊综合在人在线视看| 久久精品一本| 一区二区电影免费观看| 国产在线播放一区二区三区| 欧美极品影院| 久久综合国产精品| av成人免费| 国产午夜精品久久| 欧美日韩岛国| 久久香蕉国产线看观看av| 亚洲精品久久久蜜桃| 久久精品国产77777蜜臀| 亚洲免费久久| 好吊成人免视频| 国产精品v日韩精品v欧美精品网站| 久久国产直播| 亚洲一区二区三区精品在线观看| 欧美黄色一区| 久久国产精品一区二区| av成人动漫| 在线观看成人一级片| 国产精品毛片a∨一区二区三区|国| 噜噜噜久久亚洲精品国产品小说| 在线一区日本视频| 亚洲国产日韩美| 久久综合九色九九| 亚欧成人精品| 亚洲图中文字幕| 亚洲人成毛片在线播放女女| 韩国福利一区| 国产精品一区二区久久精品| 欧美日韩国产精品成人| 麻豆精品国产91久久久久久| 欧美一区二区三区免费视频| 亚洲视频综合| 亚洲黄色免费| 欧美ed2k| 久久伊人精品天天| 久久精品日韩欧美| 欧美一区二区三区免费视频| 亚洲伊人观看| 宅男噜噜噜66一区二区| 99在线精品视频| 99在线|亚洲一区二区| 日韩视频国产视频| 亚洲精品视频在线观看网站 | 一区二区三区黄色| 亚洲人成网站精品片在线观看 | 欧美日韩国产小视频| 欧美不卡在线| 农夫在线精品视频免费观看| 久久亚洲精品视频| 久久精品首页| 久久国产精品电影| 久久久www成人免费毛片麻豆| 欧美一区二区三区四区高清| 羞羞色国产精品| 欧美一区二区三区四区在线| 欧美在线日韩| 久久久蜜桃精品| 另类欧美日韩国产在线| 免费欧美视频| 欧美巨乳在线| 欧美午夜精品一区| 国产精品永久免费视频| 国产欧美精品一区二区三区介绍| 国产精品手机在线| 国产资源精品在线观看| 亚洲成人在线| 一本久久a久久免费精品不卡| 中文一区字幕| 欧美在线观看你懂的| 久久午夜av| 欧美国产视频在线观看| 亚洲剧情一区二区| 亚洲在线第一页| 久久精品五月婷婷| 欧美激情一区二区三区成人| 欧美视频一二三区| 国产主播精品| 日韩视频一区二区在线观看| 国产日韩欧美夫妻视频在线观看| 久久黄色网页| 美脚丝袜一区二区三区在线观看 | 亚洲国产天堂久久国产91| 亚洲精品中文字幕在线| 亚洲小说区图片区| 久久久久久自在自线| 欧美激情综合色| 亚洲视频一区二区| 久久久久久久国产| 欧美日韩黄视频| 在线一区观看| 亚洲第一页中文字幕| 亚洲免费视频在线观看| 欧美一区二区三区视频免费| 免费看的黄色欧美网站| 欧美午夜精彩| 尤物网精品视频| 亚洲一区二区三区四区五区午夜| 久久久久91| 夜夜嗨av一区二区三区免费区| 欧美一区二区精品在线| 欧美日韩国产高清视频| 一区二区在线免费观看| 亚洲砖区区免费| 裸体歌舞表演一区二区| 一区二区三区视频免费在线观看| 久久蜜桃精品| 国产精品一区二区三区成人| 亚洲毛片av| 免费高清在线一区| 午夜精品国产|