把光線加進3D場景中可以給3D最終的外觀帶來一個巨大的變化。但是這里有很多東西需要思考,同時結果也不會總是和預期的一樣。這篇文章描述怎樣把光線加入一個由JSR184開發的3D的場景中,和怎樣設置一個物體的材質(material)。
在我們開始之前,需要知道一個很重要的事情:添加光線到一個3D場景中對于性能來說是一個代價很高的操作,必須時刻記住。
在JSR184中有4個不同的光線選項。
Ambient(四周):在一個無限的時間點上,光線以分散的形式在環境表面上照射,使光源不可能決定。這種光線的位置和方向不會影響最終的結果。(其實就是物體表面發光,太陽散射)
Directional(方向):舉個真實世界的例子就是太陽光照到物體表面,光線被平均的分散到各個方向。這種光線的位置不會影響最終結果。
Omnidirectional(全方向):這種光線能被認為是一點光,光線被光源平均分配到各個方向,你能通過改變光源的位置來改變最終的結果,但是改變方向不能影響結果。
Spot(斑點):這種光線在已選擇的方向上射出一道錐形的光線,這道錐形光線的寬和強度能改變,而且它的位置和方向能影響3D場景。
一條法線的意思是:相對于平面90度角的矢量。(垂直線)
在JSR184中我們為被用于物體外型上的每一個點輸入一條法線,下面的代碼告訴我們它能實現一個棱錐,必須要記住輸入法線的取值范圍在-127~127的角度之間。
// 棱錐的最高點. x, y, z
short []POINTS = new short[] {
-1, -1, 1, 1, -1, 1, 0, 1, 0, // 前
1, -1, 1, 1, -1, -1, 0, 1, 0, // 右
1, -1, -1, -1, -1, -1, 0, 1, 0, // 后
-1, -1, -1, -1, -1, 1, 0, 1, 0, // 左
-1, -1, 1, 1, -1, 1, 1, -1, -1, // 下右
-1, -1, 1, 1, -1, -1, -1, -1, -1}; // 下左
新聞熱點
疑難解答