examples/graphics/blendingExample
重なった色の混色方法のサンプルです。
ofEnableBlendMode() を利用し、()内に
OF_BLENDMODE_ALPHA
OF_BLENDMODE_ADD
OF_BLENDMODE_MULTIPLY
OF_BLENDMODE_SUBTRACT
OF_BLENDMODE_SCREEN
のいずれかを入れて指定します
一つ気になったのが、testApp.hで宣言したalphaとcounterをどこにも使っていない事。
私の見落としなのか、もしくはコードの使い回しの名残なのか...
#pragma once
#include "ofMain.h"
class testApp : public ofBaseApp{
public:
void setup();
void update();
void draw();
void keyPressed(int key);
void keyReleased(int key);
void mouseMoved(int x, int y );
void mouseDragged(int x, int y, int button);
void mousePressed(int x, int y, int button);
void mouseReleased(int x, int y, int button);
void windowResized(int w, int h);
void dragEvent(ofDragInfo dragInfo);
void gotMessage(ofMessage msg);
ofBlendMode blendMode;
ofImage rainbow; //イメージの宣言
float alpha;
float counter;
ofTrueTypeFont vagRounded; //Truetypefont"vagRounded"の宣言
char eventString[255]; //文字型変数の配列evenStringの宣言
char timeString[255]; //文字型変数の配列timeStringの宣言
};
#include "testApp.h"
//--------------------------------------------------------------
void testApp::setup(){
alpha = 0;
counter = 0;
sprintf(eventString, "Alpha"); //変数evenStringに文字データを代入
vagRounded.loadFont("vag.ttf", 32); //("読み込むフォントのファイル名",サイズ)
ofBackground(50,50,50);
rainbow.allocate(256, 256, OF_IMAGE_COLOR_ALPHA);//画像rainbowに対する(幅の設定,高さの設定,混色方法の設定)
rainbow.loadImage("rainbow.tiff");//画像の読み込み
}
//--------------------------------------------------------------
void testApp::update(){
counter = counter + 0.033f;
alpha += 0.01; //1フレームごとに値を0.01ずつ増やす
alpha = (alpha > 1.0) ? 1.0 : alpha; //条件演算子 alphaの値が1.0を超えたらalpha=1.0
}
//--------------------------------------------------------------
void testApp::draw(){
sprintf(timeString, "Press 1 - 5 to switch blend modes"); //変数timeStringに文字データを代入
ofEnableBlendMode(OF_BLENDMODE_ALPHA); //混色法の設定
ofSetHexColor(0xffffff);
vagRounded.drawString(eventString, 98,198); //フォント名.drawString(記入内容, x位置, y位置)で文字入力
ofSetColor(255,122,220);
vagRounded.drawString(eventString, 100,200);
ofSetHexColor(0xffffff);
vagRounded.drawString(timeString, 98,98);
ofSetColor(255,122,220);
vagRounded.drawString(timeString, 100,100);
ofSetColor(255, 255, 255,255);
ofEnableBlendMode(blendMode); //混色の方法をblendModeの指定に合わせる
rainbow.draw(mouseX, mouseY); //画像の位置をカーソルに合わせる
ofDisableBlendMode(); //混色の無効化
}
//--------------------------------------------------------------
void testApp::keyPressed (int key){
//スイッチ文
switch (key) {
case 49: //1のキーコード
blendMode = OF_BLENDMODE_ALPHA; //混色をアルファに
sprintf(eventString, "Alpha");
break;
case 50: //2のキーコード
blendMode = OF_BLENDMODE_ADD; //混色を加算に
sprintf(eventString, "Add");
break;
case 51: //3のキーコード
blendMode = OF_BLENDMODE_MULTIPLY; //混色を乗算に
sprintf(eventString, "Multiply");
break;
case 52: //4のキーコード
blendMode = OF_BLENDMODE_SUBTRACT; //混色を減算に
sprintf(eventString, "Subtract");
break;
case 53: //5のキーコード
blendMode = OF_BLENDMODE_SCREEN; //混色をスクリーンに
sprintf(eventString, "Screen");
break;
default:
break;
}
}

0 件のコメント:
コメントを投稿