not good but great

プログラミング、アート、映画・本の感想について書きます。

openFrameworksでライティングを設定して物体を描画する

demo

f:id:naoyashiga:20140405223323p:plain
ライティングによって光の反射を考慮した描画を行いました。
・参考スライド

ライティングなしだと塗りつぶしになる

box.set(200);
box.setPosition(-150, 0, 0);
box.draw();

ワイヤーフレームではなくdraw()すると塗りつぶしになります。ライティングがしていないの時は、ただの塗りつぶしになり、のっぺりした色塗りになります。

ライティング

//ライト
ofLight light;

ofLightクラスからインスタンスを生成します。

void ofApp::setup(){
    ofBackground(0);
    ofEnableDepthTest();//深度テスト
    ofEnableSmoothing();
    
    light.enable();
    
    light.setSpotlight();
    
    light.setPosition(-100, 100, 100);
    //環境反射光
    light.setAmbientColor(ofFloatColor(0.1,0.1,0.5,1.0));
    //拡散反射光
    light.setDiffuseColor(ofFloatColor(0.2,0.2,1.0));
    //鏡面反射光
    light.setSpecularColor(ofFloatColor(1.0,1.0,1.0));
}

oFでは実行した順にレイヤーを重ねて描画されるので、物体同士の重なりがおかしくなることがあります。そこは深度テストを行って、きちんと現実世界と同様な描画方法に修正します。