簡體   English   中英

如何在OpenGL中渲染非平凡的粒子

[英]How to render non trivial particles in OpenGL

我有一個粒子系統,其中位置和各種屬性存儲在頂點緩沖區對象中。 這些值由CUDA內核不斷更新。 目前我只是使用GL_POINTS作為扁平圓圈來渲染它們。 我感興趣的是渲染這些粒子更像是3D動畫鳥模型。 我想弄清楚最好的方法是什么。 為了交談,我們可以說鳥模型的動畫由3幀組成(翅膀的位置,不是什么)

我可以看到將模型加載到顯示列表中並在翻譯,旋轉等矩陣中循環所有粒子,然后調用顯示列表。 這似乎不是一種理想的方法,因為它需要將所有粒子數據從gpu帶到主機,只是為了將矩陣運算推回GPU(除非我可以從cuda內核調用繪圖函數? ?)

我不太了解着色器,他們能夠處理這樣的事情嗎?

在這一點上,我主要是尋求關於追求什么途徑的建議,但如果你知道任何涉及這個主題的文章或教程,那就是贊譽。


我正在使用C ++在Windows 7 64bit上本地使用OpenGL。 我沒有使用GLUT

您可能想要使用:EXT_draw_instanced。 我從來沒有真正使用過Instancing,但是大多數現代的GPUS(GF6和我認為)允許你為GPU提供一個模型和一個點列表,並讓它在每個點上繪制模型。

我會谷歌更多信息,看看我想出了什么....

這是官方規范,看起來他們有一個教程。

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

你需要有創意去做那樣的事情。 如果您使用CUDA計算位置和旋轉到2 3組件浮動紋理,然后隨每個頂點發出“索引”並按每個幾何實例遞增1,那么您可以編寫加載紋理的着色器然后使用頂點着色器紋理查找以從2個紋理中選擇相關像素並構建變換矩陣。 然后,您可以通過已構建的變換矩陣變換網格的頂點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM