0

glDepthFunc(GL_ALWAYS); を追加することで解決しました。

ハイトフィールドで 2 つのテクスチャをブレンドしようとしていglDrawElementsます。Normalpointer と vertexpointer データは同じですが、TexCoordPointer は 2 つのテクスチャで異なります。どの BlendFunc を試しても、texture_two の大部分は透明ですが、表示されるテクスチャは常に 1 つだけです。gl_blendglDrawElementsで動作しますか、それとも間違っていますか?

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glBlendEquation(GL_FUNC_ADD);
glDepthFunc(GL_ALWAYS);

glNormalPointer(GL_FLOAT, 0, normals);
glVertexPointer(3, GL_FLOAT, 0, vertices);

glTexCoordPointer(2, GL_FLOAT, 0, texture_ind_one);
glBindTexture(GL_TEXTURE_2D, texture_one);
glDrawElements(GL_TRIANGLES, indicies_num, GL_UNSIGNED_INT, indices);

glNormalPointer(GL_FLOAT, 0, normals);
glVertexPointer(3, GL_FLOAT, 0, vertices);

glTexCoordPointer(2, GL_FLOAT, 0, texture_ind_two);
glBindTexture(GL_TEXTURE_2D, texture_two);
glDrawElements(GL_TRIANGLES, indicies_num, GL_UNSIGNED_INT, indices);

どうもありがとうございました!

4

1 に答える 1

3

同じ深さで2回描画しているため、glDepthFunc「等しい」(おそらく)を含むものを使用して適切な深さ関数を設定する必要があります。GL_LEQUAL

フラグメント シェーダー内でテクスチャを自分でブレンドすることも検討できます。

于 2015-05-17T15:52:10.460 に答える