日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenGL中的几何体实例化(OpenGL Geometry Instancing)

發布時間:2023/11/30 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenGL中的几何体实例化(OpenGL Geometry Instancing) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??????在GPU Gems 2中有一篇文章是專門介紹幾何體實例化的,不過它是基于DirectX的。經過多年的發展,OpenGL在幾何體實例化方面也做出了改進,于2008年在OpenGL3.0中正式引入實例化函數,該函數只被NVIDIA 8系列以上顯卡支持。

??????幾何體實例化,是通過對具有相同頂點數據的幾何體,賦予不同的空間位置、顏色或紋理等特征,從而創造出不同實例對象的技術。尤其適合于草地、石塊、數目、士兵群等對象的繪制。它的好處在于,只需傳遞一次單個模型的頂點數據(或者說調用一個批次的繪制指令),再傳遞不同對象的特征數據,就能實現多個對象的繪制。

??????最早,OpenGL是不支持幾何體實例化的。它通過即時模式,調用glDrawElements等函數,能較高效的實現多個對象的繪制。然而,這還是會造成占用大量的VBO存儲空間和數據傳輸帶寬。

??????在GPU可編程后,通過設置全局統一參數glUniformMatrix4fvARB來傳遞對象的特征數據給Vertex Shader,來間接實現實例化。然而這還是不能夠減少繪制指令的調用次數。

??????而后,NVIDIA提出了偽實例化(pseudo-instancing)的方法,利用頂點數據指令,如glColor3f、glTexCoord、glMultiTexCoord等,將對象的特征數據傳遞給Vertex Shader。雖然這同樣不能減少繪制指令的調用次數,但它卻比方法2提高了2~3倍的效率。原因有2:一是方法2中的全局統一參數函數設置的是GPU寄存器,或者說是改變Vertex shader當前的全局處理狀態,很顯然將等待當前GPU正在執行的Vertex process完成后才能返回,即需要CPU等待GPU完成該對象的繪制,存在嚴重的效率問題[1];二是全局統一參數函數設置的GPU寄存器是全局共享的,Vertex Shader拜訪該寄存器所耗費的時間顯然要多于拜訪本地寄存器(由頂點數據指令設置的)所花費的時間。

??????最后,ARB終于通過了實例化的函數ARB_draw_instanced,有兩個:DrawArraysInstancedARB、DrawElementsInstancedARB。在GLSL中,通過instance ID獲取實例的ID,加以控制。這兩個函數不能用在顯示列表中。

??????JeGX對以上四種方法進行了測試,有興趣的童鞋,可以點擊鏈接去看看。測試的結論是[2]

??????1、在OpenGL中,每個實例的頂點數越小,實例化帶來的效率提升越明顯。因此要將實例模型的面數和頂點數控制到最小

??????2、新的實例化函數,雖然減少了指令的個數,但當實例模型的面數和頂點數比較大的時候,好像沒有帶來太大的性能改變。

??????我曾經把特征數據編碼進頂點紋理,通過Vertex Shader來獲取,實現實例化,然而效果好像并不是非常明顯(相較于第2種方法而言)。目前還沒有試驗第4種方法,希望以后有時間的時候來試驗一下。

?

參考文獻:

1、http://www.cnitblog.com/linghuye/archive/2008/03/17/41049.html

2、http://www.ozone3d.net/blogs/lab/?p=87

3、http://www.gamerendering.com/2008/10/21/instancing/

4、http://www.qiannao.com/space/show/jamesclarke/glsl_pseudo_instancing.pdf/.page

5、http://www.opengl.org/registry/specs/ARB/draw_instanced.txt

轉載于:https://www.cnblogs.com/jamesclarke/archive/2009/07/08/1519462.html

總結

以上是生活随笔為你收集整理的OpenGL中的几何体实例化(OpenGL Geometry Instancing)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。