2016-12-14 8 views
1

オクルージョンクエリに関する問題が発生しました。私の場合、照会の結果は常に想定されているよりも大きく見えます。例えばレンダリングに1024 * 1024の解像度を使用しますが、シーン内のオブジェクトのクエリ結果は2085029(> 1024 * 1024)です。使用ハードウェアオクルージョンクエリの結果が正確でないようです

クエリメソッドは、GPU GemsのChapter 29

 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); 
     glDepthMask(GL_FALSE); 
     glBeginQuery(GL_SAMPLES_PASSED, occlusionQuery[0]); 

     mesh->Render(); 

     glEndQuery(GL_SAMPLES_PASSED); 
     glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 
     glDepthMask(GL_TRUE); 
     glGetQueryObjectuiv(occlusionQuery[0], GL_QUERY_RESULT, &screenFragmentCount[0]); 

誰でも助けることができるからですか?

答えて

4

occlusion queryは、いくつのピクセルがテストに合格したかを教えてくれません。どのくらい多くのフラグメントがテストに合格したかを示します(正確には「サンプル」)。

三角形を描画してその前に三角形を描画すると、後の三角形が後の三角形で塞がれているにもかかわらず、オクルージョンクエリで両方のフラグメントがカウントされます。三角形は、順番にラスタライズされます。したがって、以前のものをカバーする後の三角形は、オクルージョンクエリカウントがバンプされるまでにラスタライズされていません。このような自己閉塞は、三角形を最も近いものから最も遠いものにレンダリングする場合にのみカウントされます。

+0

ありがとうございます!私は「ピクセル」と「サンプル」を混在させたようです。オブジェクトのピクセル数を取得するには、どうすればよいですか?類似のクエリメソッドはありますか? ;) – bitxue

関連する問題