ofxTips-JP

openFrameworksに関する様々なTipsを紹介するブログです。

アンチエイリアシングを"無効"にする方法

openFrameworks v0.8.0以降、デフォルトでアンチエイリアシングが有効になりました。

描画が綺麗になるので嬉しい機能ですが、細かいドットを扱うような処理の場合に困ります。
1ピクセルの点を打つような処理の場合、ドットがボケて見えてしまうのです。

そこで、ofDisableAntiAliasing();を呼び出すことでアンチエイリアシングを無効にすることができます。

//--------------------------------------------------------------
void testApp::setup(){
	ofSetCircleResolution(40);
	ofBackground(0, 0, 0);

        /*アンチエイリアシングを無効に*/
	ofDisableAntiAliasing();
}

//--------------------------------------------------------------
void testApp::update(){

}

//--------------------------------------------------------------
void testApp::draw(){
        /*円と線を描画*/
	ofSetColor(255);
	ofCircle(50,50,30);
	ofSetColor(0, 0, 0);
	ofLine(0, 0, 100, 100);

        /*大量のドットを描画*/
	ofSetColor(255);
	glBegin(GL_POINTS);
	for (int i = 0;i < 100;i++){
		glVertex2f(ofRandom(100),ofRandom(100));
	}
	glEnd();
}

また、ofEnableAntiAliasing();を使って元に戻す事もでき、特定の描画のみ、アンチを無効にすることができます。

        /*円と線を描画(アンチエイリアス有効)*/
	ofEnableAntiAliasing();
	ofSetColor(255);
	ofCircle(50,50,30);
	ofSetColor(0, 0, 0);
	ofLine(0, 0, 100, 100);

        /*大量のドットを描画(アンチエイリアス無効)*/
	ofDisableAntiAliasing();
	ofSetColor(255);
	glBegin(GL_POINTS);
	for (int i = 0;i < 100;i++){
		glVertex2f(ofRandom(100),ofRandom(100));
	}
	glEnd();

以下が、実際に描画してみた結果です。

f:id:of_tips:20130901144943p:plain