2012-02-17 14 views
3

を働いていない私はとフォーマットを設定します。OpenGLのデプステストが

次にinitializeGL深度テストをオンに設定しました。

void VoxelEditor::initializeGL() 
{ 
    glClearDepth(2000.0);         // Enables Clearing Of The Depth Buffer 
    glEnable(GL_DEPTH_TEST);       // Enables Depth Testing 
    glDepthFunc(GL_LESS);        // The Type Of Depth Test To Do 
    glShadeModel(GL_SMOOTH);       // Enables Smooth Color Shading 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations 
} 

深度バッファをクリアします。

void VoxelEditor::paintGL() 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    draw(); 
} 

私はそれが少ない頂点で動作するために使用覚えているので、それは私がデプスバッファが処理するにはあまりにも多く使用していること(?)かもしれません。 私は32 * 32 * 32のボクセルを持っています。これらのボクセルはほとんどの時間の半分で描画されていますので、98304四分の一です。

しかし、深度テストはまだ動作せず、実行順にクワッドが表示されます。

+0

glClearDepth()とglDepthFuncを組み合わせて使用​​することはできません。 glClearDepth()を削除しようとするとどうなりますか? – ixM

+0

いいえ、動作しません。 – RobotRock

+0

私はglDepthRange *を0から1まで追加しようとしましたが、それでも何も変わりません:S – RobotRock

答えて

1

このように、深度バッファーを処理するには多すぎるかもしれません(?)。

深度バッファは、頂点を無視します。見えるのは入ってくる断片だけで、どれくらいの数であっても問題ありません。

void VoxelEditor::initializeGL() 
{ 
    glClearDepth(2000.0); // Enables Clearing Of The Depth Buffer 

このラインはクリアを有効にしません。深度バッファがクリアされる値を設定します。値は0〜1の範囲内でなければなりません。クリアー深度は、正規化されたデバイス座標、すなわち、モデルビュー、投影および均質除算が適用された後のものである。デフォルト値はありません、それはないです何ではありません。1.

glEnable(GL_DEPTH_TEST); // Enables Depth Testing 
    glDepthFunc(GL_LESS);  // The Type Of Depth Test To Do 
    glShadeModel(GL_SMOOTH) // Enables Smooth Color Shading 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations 

です。パースペクティブは単なる線形変換であり、常に同じように動作します。つまり、品質を向上させるためにテクスチャ座標を別の方法で補間することができます。

} 

彼らは何を初期化していないので、私はいつも、描画機能でこれらの呼び出しを置くことをお勧めします。彼らは描画状態を設定します。 OpenGLはステートマシンであり、ステートマシンの重要なルールは、ステートまたはを追跡するか、使用するときはいつでも既知の状態にする必要があるということです。

+0

(明らかに悪い)チュートリアルからいくつかの行がコピーされています。私はglHintオプションとglClearDepthをまだ見ていませんでしたが、デフォルトは正しかったので、後者はすでに削除されています。欠陥は何ですか?これは本当に答えではありません.. – RobotRock

+0

@ KajToet:あなたの全体のコードを見ることなく、私は推測することもできません。そして、申し訳ありませんが、そのクリスタルボールは完全な裂け目になっているようです;) – datenwolf

1

draw()でsetDepthTestを設定することでこれを修正しました。

glMatrixMode(GL_MODELVIEW); 
glEnable(GL_DEPTH_TEST); 
+0

これはまさに私があなたに提案したものでした。私の答えの最後の段落を参照してください。 – datenwolf

関連する問題