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

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

使用.x文件模型(3)

通過四元數(shù)實(shí)現(xiàn)模型旋轉(zhuǎn)

早在1843年,William Roman Hamilton爵士就已經(jīng)發(fā)明了作為復(fù)數(shù)擴(kuò)展的四元數(shù)(quaternion),但是直到1985年才有一個(gè)叫Ken ShoeMake的人在SIGGRAPH(Special Interest Group on Computer Graphics,美國(guó)計(jì)算機(jī)協(xié)會(huì)的圖形專業(yè)組)把四元數(shù)引入計(jì)算機(jī)圖形處理領(lǐng)域。

四元數(shù)將三維空間中旋轉(zhuǎn)的概念擴(kuò)展到四維空間,這對(duì)于表示和處理3D中點(diǎn)的旋轉(zhuǎn)很有用。四元數(shù)還可以用于以下地方:

(1)骨骼動(dòng)畫(skeletal animation)

(2)反向動(dòng)力學(xué)動(dòng)畫(inverse cinimatic)

(3)3D物理學(xué)

在游戲中可以使用四元數(shù)來取代旋轉(zhuǎn)矩陣,它可用于描述3D空間中繞任意軸的任意旋轉(zhuǎn)。使用四元數(shù)來代替旋轉(zhuǎn)矩陣具有以下優(yōu)點(diǎn):

(1)四元數(shù)占用的空間比矩陣少。

(2)一些操作在視覺上會(huì)顯得更為平滑,比如可以在兩個(gè)四元數(shù)之間做插值運(yùn)算。

Direct3D擴(kuò)展實(shí)用庫函數(shù)D3DXQuaternionRotationYawPitchRoll()提供了將三個(gè)歐拉角轉(zhuǎn)換為一個(gè)四元數(shù)的功能,該函數(shù)聲明如下:

Builds a quaternion with the given yaw, pitch, and roll.

D3DXQUATERNION * D3DXQuaternionRotationYawPitchRoll(
D3DXQUATERNION * pOut,
FLOAT Yaw,
FLOAT Pitch,
FLOAT Roll
);

Parameters

pOut
[in, out] Pointer to the D3DXQUATERNION structure that is the result of the operation.
Yaw
[in] Yaw around the y-axis, in radians.
Pitch
[in] Pitch around the x-axis, in radians.
Roll
[in] Roll around the z-axis, in radians.

Return Values

Pointer to a D3DXQUATERNION structure with the specified yaw, pitch, and roll.

Remarks

The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXQuaternionRotationYawPitchRoll function can be used as a parameter for another function.

Use D3DXQuaternionNormalize for any quaternion input that is not already normalized.

由于Direct3D變換引擎需要用矩陣來執(zhí)行旋轉(zhuǎn),所以需要將四元數(shù)轉(zhuǎn)換為矩陣格式。Direct3D擴(kuò)展實(shí)用庫函數(shù)D3DXMatrixRotationQuaternion()提供了將四元數(shù)轉(zhuǎn)換成矩陣的功能,該函數(shù)聲明如下:

Builds a rotation matrix from a quaternion.

D3DXMATRIX * D3DXMatrixRotationQuaternion(
D3DXMATRIX * pOut,
CONST D3DXQUATERNION * pQ
);

Parameters

pOut
[in, out] Pointer to the D3DXMATRIX structure that is the result of the operation.
pQ
[in] Pointer to the source D3DXQUATERNION structure.

Return Values

Pointer to a D3DXMATRIX structure built from the source quaternion.

Remarks

The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXMatrixRotationQuaternion function can be used as a parameter for another function.

For information about how to calculate quaternion values from a direction vector ( x, y, z ) and an angle of rotation, see D3DXQUATERNION.

該示例程序同樣可以通過鍵盤控制飛機(jī)模型的位置和姿態(tài),控制方式和上一個(gè)示例程序完全相同,但實(shí)現(xiàn)代碼卻簡(jiǎn)潔得多,主要改動(dòng)代碼如下:

void setup_world_matrix()
{
static long previous_time = 0;
static float elapsed_time = 0.0f;
	elapsed_time  = (timeGetTime() - previous_time) / 1000.0f;
previous_time = timeGetTime();
	float angle_around_right = 0.0f, angle_around_up = 0.0f, angle_around_look = 0.0f;
	if(g_keys['D'])	angle_around_look  -= 3 * elapsed_time;
if(g_keys['A']) angle_around_look += 3 * elapsed_time;
if(g_keys['S']) angle_around_right -= 3 * elapsed_time;
if(g_keys['W']) angle_around_right += 3 * elapsed_time;
if(g_keys['Q']) angle_around_up -= 3 * elapsed_time;
if(g_keys['E']) angle_around_up += 3 * elapsed_time;
	// now, calculate ratation matrix.
	D3DXQUATERNION quat;
D3DXMATRIX mat_rotation;
	D3DXQuaternionRotationYawPitchRoll(&quat, angle_around_up, angle_around_right, angle_around_look);
D3DXMatrixRotationQuaternion(&mat_rotation, &quat);
D3DXMatrixMultiply(&g_mat_world, &mat_rotation, &g_mat_world);
	// get look vector
	D3DXVECTOR3 look;	
	look.x	= g_mat_world._31;
look.y = g_mat_world._32;
look.z = g_mat_world._33;
	// move model forward or backward
	if(g_keys['F'])
{
g_mat_world._41 += 30 * elapsed_time * look.x;
g_mat_world._42 += 30 * elapsed_time * look.y;
g_mat_world._43 += 30 * elapsed_time * look.z;
}
	if(g_keys['V'])
{
g_mat_world._41 -= 30 * elapsed_time * look.x;
g_mat_world._42 -= 30 * elapsed_time * look.y;
g_mat_world._43 -= 30 * elapsed_time * look.z;
}
	g_device->SetTransform(D3DTS_WORLD, &g_mat_world);
}

在該示例程序中,通過用戶輸入,每一幀都對(duì)飛機(jī)模型進(jìn)行重新定位,不斷改變飛機(jī)模型在空間中的位置或姿態(tài),如果每?jī)蓭g的時(shí)間間隔足夠小,則感到飛機(jī)模型位置或姿態(tài)的變換是連續(xù)的,也就形成了連續(xù)的動(dòng)畫,實(shí)際上這就是三維動(dòng)畫的基本原理,通過不斷改變場(chǎng)景中各物體的位置和姿態(tài)使各物體運(yùn)動(dòng)起來。為了保證動(dòng)畫的連續(xù)性,幀速率要達(dá)到25幀/秒以上。

注意:模型的旋轉(zhuǎn)是繞自身坐標(biāo)軸的旋轉(zhuǎn),而不是繞世界坐標(biāo)系的3個(gè)坐標(biāo)軸旋轉(zhuǎn),而且在旋轉(zhuǎn)模型時(shí)其自身坐標(biāo)軸也在不斷變化。

 

下載示例工程

 

posted on 2008-05-09 15:32 lovedday 閱讀(1226) 評(píng)論(1)  編輯 收藏 引用

評(píng)論

# re: 使用.x文件模型(3) 2012-06-18 11:02 張憶

您好!請(qǐng)問.fx文件是什么文件,沒看到這方面的介紹  回復(fù)  更多評(píng)論   


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


公告

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

隨筆分類(178)

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

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品乱码久久久久久| 久久激情久久| 国产精品一区久久久| 欧美激情综合色| 欧美激情无毛| 欧美体内she精视频在线观看| 欧美日韩在线一区二区三区| 国产精品乱码妇女bbbb| 国产精品视频久久久| 国产欧美另类| 精品成人一区二区三区| 亚洲激情偷拍| av成人老司机| 久久成人这里只有精品| 欧美激情亚洲激情| 日韩视频在线播放| 欧美一级二区| 欧美国产精品久久| 国产精品一香蕉国产线看观看| 韩国在线一区| 夜夜嗨av一区二区三区中文字幕| 欧美一进一出视频| 欧美黄色aaaa| 午夜一区二区三区在线观看 | 亚洲午夜国产成人av电影男同| 亚洲一区在线看| 免费一级欧美片在线观看| 亚洲黄色免费电影| 99re视频这里只有精品| 欧美在线free| 国产精品xxx在线观看www| 尤物精品国产第一福利三区 | 亚洲免费影视| 欧美成人免费小视频| 国产精品视频一二| 日韩一二在线观看| 蜜桃av一区二区| 亚洲在线日韩| 欧美少妇一区| 亚洲精品在线免费观看视频| 久久精品国产在热久久| 欧美成人一区二区在线| 久久精品91| 久久这里有精品视频| 国产精品视频一二三| 日韩香蕉视频| 欧美国产欧美综合| 久久爱另类一区二区小说| 国产精品超碰97尤物18| 亚洲欧洲日本国产| 美脚丝袜一区二区三区在线观看 | 亚洲精品久久久久久久久久久久 | 久久久天天操| 国产有码一区二区| 欧美中文字幕视频| 亚洲欧美日韩精品久久奇米色影视 | 亚洲视频图片小说| 欧美精品一区二区蜜臀亚洲| 亚洲国产精品成人精品| 美女精品在线观看| 久久久另类综合| 一区二区三区在线免费播放| 久久青草福利网站| 狼人社综合社区| 亚洲国产精品成人综合色在线婷婷 | aa级大片欧美| 国产精品vip| 午夜精品免费在线| 香蕉亚洲视频| 狠狠色香婷婷久久亚洲精品| 久久综合九色九九| 玖玖玖国产精品| 亚洲国产精品va| 亚洲激情午夜| 国产精品videossex久久发布| 欧美一区二视频| 久久久久久久999精品视频| 亚洲高清免费视频| 亚洲乱码国产乱码精品精98午夜| 欧美图区在线视频| 久久久999精品| 欧美aa在线视频| 亚洲一区二区三区激情| 性8sex亚洲区入口| 在线观看91精品国产入口| 亚洲高清一二三区| 欧美天天综合网| 开心色5月久久精品| 欧美阿v一级看视频| 亚洲视频免费在线| 国产精品你懂的| 欧美日韩国产成人在线免费| 亚洲视屏在线播放| 亚洲欧洲99久久| 亚洲欧洲一区二区三区在线观看| 999亚洲国产精| 国产亚洲欧美另类一区二区三区| 欧美91福利在线观看| 欧美日韩一区二区三区| 久久久精品一区| 欧美日韩少妇| 欧美成人精品在线| 欧美天堂亚洲电影院在线播放| 久久久伊人欧美| 国产精品高潮呻吟久久av黑人| 久久亚洲影院| 国产精品久久久久久久久果冻传媒 | 久久久亚洲国产天美传媒修理工| 亚洲裸体视频| 欧美怡红院视频| 中文日韩电影网站| 久久亚洲一区| 久久精品99久久香蕉国产色戒| 欧美激情第4页| 欧美1区免费| 国精品一区二区三区| 亚洲天天影视| aa成人免费视频| 欧美肥婆在线| 欧美激情一级片一区二区| 国产一区激情| 亚洲欧美日韩区| 亚洲欧美日韩精品久久亚洲区| 欧美精品在线一区二区三区| 免费视频一区| 好看的亚洲午夜视频在线| 亚洲在线成人| 欧美一区二区视频网站| 欧美性大战xxxxx久久久| 亚洲精品乱码久久久久久按摩观| 亚洲高清色综合| 麻豆freexxxx性91精品| 老司机免费视频一区二区三区| 国产视频精品网| 午夜精品999| 久久久久久久性| 狠狠色狠狠色综合日日91app| 久久成人在线| 欧美不卡高清| 最新高清无码专区| 欧美电影在线免费观看网站| 亚洲国产精品久久精品怡红院 | 一区二区三区毛片| 欧美伦理视频网站| 日韩亚洲欧美一区| 亚洲一级在线观看| 国产精品久久国产三级国电话系列 | 久久久久国产精品午夜一区| 亚洲永久在线观看| 夜夜嗨av一区二区三区四区 | 欧美一区二区视频97| 免费观看在线综合色| 性娇小13――14欧美| 久久国产直播| 美女国内精品自产拍在线播放| 国产日韩在线不卡| 国产欧美精品日韩区二区麻豆天美 | 亚洲精品久久久蜜桃| 米奇777在线欧美播放| 欧美成在线观看| 在线观看中文字幕亚洲| 久久国产精品黑丝| 免费亚洲一区二区| 99视频一区二区| 国产日韩在线看| 另类亚洲自拍| 亚洲天堂成人在线观看| 久久久亚洲国产天美传媒修理工 | 久久午夜电影| 亚洲精品老司机| 亚洲亚洲精品在线观看| 国产亚洲毛片| 欧美激情在线播放| 香蕉尹人综合在线观看| 欧美韩国日本一区| 小处雏高清一区二区三区| 亚洲高清不卡在线| 国产精品高潮呻吟视频| 久久九九久精品国产免费直播 | 亚洲欧美国产高清va在线播| 老巨人导航500精品| 亚洲网站在线看| 在线观看中文字幕不卡| 国产精品福利在线观看| 美女主播精品视频一二三四| 亚洲一区综合| 亚洲国产成人精品久久| 久久er99精品| 中文欧美字幕免费| 亚洲高清在线观看| 国产亚洲精品一区二555| 欧美日韩一区综合| 欧美电影打屁股sp| 在线亚洲一区| 99re66热这里只有精品4| 毛片一区二区| 久久成人免费网| 亚洲欧美日韩国产综合在线| 亚洲国产日韩欧美综合久久| 国产亚洲午夜|