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

天行健 君子當(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>
            亚洲一级免费视频| 国产午夜精品久久久久久免费视| 亚洲高清免费在线| 亚洲新中文字幕| 亚洲激情成人在线| 国内欧美视频一区二区| 美女精品网站| 欧美一区二区三区视频| 亚洲精品免费一区二区三区| 国内精品一区二区三区| 韩日在线一区| 亚洲精品在线免费观看视频| 亚洲精品一区二区在线| 一区二区欧美激情| 久久精品国产一区二区三区免费看| 欧美成在线观看| 欧美国产日韩一区二区在线观看| 欧美va天堂va视频va在线| 欧美日韩第一页| 一区二区亚洲| 亚洲自拍啪啪| 亚洲成人资源网| 香蕉成人伊视频在线观看| 欧美精品尤物在线| 激情欧美日韩一区| 一区二区激情小说| 嫩草伊人久久精品少妇av杨幂| 日韩视频在线观看国产| 久久亚洲视频| 在线观看欧美日韩国产| 久久激情五月丁香伊人| 99热精品在线| 欧美三级网址| 亚洲视频电影图片偷拍一区| 欧美激情精品久久久久久大尺度 | 国产精品高清在线| 亚洲卡通欧美制服中文| 亚洲国产成人高清精品| 午夜精品福利一区二区蜜股av| 欧美日韩国产一区精品一区| 一本大道久久a久久精品综合| 免费看亚洲片| 欧美大片在线看免费观看| 91久久久精品| 亚洲人成在线播放网站岛国| 欧美二区不卡| 亚洲一区二区三区国产| 亚洲一区在线观看视频| 国产精品99久久久久久久女警| 欧美电影免费| 亚洲欧美另类国产| 欧美自拍丝袜亚洲| 亚洲欧洲日夜超级视频| 夜久久久久久| 一区视频在线| 亚洲美女在线视频| 国产欧美日本在线| 亚洲电影av| 狠狠综合久久av一区二区小说| 亚洲国产日韩欧美在线99| 国产精品日韩精品| 亚洲电影专区| 国模精品一区二区三区| 99成人在线| 亚洲日韩欧美视频一区| 欧美影片第一页| 午夜精品久久久久久久白皮肤| 蜜臀久久99精品久久久久久9 | 欧美三日本三级少妇三2023| 久久精品综合网| 国产精品综合色区在线观看| 日韩亚洲国产精品| 99综合在线| 欧美日韩久久精品| 9国产精品视频| 日韩亚洲精品在线| 欧美大片免费观看| 欧美激情影音先锋| 亚洲欧洲精品一区二区三区波多野1战4| 亚洲视频欧美在线| 亚洲女性裸体视频| 国产精品一区二区男女羞羞无遮挡| 亚洲精品激情| 国产精品一二一区| 亚洲制服av| 可以看av的网站久久看| 亚洲国产精品黑人久久久| 欧美jizz19性欧美| 日韩一级精品| 欧美在线播放| 亚洲经典一区| 国产欧美日韩高清| 麻豆九一精品爱看视频在线观看免费| 老妇喷水一区二区三区| 最新日韩av| 国内精品美女在线观看| 欧美精品一区二区三区视频| 亚洲永久免费av| 亚洲精品自在在线观看| 葵司免费一区二区三区四区五区| 日韩一级精品视频在线观看| 国产精品免费福利| 欧美黄色网络| 欧美成人蜜桃| 久久久久国产精品一区二区| 一区二区三区四区五区视频| 久久全球大尺度高清视频| 一区二区三区**美女毛片| 亚洲高清不卡| 亚洲电影在线看| 极品尤物久久久av免费看| 国产精品视频免费在线观看| 欧美理论大片| 欧美日韩国产片| 欧美日韩激情网| 欧美天天在线| 国产美女诱惑一区二区| 国产精品一区视频| 国产麻豆9l精品三级站| 国产九九视频一区二区三区| 国产精品亚洲成人| 国产农村妇女精品一二区| 国产精品一二| 夜夜夜久久久| 亚洲国语精品自产拍在线观看| 欧美不卡一区| 91久久黄色| 在线亚洲伦理| 久久国产精品久久精品国产| 久久婷婷久久| 国产精品成av人在线视午夜片| 国产精品高潮久久| 国产自产在线视频一区| 亚洲七七久久综合桃花剧情介绍| 亚洲国产精品999| 亚洲一区免费视频| 欧美激情日韩| 午夜精品免费在线| 欧美激情国产日韩| 精品99一区二区三区| 一区二区日韩欧美| 亚洲国产第一| 久久综合九色九九| 国产免费观看久久| 亚洲视频免费在线观看| 欧美大片在线观看| 久久精品2019中文字幕| 国产精品久久久久久av下载红粉 | 激情偷拍久久| 亚洲一区成人| 亚洲精品亚洲人成人网| 久久精视频免费在线久久完整在线看| 欧美精品一区二区三区视频| 伊人成人在线视频| 男同欧美伦乱| 欧美激情欧美激情在线五月| 亚洲三级电影全部在线观看高清| 老司机午夜精品视频| 久久久久国产精品厨房| 在线观看不卡| 亚洲精品乱码久久久久| 欧美视频一区二区三区| 欧美高清在线视频观看不卡| 亚洲高清免费在线| 亚洲精品老司机| 国产精品日韩二区| 欧美大片18| 欧美亚一区二区| 欧美一区二区福利在线| 久久这里只有| 欧美一级久久| 欧美freesex交免费视频| 午夜亚洲福利| 欧美黑人多人双交| 午夜在线视频观看日韩17c| 久久青草欧美一区二区三区| 亚洲视频在线看| 久久不见久久见免费视频1| 亚洲人成亚洲人成在线观看图片 | 亚洲精品婷婷| 亚洲欧美日韩一区二区三区在线观看 | 中文高清一区| 久久久最新网址| 欧美中文字幕在线视频| 欧美精品福利| 亚洲精品男同| 亚洲剧情一区二区| 欧美暴力喷水在线| 美日韩精品免费| 国内精品美女在线观看| 亚洲欧美精品伊人久久| 午夜视频在线观看一区| 国产精品v欧美精品v日韩精品| 亚洲精品乱码久久久久久黑人| 亚洲福利一区| 欧美日产国产成人免费图片| 欧美激情无毛| 一区二区三区欧美成人| 欧美日韩亚洲高清| 亚洲一区在线播放|