EXT_occlusion_query_boolean は OS5.0 で新しく、
インターネット全体で、これらの新しい拡張機能について投稿したり、このコードを使用したりした人は一人もいないようです....
ここでそれらは適切に設定されています...私が知る限り、どこにも文書化されていません...この小さなsudoコードからコードにどのように入るか想像できます:
import UIKit/UIKit.h
import GLKit/GLKit.h
import "GLProgram.h"
GLuint testBox,hasBeenTested,theParams;
//...
glGenQueriesEXT(1, &testBox);
glBeginQueryEXT(GL_ANY_SAMPLES_PASSED_EXT, testBox);
//... draw an object .......
glEndQueryEXT(GL_ANY_SAMPLES_PASSED_EXT);
glGetQueryObjectuivEXT(testBox, GL_QUERY_RESULT_AVAILABLE_EXT, &hasBeenTested);
if (hasBeenTested) glGetQueryObjectuivEXT(testBox, GL_QUERY_RESULT_EXT, &theParams);
glDeleteQueriesEXT(1, &testBox);
if (!theParams) object is hidden; don't draw next time;
うまくいけば、ここの一部がこのコードを使用できます。私はそれをテストして動作しますが、GLKit にバグがあるようです。self.effect2 = [[GLKBaseEffect alloc] init]; 通常の GLES2.0 パイプラインではなく、オブジェクトをレンダリングするための GLKit コードのタイプでは、クエリは正しい答えを提供できません... (非表示になることはありません) GLKBaseEffect オブジェクトを非表示にするパイプライン オブジェクトをテストしましたが (失敗します)そのため、2 つのタイプを混在させるだけでバグが発生する可能性があります。逆に GLKBaseEffect オブジェクトでパイプライン オブジェクトを非表示にすると、正しい答えが得られます。まだテストしていません。
問題は、これをさらに進めて、頂点/フラグメントシェーダーで衝突検出を何らかの方法で作成できると思います...私が見つけたこのコードは、開始のように見えます...これら2つのsudoコードが与えられた場合、誰かが私を手に入れることができますか? 「パーツ」が別のパーツの中に完全に入ったときにトリガーされる衝突検出に近いですか? ポジティブがトリガーされる前に、オブジェクト全体を別のオブジェクトの中に隠すことが、より簡単で最初のステップになる可能性があります。これは素晴らしいスタートです。何かアイデアはありますか?
http://ucv.academia.edu/RhadamésCarmona/Papers/743483/Volume-Surface_Collision_Detection