demo
ライティングによって光の反射を考慮した描画を行いました。
・参考スライド
ライティングなしだと塗りつぶしになる
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では実行した順にレイヤーを重ねて描画されるので、物体同士の重なりがおかしくなることがあります。そこは深度テストを行って、きちんと現実世界と同様な描画方法に修正します。