2011-12-26 9 views
0

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

example of partially obscured lines

だけで正常に動作 - 行がちょうど適切な厚さを有しています。ラインのデプスバッファリングを無効にすると、正しく描画されますが、もちろんそれらはすべてのポリゴンの上に表示されます(つまり、実際にポリゴンによって隠されているライン)。私はポリゴンの透明度を無駄にすることも試みました。線の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でこれを行う方法はわかりません。パフォーマンスに影響するかどうかはわかりません。カメラの現在位置に依存します。それを描画する直前に線に動的に変形を適用することは可能ですか?

答えて

2

チェックアウトglPolygonOffsetこれは特にこの用途のために作られています。

+0

これはトリックでした!どうもありがとう!今私はそれのための最適なパラメータを見つける必要があります。 – MrMage

関連する問題