忘れない。

2015.11.26 openFrameworks 

これまで経験した二度と同じ過ちを繰り返さない為の戒めの書。随時更新。。

ofVideoPlayer(ofAVFoundationVideoPlayer)でのsetPosition,setFrame時にはrateを0にする

void skipFrame(int frames)
{
    player.setSpeed(0.);
    player.setFrame(frames);
    player.setSpeed(1.);
}

OSX 10.11, 10.12 etcでofVideoPlayer使用時(== ofAVFoundationVideoPlayer)のsetPositionなどのseek操作時にはupdate rateを0にするためsetSpeed(0.)を使う。忘れない。。

3次元での座標回転(Node, Matrix4x4 or Quaternion 使用)

ofMatrix4x4 mat4;
ofNode node;
ofVec3f p;
ofQuaternion quat;

p = ofVec3f(100,300,0);
node.setPosition( p );
node.lookAt( ofVec3f::zero() );
mat4.makeRotationMatrix( 90., node.getUpDir() );
p = mat4.postMult( p );  // 原点を中心にNodeの垂直方向軸を90度回転させた値

// Quaternionの場合も同じ
// quat.makeRotate( 90., node.getUpDir() );
// p = quat*p;

scale,translateなどを入れる時は新たなMatrix4x4をmakeしてmatrixの乗算したものを使う。忘れない。。

Shaderに渡すgetDepthTexture用のFboSettingsにはdepthStencilAsTextureを忘れない。

ofEnableArbTex();
{
      ofFbo::Settings s;
      s.width = WIDTH;
      s.height = HEIGHT;
      s.internalformat = GL_RGBA;
      s.useDepth = true;
      s.depthStencilAsTexture = true;
      s.depthStencilInternalFormat = GL_DEPTH_COMPONENT16;
      // s.numSamples = 4; // depthStencilAsTextureとmultiSamplingは一緒に使えない!!
      shadowViewDepth.allocate(s);
}
ofDisableArbTex();

どこか別のところで間違って一緒にmultiSampling設定とかしてるだけで全部死ぬ。忘れない。。

AlphaBlending + DepthTest を同時に使う時、印面消去にglColorMaskを忘れない。

ofEnableAlphaBlending();
ofEnableDepthTest();
ofSetColor(255);

glColorMask(false, false, false, false); // 全色描画しないけどDepthBufferにだけ書く
{
    ofPushMatrix();
    ofScale(0.999,0.999,0.999); // 描画するオブジェクトより少しだけ小さく書く。
    sphere_mesh.draw();
    ofPopMatrix();
}
glColorMask(true, true, true, true);

sphere_tex.bind();
sphere_mesh.draw();
sphere_tex.unbind();

半透明のテクスチャとか色で描画する時にDepthTestがおかしくなるので、
一旦glColorMaskで描画色を全部切ったオブジェクトでDepthTestを上書き(マスク)すること。忘れない。

ofxCvを使う時にopencv.aへのリンクを忘れない。

/addons/ofxOpenCv/libs/opencv/lib/osx/opencv.a

へのLink Binary With Librariesを忘れない。

ofMeshとかにsyphon textureとかをbindする時にtexcordのサイズ編集を忘れない。

ofVec2f s(WIDTH, HEIGHT);
vector<ofVec2f> &TC = mesh.getTexCoords();
for (int i = 0; i < TC.size(); i++) {
//    TC[i].x *= -1; TC[i].x += 1;	// 左右反転
//    TC[i].y *= -1; TC[i].y += 1;	// 上下
    TC[i] *= s;
}

C4DとかでTextureとしてBakeした時も一緒。マテリアルを反転もしくは上記の上下反転でUV座標変更して
bindすること。忘れない。

ShaderにsetUniformTextureでFBO渡す時にFBO.allocate時のofEnableArbTexを忘れない。

ofDisableArbTex();
uv.loadImage("assets/texture/uv.png");
ofEnableArbTex();
mskFbo.allocate(WIDTH,HEIGHT);

逆にuv.getTextureReference().bind()とかしてやる時にはofDisableArbTexを忘れない。

you

© rettuce.com