簡體   English   中英

是否應該包裝Triangle_Strip?

[英]Is Triangle_Strip supposed to wrap?

我遇到了一段時間前遇到的問題( 網格的VBO不正確:有些三角形是連接的,不應該[2D] ),並且由於我的着色器變得更加復雜,與此相關的問題也很多,所以我需要從根本上解決它!

這是VBO內容:

[0.0, 0.0,
 0.0, 240.0,

 10.0, 0.0,
 10.0, 240.0,

 20.0, 0.0,
 20.0, 240.0,

 30.0, 0.0,
 30.0, 240.0

 and so on up to

 1190.0, 0.0,
 1190.0, 240.0,

 1200.0, 0.0,
 1200.0, 240.0,

 1210.0, 0.0,
 1210.0, 240.0]

因此數組長度為244點* 2坐標= 488個元素。

這是框架的opengl跟蹤

glClearColor(red = 0,100000, green = 0,100000, blue = 0,100000, alpha = 1,000000)
glClear(mask = 16384)
glEnable(cap = GL_BLEND)
glBindBuffer(target = GL_ARRAY_BUFFER, buffer = 2)
glDisableVertexAttribArray(index = 1)
glVertexAttribPointer(indx = 0, size = 2, type = GL_FLOAT, normalized = false, stride = 8, ptr = 0x0)
glUniformMatrix4fv(location = 1, count = 1, transpose = false, value = [0.0025, 0.0, 0.0, 0.0, 0.0, 0.004166667, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0, -1.0, 0.0, 1.0])
glUniform1i(location = 5, x = 0)
glUniform4f(location = 3, x = 0,000000, y = 0,000000, z = 1,000000, w = 0,500000)
glUniform1f(location = 4, x = 2,491089)
glUniform1f(location = 0, x = 1780,000000)
glUniformMatrix4fv(location = 2, count = 1, transpose = false, value = [-100.0, 40.0, 260.0, 430.0, 165.6131, 122.20027, 247.55757, 189.05222, 680.0, 880.0, -268.66666, -268.66666, 126.442535, 1.7712338, 160.0, 160.0])
glDrawArrays(mode = GL_TRIANGLE_STRIP, first = 0, count = 486)
glEnableVertexAttribArray(index = 1)
glDisable(cap = GL_BLEND)
glEnable(cap = GL_BLEND)
glBindBuffer(target = GL_ARRAY_BUFFER, buffer = 3)
glDisableVertexAttribArray(index = 1)
glVertexAttribPointer(indx = 0, size = 2, type = GL_FLOAT, normalized = false, stride = 8, ptr = 0x0)
glUniformMatrix4fv(location = 1, count = 1, transpose = false, value = [0.0025, 0.0, 0.0, 0.0, 0.0, 0.004166667, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0, 1.0, 0.0, 1.0])
glUniform1i(location = 5, x = 0)
glUniform4f(location = 3, x = 0,000000, y = 0,500000, z = 1,000000, w = 0,500000)
glUniform1f(location = 4, x = 2,491089)
glUniform1f(location = 0, x = 1780,000000)
glUniformMatrix4fv(location = 2, count = 1, transpose = false, value = [-60.0, 150.0, 330.0, 550.0, -71.13025, -193.20978, -11.679321, -223.35025, 740.0, 990.0, -268.66666, -268.66666, -394.54395, -270.3169, -160.0, -160.0])
glDrawArrays(mode = GL_TRIANGLE_STRIP, first = 0, count = 486)
glEnableVertexAttribArray(index = 1)
glDisable(cap = GL_BLEND)
eglSwapBuffers

我的着色器有點長且復雜,但是它除了沿Y軸移動具有Y分量不同於0的頂點外什么也沒有做。統一值正確,並且着色器正常工作。

當我使用TRIANGLE_STRIP進行渲染時,屏幕上會顯示將第一個頂點(0,0)與最后一個頂點(1210,???)連接起來的線(???是因為我的着色器將其移動,並且不在240。是的,它應該在原處,但它總是在變化。)

TRIANGLE_STRIP渲染故障

使用LINE_STRIP渲染只是可以確認問題。

LINE_STRIP渲染故障

那么,這是TRIANGLE_STRIP的預期行為嗎? 還是有問題? 閱讀opengl規范時,它似乎不應該包裝,但是可以包裝(在不同的設備中,所以這不是特定的驅動程序問題)

完全找到了解決方案。

我將數組的長度減去2作為要繪制的頂點數。 錯誤是我的頂點數組既包含X坐標又包含Y坐標,因此實際上是繪制的基本體數量的兩倍。

我現在使用array.length / 2,並且一切正常。

順便說一句,當我發現它時,我認為性能會提高。 相反,它沒有發生。

暫無
暫無

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

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