2011年4月18日月曜日

openframeworks上でのアンチエイリアスのかけ方

tipsを二つメモ。openframeworksでアンチエイリアスをかける方法と、ワイヤーフレームを描画する方法について




まずは、アンチエイリアスをかける方法について。oF(v0062)はデフォルトだとジャギーがかなり目立つ。なんとなく以前からアンチエイリアスの実装方法を探していたけど、最近oFのフォーラムで方法がのっているのを発見したので試してみた。
//main.cppファイルにて
#include "ofMain.h"
#include "testApp.h"
#include "ofAppGlutWindow.h"

//========================================================================
int main( ){
 ofAppGlutWindow window;
 //アンチエイリアスを有効にする
 window.setGlutDisplayString("rgb alpha double samples>=4 depth");
 ofSetupOpenGL(&window, 500,500, OF_WINDOW);
 ofRunApp( new testApp());
}
ofSetupOpenGLの前にwindow.setGlutDisplayString("rgb alpha double samples>=4 depth");と一行追加するだけ。すごい簡単だった。



つづいて、ワイヤフレームを描画する方法。processingのようにポリゴンをワイヤーフレームで表示したい時、ポリゴンの描画方法をglPolygonModeで切り替えれる。
例えば、ワイヤーフレームのみ表示する場合は
//ワイヤーフレームを描画
 ofSetColor(50, 50, 50);
 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);//ポリゴンの表と裏をワイヤーフレームで描画する
 glutSolidCube(5);
 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);//変更した設定をもとに戻す。ポリゴンの表と裏を塗りつぶす。
 ofSetColor(255, 255, 255);

ワイヤーフレームと面を両方表示する場合は、面とワイヤーフレームの二回に分けて描画すればいいが、そのままだとワイヤーフレームが面にめり込んだ状態で表示される可能性があるため、glPolygonOffsetでオフセットを付けてやる必要がある。
//面を描画
 ofxLightsOn();
 glEnable(GL_POLYGON_OFFSET_FILL); //オフセット値を有効化
  glPolygonOffset(1, 1);      //オフセット値を決定
 glutSolidCube(5);
 glDisable(GL_POLYGON_OFFSET_FILL); //変更した設定をもとに戻す。オフセット値を無効化。
 ofxLightsOff();
 
 //ワイヤーフレームを描画
 ofSetColor(50, 50, 50);
 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);//ポリゴンの表と裏をワイヤーフレームで描画する
 glutSolidCube(5);
 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);//変更した設定をもとに戻す。ポリゴンの表と裏を塗りつぶす。
 ofSetColor(255, 255, 255);
こんな感じ。

以上をひとまとめにしたソースはこちら。(ofx3dutilsとofxVectorMathがアドオンに必要。)

0 件のコメント:

コメントを投稿