2011-12-02 56 views
2

我試圖實現以下算法(打破繪畫小三角形),但我找不到了,說明它正確, 網的任何教程大部分事情我」已經發現在理論上解釋它,並且由於樣本包含許多其他內容,所以樣本太複雜而難以理解。實現詳細算法的級別對OpenGL

如果你能指出我它是如何做或類似的東西,我會比感激更多。

+5

這是一個相當複雜的過程,圖形編程是一個充滿祕密的世界。 –

+2

「打破繪畫成小三角形」是什麼意思? – Stiefel

+0

您是不是故意問:「我有一個多邊形網格,並且有多個多邊形網格,我想超範例來創建更詳細的版本以便從遠處查看」? –

回答

4

從您的評論,它看起來像你調用glVertex一萬次你正在使用過時的OpenGL函數,這可能是爲什麼你的程序正在運行,所以慢慢地,這意味着。

早在一天(不,我真的知道,我是20),您可以使用glVertex,一次一個指定的頂點,每幀一次。這被稱爲即時模式。這將頂點信息傳遞給每個頂點每幀一次的OpenGL內存(通常爲圖形卡)。所以如果你有20萬個頂點,就像你說的那樣,你每幀至少要做200k次(如果你使用索引,你可以把它減少到20萬),但是你必須傳遞一些其他的東西。

我懷疑所有這些頂點都在改變每一幀。我敢打賭,許多甚至所有人都保持相同的多幀。所以你可以把它們放到一個叫做VBO(頂點緩衝區對象)的地方,這意味着你將所有這些頂點信息存儲在OpenGL內存中(如果你有一個,也可能是gfx卡)不得不在每一幀都傳輸所有這些東西。

一開始你很難纏住你的頭。但基本上稱之爲glVertex一百萬次就像是在每一幀都這麼說:「這是我需要你畫的一大堆信息。」而你在每一幀都會說同樣的話。使用頂點緩衝區對象就像這樣說過一次:「這裏有一堆信息」,然後每幀說出一次:「請記住我給你一段時間的信息?畫出它。」

這顯然更快,因爲您不必每幀都傳遞信息。

一個缺點是,如果你需要改變的頂點,這是有點麻煩,因爲數據是由你不再控制。在這種情況下,您必須獲取vbo內容的內存映射並進行修改,而不是傳遞新數據。或者你可以隨時刪除它並重新生成它,但是如果你每幀都這樣做,那麼在直接模式下使用vbo就沒有意義了。

我不會發布關於VBO的任何代碼,因爲那麼這個職位將獲得4倍的時間比它已經是了。我想我已經給了你很多關鍵字,你可以谷歌找到更多的信息。這裏有幾個,我會建議開始只是爲了瞭解主題(分別搜索他們的):

頂點緩衝對象,指數,固定管線,着色器

如果您有執行任何的任何問題我提到的東西,那麼我建議你開一個新的具體的問題。

祝你好運!

+0

偉大的評論確實!我只是想提到,即時通訊並沒有計劃每改變一次我的數據幀,這都會嚴重影響用戶,我的程序實際上會計算Mandelbrot集(見分形),並在屏幕上打印一個3d模型,如果用戶決定放大每隔0.3秒就會有數據快速變化,然後我猜VBO會無用,但如果他決定「探險家」設置,那麼VBO就沒關係了...... –