這里添加了另外一個(gè)補(bǔ)間。該補(bǔ)間使精靈的透明度從0逐漸變?yōu)橥耆煌该?。這是淡入文本的一種很好的方法。精靈的位置也可以通過補(bǔ)間改變。嘗試使用補(bǔ)間,將精靈從屏幕外移動到屏幕的中央。另外一個(gè)很好的示例是將精靈的透明度從0變化為1,然后引發(fā)另一個(gè)補(bǔ)間,將透明度從1變化為0。這些函數(shù)可以逐個(gè)調(diào)用,使補(bǔ)間循環(huán)執(zhí)行。
8.5 矩陣
圖形編程中到處會用到矩陣。矩陣有很多種應(yīng)用,但是本節(jié)將只關(guān)注與圖形和游戲編程有關(guān)的那一部分。
矩陣是一種數(shù)學(xué)結(jié)構(gòu),為描述或者執(zhí)行3D模型或者由四方形構(gòu)成的精靈上的眾多操作提供了一種便捷的方法。這些操作包括變換(在3D空間內(nèi)移動模型)、旋轉(zhuǎn)、縮放、偏航(使形狀“靠”向特定的方向)和投影(例如,將3D空間中的點(diǎn)轉(zhuǎn)換到2D空間中的點(diǎn))。許多這樣的操作都可以手動完成,例如,精靈類已經(jīng)通過把向量添加到每個(gè)頂點(diǎn)位置而執(zhí)行了平移。
與向量相比,矩陣在執(zhí)行這類操作時(shí)有幾個(gè)優(yōu)勢。實(shí)現(xiàn)不同操作的矩陣可以相互結(jié)合,得到單個(gè)矩陣,該矩陣定義了這些操作的組合。例如,一個(gè)矩陣將模型旋轉(zhuǎn)90°,一個(gè)矩陣將模型放大兩倍,一個(gè)矩陣將模型向左移動兩英里,這幾個(gè)矩陣可以結(jié)合成一個(gè)同時(shí)完成所有操作的矩陣。矩陣乘法可以實(shí)現(xiàn)這種操作,即將多個(gè)矩陣相乘,得到的結(jié)果矩陣是所有操作的組合。
組合操作并不是矩陣唯一的優(yōu)勢。矩陣可以求出逆矩陣,它執(zhí)行的操作與原矩陣執(zhí)行的操作相反。如果創(chuàng)建一個(gè)繞Z軸旋轉(zhuǎn)5? 的旋轉(zhuǎn)矩陣,然后對一個(gè)模型應(yīng)用該矩陣,那么通過對矩陣求逆矩陣,然后將這個(gè)逆矩陣應(yīng)用到模型上,可以使模型返回到原來的位置。通過將模型的每個(gè)頂點(diǎn)與矩陣相乘,可以將矩陣應(yīng)用到模型上。
8.5.1 矩陣的定義
矩陣是數(shù)值組成的網(wǎng)格。與向量類似,矩陣也可以有多個(gè)維。我們定義的向量的維數(shù)為3,其中的3個(gè)維度分別是X、Y和Z。在3D圖形學(xué)中,最常用的矩陣是4×4矩陣,如圖8-21所示。