|
|
2021/11/24(Wed) 16:44:52|NO.94482
お世話になります。
検索等いろいろ試行錯誤してわからなかったので質問します。
現在Artlet2dを使って、色相を変更するプログラムを書いています。
#include "a2d.hsp"
#const picx 400
#const picy 255
#const hue 16 //16:オレンジ、48:黄緑、80:青緑、・・・
screen 0, picx, picy
repeat picy
hsvcolor 0, 0, cnt
line 0, cnt, picx, cnt
loop
wait 100
alCreateImage 0, picx, picy
alCopyScreenToImage 0, 0
hsvcolor hue, 255, 255
cmatrix(MAT_R) = 1.0, 0.0, 0.0, 0.0, double(ginfo_r)/255
cmatrix(MAT_G) = 0.0, 1.0, 0.0, 0.0, double(ginfo_g)/255
cmatrix(MAT_B) = 0.0, 0.0, 1.0, 0.0, double(ginfo_b)/255
cmatrix(MAT_A) = 0.0, 0.0, 0.0, 1.0, 0.0
alCopyModeColorMatrix cmatrix
cls
alCopyImageToScreen 0, 0
redraw
このhueのところをいじって色相変更していきます。
赤青緑とその中間色の黄色水色などはいい感じに作れてると思いますが、
オレンジ、黄緑などがうまくできていません。
hueの値が0から191まで完璧に動かすのが理想なのですが・・・
これを解決できるマトリクスがわからず困っています。
みなさんどうか知恵をお貸しください。
よろしくお願いいたします。
|
|
2021/11/24(Wed) 17:07:57|NO.94484
黒から目標色へのグラデーションにする場合は、cmatrixを設定する部分の上3行分を
cmatrix(MAT_R) = double(ginfo_r)/255, 0.0, 0.0, 0.0, 0.0
cmatrix(MAT_G) = 0.0, double(ginfo_g)/255, 0.0, 0.0, 0.0
cmatrix(MAT_B) = 0.0, 0.0, double(ginfo_b)/255, 0.0, 0.0
とすれば良いですし、目標色から白へのグラデーションにする場合は、
r0=double(ginfo_r)/255 : g0=double(ginfo_g)/255 : b0=double(ginfo_b)/255
cmatrix(MAT_R) = 1.0-r0, 0.0, 0.0, 0.0, r0
cmatrix(MAT_G) = 0.0, 1.0-g0, 0.0, 0.0, g0
cmatrix(MAT_B) = 0.0, 0.0, 1.0-b0, 0.0, b0
とすれば良いのではないでしょうか。
|
|
2021/11/24(Wed) 18:18:19|NO.94489
沢渡さん
ご返答ありがとうございます!
後者のマトリクスで無事解決しました!
ありがとうございました!
#include "a2d.hsp"
#const picx 400
#const picy 255
;#const hue 16 //16:オレンジ、48:黄緑、80:青緑、・・・
screen 0, picx, picy
repeat picy
hsvcolor 0, 0, cnt
line 0, cnt, picx, cnt
loop
wait 50
alCreateImage 0, picx, picy
alCopyScreenToImage 0, 0
repeat 192
wait 1
hsvcolor cnt, 255, 255
r0=double(ginfo_r)/255 : g0=double(ginfo_g)/255 : b0=double(ginfo_b)/255
cmatrix(MAT_R) = 1.0-r0, 0.0, 0.0, 0.0, r0
cmatrix(MAT_G) = 0.0, 1.0-g0, 0.0, 0.0, g0
cmatrix(MAT_B) = 0.0, 0.0, 1.0-b0, 0.0, b0
cmatrix(MAT_A) = 0.0, 0.0, 0.0, 1.0, 0.0
alCopyModeColorMatrix cmatrix
alCopyImageToScreen 0, 0
redraw
loop
|
|