正文

OpenGL 簡 介(3)

精通C#游戲編程 作者:(英)斯庫勒


 

DirectX和OpenGL都是非常優(yōu)秀的圖形庫。DirectX工作在Microsoft平臺上,而OpenGL可以應(yīng)用到更加廣泛的平臺上。DirectX更新得更快,意味著它可以利用最新的圖形功能。OpenGL的更新較慢,最新的圖形功能只能通過一個不太方便的擴展機制使用。OpenGL這種緩慢的更新有一個明顯的好處,即接口很少發(fā)生改變,所以多年前編寫的代碼仍然可以使用最新的OpenGL版本。DirectX的每個新版本都會改變接口,所以無法維持兼容性,必須調(diào)整和修改較老的代碼才能使它們利用DirectX的新版本。

通過Managed DirectX庫,可以在C#中使用DirectX,但遺憾的是,官方不再支持或更新這些庫。Managed DirectX已經(jīng)被Microsoft的XNA游戲創(chuàng)建庫替代。XNA使用DirectX,但它是一個更高層的框架,用于快速創(chuàng)建游戲原型和開發(fā)游戲。SlimDX是一個針對DirectX開發(fā)的獨立的C# API,可以作為Managed Directx的一個不錯的替代品。

2.1  OpenGL的架構(gòu)

OpenGL是一個C風(fēng)格的圖形庫。C風(fēng)格是指OpenGL中沒有類或?qū)ο?,而只有大量的函?shù)。OpenGL在內(nèi)部就是一個狀態(tài)機。函數(shù)調(diào)用會修改OpenGL的內(nèi)部狀態(tài),這又會影響OpenGL的行為和在屏幕上渲染多邊形的方式。OpenGL是狀態(tài)機這個事實會帶來一些問題,例如在代碼中無意間修改了其他某個部分的狀態(tài),從而導(dǎo)致出現(xiàn)bug。因此,留意哪些狀態(tài)發(fā)生改變十分重要。

2.1.1  頂點:3D圖形的基礎(chǔ)

OpenGL中的基本單元是頂點。簡單來說,頂點就是空間中的一個點。在這些點上可以附加其他信息,如它如何映射到紋理,是否具有一定的重量或顏色等,但是最重要的信息是它的位置。

游戲會把大量的時間用于發(fā)送OpenGL頂點,或者告訴OpenGL以特定的方式移動頂點等。游戲可能首先告訴OpenGL它將要發(fā)送的全部頂點會構(gòu)成三角形。此時,OpenGL將使用線把它收到的每三個頂點連接起來以創(chuàng)建一個多邊形,然后可能還會使用紋理或顏色填充多邊形的表面。

現(xiàn)代圖形硬件非常擅長處理大量的頂點,把它們構(gòu)成多邊形,然后渲染到屏幕上。這個從頂點到屏幕的過程叫做流水線(pipeline)。流水線負(fù)責(zé)定位頂點和提供光照,以及進行投影變換。這個過程將把收到的3D數(shù)據(jù)變換為2D數(shù)據(jù),以便將其顯示到屏幕上。投影變換聽起來有點復(fù)雜,但是幾個世紀(jì)以來,畫家和藝術(shù)家們一直在利用這種變換,在平展的畫布上繪制出他們周圍的世界。

就算現(xiàn)代的2D游戲也是使用頂點創(chuàng)建的。2D精靈(sprite)由兩個三角形構(gòu)成,這兩個三角形形成了一個四邊形(quad)。在給四邊形提供紋理后,它就成為了精靈。2D游戲使用一種特殊的投影變換,忽略了頂點中的所有3D數(shù)據(jù),因為2D游戲中并不需要這些數(shù)據(jù)。

2.1.2  流水線

流水線的流程如圖2-3所示。這個流水線叫做固定功能流水線(fixed function pipeline)。當(dāng)程序員為這種流水線提供輸入后,所有的功能已被固定,無法修改。例如,在像素處理階段很容易向屏幕上添加藍色調(diào),但是在固定功能流水線中,程序員無法直接控制這個階段。


上一章目錄下一章

Copyright ? 讀書網(wǎng) hotzeplotz.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號