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

天行健 君子當(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,美國計(jì)算機(jī)協(xié)會的圖形專業(yè)組)把四元數(shù)引入計(jì)算機(jī)圖形處理領(lǐng)域。

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

(1)骨骼動畫(skeletal animation)

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

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

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

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

(2)一些操作在視覺上會顯得更為平滑,比如可以在兩個(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)代碼卻簡潔得多,主要改動代碼如下:

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);
}

在該示例程序中,通過用戶輸入,每一幀都對飛機(jī)模型進(jìn)行重新定位,不斷改變飛機(jī)模型在空間中的位置或姿態(tài),如果每兩幀間的時(shí)間間隔足夠小,則感到飛機(jī)模型位置或姿態(tài)的變換是連續(xù)的,也就形成了連續(xù)的動畫,實(shí)際上這就是三維動畫的基本原理,通過不斷改變場景中各物體的位置和姿態(tài)使各物體運(yùn)動起來。為了保證動畫的連續(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) 評論(1)  編輯 收藏 引用

評論

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

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


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


公告

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

隨筆分類(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>
            亚洲伊人色欲综合网| 久久国产一二区| 亚洲香蕉视频| 亚洲精品社区| 久久久蜜臀国产一区二区| 亚洲欧美在线免费观看| 欧美日韩国产综合视频在线| 欧美成人激情视频| 精品成人乱色一区二区| 午夜精品视频网站| 亚洲欧美美女| 国产精品久久二区二区| 一本大道久久a久久精二百| 亚洲精品午夜| 欧美高清成人| 亚洲激情电影在线| 亚洲美女av网站| 美女图片一区二区| 亚洲成人资源网| 日韩午夜激情av| 欧美日韩国产91| 伊人久久婷婷色综合98网| 欧美在线欧美在线| 久久免费国产精品| 一本一本大道香蕉久在线精品| 国内精品视频666| 久久精品一二三区| 久久亚洲午夜电影| 1204国产成人精品视频| 久久久久久网站| 欧美成人免费网| 欧美亚洲成人免费| 艳妇臀荡乳欲伦亚洲一区| 亚洲深夜福利在线| 亚洲国产精品精华液2区45| 亚洲免费av电影| 欧美日韩国产综合视频在线观看中文| 亚洲精品久久久久中文字幕欢迎你 | 最新精品在线| 午夜精品www| 日韩一区二区精品视频| 欧美日韩免费观看一区=区三区| 久久久国产午夜精品| 一色屋精品视频在线观看网站| 免费观看日韩| 亚洲免费大片| 久久久国产午夜精品| 亚洲片区在线| 欧美日韩在线一区二区| 欧美中文在线免费| 亚洲精美视频| 欧美在线观看视频| 最新亚洲一区| 国产精品日韩一区| 六月丁香综合| 亚洲欧美日韩精品久久| 亚洲电影在线播放| 午夜国产精品影院在线观看 | 国产精品99久久久久久久久久久久| 午夜精品一区二区在线观看| 欧美一区二区三区免费观看| 欧美风情在线观看| 亚洲女人小视频在线观看| 国产一区二区三区黄视频| 欧美男人的天堂| 欧美伊人精品成人久久综合97| 亚洲大片免费看| 亚洲欧美视频在线观看| 影音国产精品| 国产精品久久久久毛片大屁完整版| 欧美一区1区三区3区公司| 91久久国产综合久久蜜月精品 | 亚洲精品一区二区三区蜜桃久 | 欧美91视频| 欧美一级一区| 夜夜精品视频| 亚洲电影下载| 久久久天天操| 午夜精品99久久免费| 亚洲激情校园春色| 国产热re99久久6国产精品| 欧美日韩精品久久久| 免费视频最近日韩| 久久亚洲国产精品日日av夜夜| 亚洲一区二区三区精品在线| 91久久综合| 日韩午夜av在线| 国产精品区一区二区三区| 欧美国产第一页| 久久久久久久久久看片| 亚洲综合色在线| 一本色道久久综合亚洲精品不| 亚洲高清视频在线| 女女同性精品视频| 久久久久久伊人| 久久精品卡一| 欧美在线播放高清精品| 亚洲一区二区三区在线视频| 日韩亚洲欧美高清| 亚洲第一精品夜夜躁人人爽| 国产亚洲欧洲| 国产欧美在线观看一区| 国产精品久久久久久久久果冻传媒 | 欧美激情国产高清| 美女国产一区| 老司机一区二区三区| 麻豆91精品| 蜜桃伊人久久| 欧美寡妇偷汉性猛交| 欧美激情欧美狂野欧美精品| 欧美激情精品久久久六区热门| 欧美成人免费在线| 亚洲精品国产精品国自产在线 | 亚洲视频在线一区| 亚洲欧美日本国产有色| 亚洲欧美日韩视频二区| 午夜亚洲精品| 久久国产综合精品| 久久一区中文字幕| 欧美a级片一区| 欧美精品福利| 国产精品www色诱视频| 国产精品久久999| 国产日韩欧美二区| 激情久久综合| 亚洲激情视频在线| 中日韩美女免费视频网站在线观看| 国产精品99久久久久久久vr| 午夜久久福利| 麻豆视频一区二区| 亚洲日本成人在线观看| 中文国产亚洲喷潮| 久久福利一区| 欧美成人中文字幕| 国产精品福利在线| 国产主播一区二区三区四区| 亚洲电影在线| 亚洲无限av看| 久久精品三级| 亚洲国产成人av在线| 亚洲精品久久嫩草网站秘色 | 国产字幕视频一区二区| 激情综合色综合久久| 国产资源精品在线观看| 亚洲精品一区二区三区樱花| 亚洲一区二区欧美| 欧美一区二区在线免费观看| 欧美波霸影院| 亚洲精品久久久久久下一站| 欧美一级淫片aaaaaaa视频| 久久综合中文字幕| 国产精品乱子久久久久| 亚洲黄色天堂| 亚洲视频网站在线观看| 久久中文精品| 亚洲国产视频a| 亚洲女同精品视频| 久热精品视频在线| 国产精品久久久久影院色老大| 欧美日韩1区2区| 欧美午夜一区二区| 久久国产免费看| 欧美日韩成人综合在线一区二区| 欧美激情无毛| 韩国av一区二区三区| 一本色道久久加勒比精品| 午夜精品免费视频| 亚洲第一网站免费视频| 一本色道久久综合一区| 免费h精品视频在线播放| 欧美性jizz18性欧美| 亚洲国产三级网| 亚洲欧美网站| 日韩亚洲欧美在线观看| 亚洲午夜视频在线| 欧美久久九九| 亚洲成色777777女色窝| 亚洲一区二区三区影院| 亚洲国产激情| 久久大香伊蕉在人线观看热2| 欧美性猛交99久久久久99按摩| 永久91嫩草亚洲精品人人| 欧美在线视频a| 欧美激情一区二区| 久久精品欧美日韩精品| 国产网站欧美日韩免费精品在线观看 | 午夜精品久久久99热福利| 久久综合久久久| 国产午夜精品在线观看| 在线播放日韩专区| 久久亚洲电影| 欧美有码在线观看视频| 欧美图区在线视频| 亚洲图片欧美午夜| 亚洲第一毛片| 久久综合久久久久88| 国产欧美综合在线| 久久精品女人| 欧美电影免费观看大全| 久久久噜噜噜久久中文字免|