1

GLKitを使用して半透明のポリゴンを描画しようとしていますが、うまくいきません。ですから、OpenGLの標準実装ではサポートされていないことがわかっているので、そもそもGLKitに半透明のポリゴンを含めることさえ可能かどうか疑問に思いました。ただし、カスタムシェーダーを使用して模倣できます。ただし、GLKitは独自のシェーダーをコンパイルするため、引き続きGLKitを使用するか、独自のカスタムシェーダーを使用するかを知る必要があります。私のコードは以下の通りです:

// setup states
glEnable(GL_BLEND);
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

self.effect.texture2d0.enabled   = GL_FALSE;
self.effect.colorMaterialEnabled = GL_TRUE;
self.effect.transform.modelviewMatrix = self.modelMatrix;

glEnableVertexAttribArray(GLKVertexAttribPosition);
glEnableVertexAttribArray(GLKVertexAttribColor);

[self.effect prepareToDraw];

// draw triangles
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(LineVertex), &_vertices[0].pos);
glVertexAttribPointer(GLKVertexAttribColor, 4, GL_FLOAT, GL_FALSE, sizeof(LineVertex), &_vertices[0].color);

glDrawArrays(GL_TRIANGLES, 0, _vertexCount);

前もって感謝します。

4

2 に答える 2

1

問題は、以前のどこかにglEnable(GL_DEPTH_TEST)があり、アルファ0.5で2つのポリゴンを停止して、アルファ1.0との交差を作成したことが判明しました。

于 2012-09-17T22:49:38.657 に答える
1

あなたの質問は紛らわしいですが、透明なオブジェクトが互いに重なり合っているように聞こえますか?その場合は、使用してください

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

あなたがそこに得たものの代わりに。

そして、深度テストやステンシル テスト (可能性は低いですが可能性があります) が描画を妨げていないことを確認します...

于 2012-09-16T01:58:46.367 に答える