「がんばれない」けど「がんばりたい」

ITエンジニアの仕事のこと。AI、機械学習、ディープラーニング。地頭力。車のこと。

openFrameworks iOS0071でDEPTH_BUFFERを使うメモ

oFでDEPTH_BUFFERを使う場合iOS版では、 windowに対して明示的にDEPTH_BUFFERを有効にしておかなければ、 いけない。

通常のiOS/emptyExampleをコピーしたものでは、 main.hにて、

●main.m

ofAppiPhoneWindow * window = new ofAppiPhoneWindow();
window-enableDepthBuffer();
ofSetuppenGL(window, 1024,768, OF_FULLSCREEN);

の様に、windowに対して、enableDepthBuffer();を呼ぶ。

また、0071のexampleフォルダにあるiosNativeExampleをベースにした アプリを作成する場合はmain.hに対して上記のコードを追加しても、 ofxiPhoneViewControllerのサブクラス(※1)経由で、 アプリケーションを起動するので、※1ファイル.mmの方で、 windowに対してDepthBufferを有効にする。

- (id) initWithFrame:(CGRect)frame app:(ofBaseApp*)app {
    
    ofxiPhoneGetOFWindow()->setOrientation( OF_ORIENTATION_DEFAULT );

    // この1行を追加する
    ofxiPhoneGetOFWindow()->enableDepthBuffer();

    return self = [super initWithFrame:frame app:app];
}

そして、実際のアプリケーションdraw()の方では、 glEnable(GL_DEPTH_TEST);のみを記述する。

osX版などでは、 glEnable(GL_DEPTH_TEST);とglDisable(GL_DEPTH_TEST); を対にして書くのが普通?みたいなのだが、 glDisable(GL_DEPTH_TEST);を書くと、iOS版では、うまくいかない場合がある。

書いても上手くいく場合もあるが、3D処理の部分の実装に因るようです。 詳細は、わからないけれどglDisable(GL_DEPTH_TEST);を書くか書かないかは、 上手くいくかどうかで判断しています。