openFrameworksでHSV系を使う方法
こんにちは。お久しぶりです。MacBookPro買って、openFrameworksの勉強に励む今日この頃です。proce55ingで作ったSeq:crossという作品をopenFrameworksに移植中なのですが、openFrameworksにはHSV系で色を表現することができない(少なくとも私の調べた中では)ようなので、HSVを使えるようにopenFrameworksを少し改造しました。
1."ofGraphics.h"の改造
ヘッダファイル"ofGraphics.h"の中のofSetColor(int hexColor)が宣言されている部分のすぐ下に
//h: 0-360 , s: 0-100, v: 0-100, a: 0-255 void ofSetHSVColor(int _h, int _s, int _v, int _a); void ofSetHSVColor(int _h, int _s, int _v);
を付け足します。
2."ofGraphics.cpp"の改造
cppファイル"ofGraphics.cpp"の中のofSetColor(int hexColor)が定義されている部分のすぐ下に
void ofSetHSVColor(int _h, int _s, int _v, int _a){ float s = (float)_s/100, v = (float)_v/100; if (s==0) { ofSetColor(255*v, 255*v, 255*v); return; } float r,g,b; int hi = (int)(floor((double)_h/60))%6; float f = (float)_h/60-(float)hi; float p = v*(1-s); float q = v*(1-f*s); float t = v*(1-(1-f)*s); switch (hi) { case 0: r=v; g=t; b=p; break; case 1: r=q; g=v; b=p; break; case 2: r=p; g=v; b=t; break; case 3: r=p; g=q; b=v; break; case 4: r=t; g=p; b=v; break; case 5: r=v; g=p; b=q; break; default: break; } ofSetColor(255*r, 255*g, 255*b, _a); } void ofSetHSVColor(int _h, int _s, int _v){ ofSetHSVColor(_h, _s, _v, 255); }
を付け足します。これでHSV系で色を指定できるofSetHSVColor(int _h, int _s, int _v)が使えるようになります。
HSV系くらい標準装備されてそうなもんだけど。。。何かほかに方法があれば、コメントなどで教えてもらえれば助かります。