0

iOS 用の 3D 関数プロッターを作成しようとしています。三角形のストリップを使用してグラフをレンダリングすることに成功し、線を介してワイヤーフレームを描画することも実装しました。しかし、24 ビット (または 16 ビットは問題ではありません) の深度バッファーを使用して両方を同時にレンダリングすると、ラインがポリゴンによって部分的に隠され、非常に細く見えるか、完全に消えてしまいます。4xMSAA をオフにしても問題は解決しません。例については、下の画像を参照してください。

部分的に隠れた線の例

線だけを描くだけでも問題なく機能します。線の太さは適切です。線の深度バッファリングを無効にすると、それらも正しく描画されますが、もちろんすべてのポリゴンの上に表示されます (つまり、実際にポリゴンによって隠されている線)。また、ポリゴンの透明度を下げようとしましたが、役に立ちませんでした。ラインを上から見ている限り、ラインの y 座標を少し大きくすると見栄えが良くなり、実際にポリゴンの前に表示されます。

最適なパフォーマンスを得るために、レンダリングの前にすべての頂点データとインデックスを頂点配列に静的に格納します。したがって、私のレンダリング ループは非常に短いです。

- (void)drawRect:(CGRect)rect
{
    glClearColor(1, 1, 1, 1);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    [self.effect prepareToDraw];

    for (NSUInteger i = 0; i < _nVertexArrays; i ++)
    {
        glBindVertexArrayOES(_vertexArrays[i].vertexArray);
        glDrawElements(_vertexArrays[i].mode, _vertexArrays[i].indexCount, GL_UNSIGNED_INT, NULL);
    }
}

ポリゴンとワイヤフレームを同時に適切に表示するにはどうすればよいですか? また、カメラが現在ある場所に線を少し近づけることも考えましたが、OpenGL ES でそれを行う方法がわかりません。また、このシフトがパフォーマンスに影響するかどうかもわかりません。カメラの現在の位置に依存します。線を描く直前に線に動的に変換を適用することは可能ですか?

4

1 に答える 1

2

glPolygonOffsetをチェックしてください。これは、この用途のために特別に作られています。

于 2011-12-26T16:42:51.997 に答える