資源描述:
《14 、、、、 OpenGL --- 透視與光效透視與光效透視與光效透視與光效》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、手機(jī)應(yīng)用平臺軟件開發(fā)14、OpenGL---透視與光效1OpenGL---透視OpenGLES中具有的兩種不同的視口類型。正交(orthogonal)透視(perspective)2OpenGL---透視正交視線永遠(yuǎn)不會交匯而且物體不會改變其大小。沒有透視效果。3OpenGL---透視透視物體會隨著移遠(yuǎn)而越來越小,,視線會在物體移,視線會在物體移離觀察者時最終交匯。這是對真實(shí)視覺的模擬,,人們就是以這種方式,人們就是以這種方式觀察世界的。4OpenGL---透視toprightne
2、ar5OpenGL---透視設(shè)置正交視口通過glOrthof()通知OpenGLES你希望使用正交視口floatratio=_width/_height;//屏幕寬長比//orthographic:gl.glOrthof(-1,//left1,//right-1/ratio,//bottom1/ratio,//top0.01f,//near100.0f);//far設(shè)定視口空間的寬度為兩個單位,沿x軸從-1.0到+1.0。定義空間的X和Y坐標(biāo)的寬高比與視窗的寬高比(也就是全屏?xí)r的寬高比)一樣,確
3、保視口的X和Y坐標(biāo)遵循一樣的比例。6OpenGL---透視“定義空間的X和和和和Y坐標(biāo)的寬高比與視窗的寬高比(也就是全屏?xí)r的寬高比(((也就是全屏?xí)r的寬高比)一樣)))一樣,,,,top確保視口的X和和和和Y坐標(biāo)遵循一樣的比例。。。?!碑?dāng)視野中的三角形長寬比等于height屏幕的長寬比,視覺效果才會更好。righttop=right*(height/width)=right/(width/height)width7OpenGL---透視設(shè)置正交視口定義了near(((遠(yuǎn)(遠(yuǎn)遠(yuǎn)遠(yuǎn)))))和和和和fa
4、r(((近(近近近))))范圍來描述觀察的深度范圍來描述觀察的深度。。。near參數(shù):說明了視口開始的位置。如果我們站在原點(diǎn)處,視口就位于我們的面前,習(xí)慣上使用.01或.001作為正交視口的起點(diǎn)。使得視口處于原點(diǎn)“前方”一點(diǎn)點(diǎn)。far描述觀察的深度,根據(jù)你程序的需要來設(shè)定。floatratio=_width/_height;//屏幕長寬比//orthographic:gl.glOrthof(-1,//left1,//right-1/ratio,//bottom1/ratio,//top0.01f
5、,//near100.0f);//far8OpenGL---透視調(diào)用glOrthof()之后,,我們使用視窗矩形來調(diào)用,我們使用視窗矩形來調(diào)用glViewport()。gl.glViewport(0,0,(int)_width,(int)_height);切換了MatrixMode到GL10.GL_MODELVIEW,,設(shè),設(shè)置OpenGL接受關(guān)于改變model繪制方式的調(diào)用。9OpenGL---透視調(diào)用了glEnable()并使用參數(shù)GL10.GL_DEPTH_TEST。。使。使OpenGL
6、ES檢查對象的z方向的順序。。如果我們沒有。如果我們沒有enable它它,它,,我們將看,我們將看到最后被繪制的對象一直顯示在最前面。。這意味。這意味著著,著,,即使這個物體本來應(yīng)該被更近更大的物體遮,即使這個物體本來應(yīng)該被更近更大的物體遮蓋蓋,蓋,,我們依然可以看到它,我們依然可以看到它。gl.glMatrixMode(GL10.GL_MODELVIEW);gl.glEnable(GL10.GL_DEPTH_TEST);10OpenGL---透視設(shè)置透視視口隨著視線越來越遠(yuǎn),可以看到更廣闊的世
7、界物體隨著遠(yuǎn)離觀察者而變小使用透視時可見空間的形狀稱為錐臺(frustum)11OpenGL---透視視野(fieldofvision)由兩個角度定義的:伸出雙臂手掌合攏伸向前方。你的手臂現(xiàn)在指向你自己錐臺的z軸。現(xiàn)在慢慢分開你的雙臂,定義了一個逐漸增大的角度。這就是用于定義觀察錐臺的兩個角度之一,它定義了視野的寬度。12OpenGL---透視視野(fieldofvision)上下展開你的雙臂,定義了另一個角度。如果你的雙手間距只有三厘米,那么角度將非常小。這稱為窄視野。如果你雙
8、手分開兩米,視野的寬度變得很大。這就是所謂寬視角(廣角)。13OpenGL---透視設(shè)置透視視口我們選擇一個中間值,45°。使用這個值,我們怎樣計算我們的觀察錐臺?想象一下,從頂部看錐臺是什么樣子。下面是示意圖:45°14OpenGL---透視設(shè)置透視視口正切函數(shù)定義為直角對邊與相鄰邊的比率。錐臺遠(yuǎn)端寬度的一半就是視野角度正切的一半。將此值乘以near值,就可以得到right值。rightright值取反就是left。nearright=near*tan