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

天行健 君子當自強而不息

創建游戲內核(6)【OO改良版】

 

本篇是創建游戲內核(5)【OO改良版】的續篇,關于該內核的細節說明請參閱創建游戲內核(6)


接口:

class CAMERA
{
public:
    CAMERA();

    D3DXMATRIX* get_matrix();

    
void init();
    
void update();

    
void move(float x_pos, float y_pos, float z_pos);
    
void move_rel(float x_add, float y_add, float z_add);

    
void rotate(float x_rot, float y_rot, float z_rot);
    
void rotate_rel(float x_add, float y_add, float z_add);

    
void point(float x_eye, float y_eye, float z_eye, 
               
float x_at, float y_at, float z_at);

    
void set_start_track();
    
void set_end_track();
    
void track(float time_ratio, float time_length);

    
float get_x_pos();
    
float get_y_pos();
    
float get_z_pos();
    
float get_x_rotation();
    
float get_y_rotation();
    
float get_z_rotation();

private:
    
float m_x_pos, m_y_pos, m_z_pos;                   // camera current position
    float m_x_rot, m_y_rot, m_z_rot;                   // camera current rotation

    
float m_start_x_pos, m_start_y_pos, m_start_z_pos; // start tracking position
    float m_start_x_rot, m_start_y_rot, m_start_z_rot; // start tracking rotation

    
float m_end_x_pos, m_end_y_pos, m_end_z_pos;       // end tracking position
    float m_end_x_rot, m_end_y_rot, m_end_z_rot;       // end tracking rotation

    D3DXMATRIX m_mat_world;          
// world transform matrix
    D3DXMATRIX m_mat_translation;    // translation matrix
    D3DXMATRIX m_mat_rotation;       // rotation matrix
};

typedef CAMERA* CAMERA_PTR;
 

實現:

//-------------------------------------------------------------------------
// Constructor, zero member data.
//-------------------------------------------------------------------------
CAMERA::CAMERA()
{
    memset(
this, 0, sizeof(*this));   
}

//-------------------------------------------------------------------------
// initialize camera.
//-------------------------------------------------------------------------
void CAMERA::init()
{    
    update();
}

//-------------------------------------------------------------------------
// move camera to new position.
//-------------------------------------------------------------------------
void CAMERA::move(float x_pos, float y_pos, float z_pos)
{
    m_x_pos = x_pos;  m_y_pos = y_pos;  m_z_pos = z_pos;

    D3DXMatrixTranslation(&m_mat_translation, -x_pos, -y_pos, -z_pos);
}

//-------------------------------------------------------------------------
// move camera to new positoin which relative to current position.
//-------------------------------------------------------------------------
void CAMERA::move_rel(float x_add, float y_add, float z_add)
{
    move(m_x_pos + x_add, m_y_pos + y_add, m_z_pos + z_add);
}

//-------------------------------------------------------------------------
// Build rotation matrix.
//-------------------------------------------------------------------------
void CAMERA::rotate(float x_rot, float y_rot, float z_rot)
{
    D3DXMATRIX _mat_x_rot, _mat_y_rot, _mat_z_rot;

    m_x_rot = x_rot;  m_y_rot = y_rot; m_z_rot = z_rot;

    D3DXMatrixRotationX(&_mat_x_rot, -x_rot);
    D3DXMatrixRotationX(&_mat_y_rot, -y_rot);
    D3DXMatrixRotationX(&_mat_z_rot, -z_rot);

    m_mat_rotation = _mat_z_rot;
    
    D3DXMatrixMultiply(&m_mat_rotation, &m_mat_rotation, &_mat_y_rot);
    D3DXMatrixMultiply(&m_mat_rotation, &m_mat_rotation, &_mat_x_rot);       
}

//-------------------------------------------------------------------------
// Build rotation matrix which relative to current rotation.
//-------------------------------------------------------------------------
void CAMERA::rotate_rel(float x_add, float y_add, float z_add)
{
    rotate(m_x_rot + x_add, m_y_rot + y_add, m_z_rot + z_add);
}

//-------------------------------------------------------------------------
// move camera to new position and look at new target position.
//-------------------------------------------------------------------------
void CAMERA::point(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(x_eye, y_eye, z_eye);
    rotate(_x_rot, _y_rot, 0.0);
}

//-------------------------------------------------------------------------
// set camera's start tracking position and rotation.
//-------------------------------------------------------------------------
void CAMERA::set_start_track()
{
    m_start_x_pos = m_x_pos;  m_start_x_pos = m_y_pos;  m_start_z_pos = m_z_pos;
    m_start_x_rot = m_x_rot;  m_start_y_rot = m_y_rot;  m_start_z_rot = m_z_rot;
}

//-------------------------------------------------------------------------
// set camera's end tracking position and rotation.
//-------------------------------------------------------------------------
void CAMERA::set_end_track()
{
    m_end_x_pos = m_x_pos;  m_end_y_pos = m_y_pos;  m_end_z_pos = m_z_pos;
    m_end_x_rot = m_x_rot;  m_end_y_rot = m_y_rot;  m_end_z_rot = m_z_rot;
}

//-------------------------------------------------------------------------
// move camera to new position and ratation by giving time, 
// 0 <= time_ratio <= 1.
//-------------------------------------------------------------------------
void CAMERA::track(float time_ratio, float time_length)
{
    
float time_offset = time_length * time_ratio;

    
float x = (m_end_x_pos - m_start_x_pos) / time_length * time_offset;
    
float y = (m_end_y_pos - m_start_x_pos) / time_length * time_offset;
    
float z = (m_end_z_pos - m_start_z_pos) / time_length * time_offset;

    move(m_start_x_pos + x, m_start_x_pos + y, m_start_z_pos + z);

    x = (m_end_x_rot - m_start_x_rot) / time_length * time_offset;
    y = (m_end_y_rot - m_start_y_rot) / time_length * time_offset;
    z = (m_end_z_rot - m_start_z_rot) / time_length * time_offset;

    rotate(m_start_x_rot + x, m_start_y_rot + y, m_start_z_rot + z);
}

//-------------------------------------------------------------------------
// update new camera world transform matrix.
//-------------------------------------------------------------------------
void CAMERA::update()
{
    D3DXMatrixMultiply(&m_mat_world, &m_mat_translation, &m_mat_rotation);
}

//-------------------------------------------------------------------------
// Get camera world transform matrix.
//-------------------------------------------------------------------------
D3DXMATRIX* CAMERA::get_matrix()
{
    update();

    
return &m_mat_world;
}

//-------------------------------------------------------------------------
// Get camera current position (x coordinate).
//-------------------------------------------------------------------------
float CAMERA::get_x_pos()
{
    
return m_x_pos;
}

//-------------------------------------------------------------------------
// Get camera current position (y coordinate).
//-------------------------------------------------------------------------
float CAMERA::get_y_pos()
{
    
return m_y_pos;
}

//-------------------------------------------------------------------------
// Get camera current position (z coordinate).
//-------------------------------------------------------------------------
float CAMERA::get_z_pos()
{
    
return m_z_pos;
}

//-------------------------------------------------------------------------
// Get camera current rotation (x coordinate).
//-------------------------------------------------------------------------
float CAMERA::get_x_rotation()
{
    
return m_x_rot;
}

//-------------------------------------------------------------------------
// Get camera current rotation (y coordinate).
//-------------------------------------------------------------------------
float CAMERA::get_y_rotation()
{
    
return m_y_rot;
}

//-------------------------------------------------------------------------
// Get camera current rotation (z coordinate).
//-------------------------------------------------------------------------
float CAMERA::get_z_rotation()
{
    
return m_z_rot;
}

posted on 2007-10-06 18:04 lovedday 閱讀(277) 評論(0)  編輯 收藏 引用


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


公告

導航

統計

常用鏈接

隨筆分類(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>
            国产精品jvid在线观看蜜臀| 欧美1级日本1级| 国产亚洲人成a一在线v站| 欧美极品一区| 久久久久久成人| 香蕉久久夜色精品| 久久精品国产综合精品| 久久综合网络一区二区| 国产真实乱子伦精品视频| 国产精品系列在线| 国产一区日韩一区| 亚洲全黄一级网站| 亚洲视频福利| 你懂的国产精品| 野花国产精品入口| 久久影视三级福利片| 欧美日本三级| 亚洲成在人线av| 亚洲免费在线视频| 欧美视频一区二| 激情久久中文字幕| 午夜电影亚洲| 日韩视频―中文字幕| 国产精品一区在线观看| 欧美激情一区二区三区高清视频| 在线视频精品| 欧美黑人在线播放| 久久精品1区| 国外成人在线视频| 午夜久久美女| 亚洲久久在线| 欧美巨乳波霸| 99国产麻豆精品| 艳女tv在线观看国产一区| 韩国一区二区三区美女美女秀| 欧美国产亚洲精品久久久8v| 久久蜜桃资源一区二区老牛| 国产精品美女xx| 欧美在线观看一区| 午夜欧美精品久久久久久久| 欧美日韩大片一区二区三区| 亚洲精品欧美一区二区三区| 欧美国产日韩一区二区三区| 每日更新成人在线视频| 亚洲人成欧美中文字幕| 亚洲成色777777在线观看影院| 在线电影院国产精品| 久久精品盗摄| 老司机午夜精品视频| 亚洲精选一区| 香蕉久久国产| 欧美精品久久久久久久免费观看 | 午夜精品剧场| 亚洲欧美制服中文字幕| 在线国产日韩| 亚洲尤物在线| 久久久91精品国产一区二区三区| 久久资源在线| 日韩小视频在线观看专区| 亚洲欧美日韩国产一区二区| 亚洲精品国产精品乱码不99| 国产精品人人爽人人做我的可爱| 亚洲国产精品第一区二区| 亚洲一区bb| 久久精品国产第一区二区三区| 欧美护士18xxxxhd| 欧美一区二区三区精品| 亚洲欧美激情四射在线日| 欧美电影美腿模特1979在线看| 今天的高清视频免费播放成人| 亚洲一区二区视频在线观看| 久久久久在线观看| 欧美 日韩 国产 一区| 女同性一区二区三区人了人一 | 亚洲国产精品电影| 国产在线一区二区三区四区| 亚洲女同精品视频| 国产亚洲欧美日韩在线一区| 亚洲一区黄色| 久久99在线观看| 永久91嫩草亚洲精品人人| 久久国产手机看片| 欧美精品成人一区二区在线观看| 国内精品伊人久久久久av一坑| 午夜国产精品视频免费体验区| 一区二区三区免费网站| 亚洲午夜在线观看视频在线| 国产精品久久久久久久久久ktv| 欧美在线免费播放| 国产一区再线| 欧美精品一区三区在线观看| 在线亚洲美日韩| 美女诱惑一区| 久久国产成人| 亚洲最新在线视频| 国模大胆一区二区三区| 亚洲激情网站| 久久se精品一区精品二区| 日韩亚洲在线观看| 欧美国产日韩一区二区三区| 午夜精品久久久久久99热| 欧美肥婆在线| 久久久av网站| 久久不射2019中文字幕| 亚洲欧美日韩一区二区在线| 亚洲美女av电影| 亚洲激情视频| 91久久精品国产91性色tv| 在线免费不卡视频| 久久久久久综合网天天| 中日韩美女免费视频网址在线观看 | 久久蜜臀精品av| 亚洲深夜激情| 欧美一区二区视频97| 久久福利影视| 久久人人看视频| 久久亚洲私人国产精品va媚药 | 亚洲人成小说网站色在线| 久久riav二区三区| 久久婷婷国产综合国色天香| 美女精品在线观看| 亚洲激情视频在线播放| 一本大道av伊人久久综合| 亚洲国产乱码最新视频| 91久久久久久国产精品| 一本色道久久综合一区| 国语对白精品一区二区| 激情伊人五月天久久综合| 亚洲国产日韩一区二区| 亚洲婷婷免费| 欧美搞黄网站| 国产精品欧美久久| 久久精品亚洲一区二区三区浴池 | 国产手机视频一区二区| 日韩视频久久| 欧美好骚综合网| 亚洲午夜免费视频| 美日韩精品视频免费看| 亚洲麻豆av| 欧美高清视频| 亚洲精品资源| 精品电影在线观看| 亚洲午夜精品网| 日韩视频在线观看免费| 老鸭窝亚洲一区二区三区| 国内精品久久久久久影视8 | 国产一区二区三区在线观看视频| 欧美精品 日韩| 一区在线视频| 欧美日韩激情小视频| 一色屋精品亚洲香蕉网站| 国产精品一香蕉国产线看观看| 欧美午夜视频网站| 国产一区二区日韩| 在线成人亚洲| av不卡在线| 亚洲国产精品美女| 亚洲欧洲另类国产综合| 欧美日韩免费观看一区| 久久精品首页| 国产精品日本欧美一区二区三区| 国产精品欧美久久| 欧美chengren| 国产亚洲人成网站在线观看| 亚洲最新在线视频| 久久爱另类一区二区小说| 99国产精品久久久久久久久久| 老司机一区二区三区| 欧美激情亚洲激情| 在线不卡视频| 亚洲午夜在线视频| 亚洲一级免费视频| 亚洲精品久久嫩草网站秘色 | 久久国产精品一区二区三区| 亚洲国产精品成人久久综合一区| 久久精品国产一区二区三区| 日韩网站免费观看| 日韩视频免费观看高清在线视频| 亚洲人成绝费网站色www| 亚洲黄页视频免费观看| 欧美一区2区三区4区公司二百| 国产精品一二一区| 久久免费黄色| 亚洲国产精品第一区二区三区 | 欧美一区二区三区精品| 久久青草久久| 在线视频欧美精品| 国产一区在线看| 久久裸体艺术| 国产精品色网| 亚洲天堂成人在线视频| 一区二区成人精品| 欧美日韩精品在线| 亚洲一区二区黄| 欧美影院一区| 亚洲看片一区| 国产午夜精品在线| 蜜桃视频一区| 亚洲欧洲一级| 欧美无乱码久久久免费午夜一区|