1

しばらく前に回避した問題に直面しています(メッシュの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の仕様を読むと、ラップすべきではないことがわかりますが、ラップする必要があります(異なるデバイスでは、特定のドライバーの問題ではありません)

4

1 に答える 1

0

完全に解決策を見つけました。

配列の長さから2を引いたものを、描画する頂点の数として渡していました。エラーは、私の頂点配列がX座標とY座標の両方を保持しているため、実際には描画するプリミティブの数の2倍の長さでした。

現在、array.length / 2を使用していますが、すべて正しく機能します。

ところで、それを知ったとき、パフォーマンスが上がると思いました。代わりにそれは起こりませんでした。

于 2013-03-25T17:09:30.123 に答える