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 件のコメント:
コメントを投稿