HSPDishで表示カラーの変更に挑戦


2017年 5月19日~23日
 
 
 ああ、どうにも立ち上がらない、やる気がしないと言うかエンジンがかからない。
 しばらくやらないと、ねえ。
 プロジェクトの立ち上がりって途方に暮れます。
 どこからとっついたら良いのか分からなくてダラダラしてます。
 こうなるとあせってくるよねえ、一歩一歩破滅に近づいてますしね(笑)

 そんな訳でとりあえず表示色を数値で変更できるかどうかから研究してみることにした。
 カラーパレットみたいな事ができるといいなと思う。

 例えば勢力の表示色の違いを一々グラフィックで用意するのめんどいので。

 
 マニュアルを見てみると、HSP3.5βからは gmulcolor命令で色を乗算できるとの事、やるな。

 とりあえずテストで髪の色を変えるプログラムを作る。
 
 
 ALFARで適当に書いて

 機能を使うには PNGじゃないといけないらしいので、グラフィックソフトで BMPをPNGに変換する。

 まて、たしか PNGで保存は ALFARでも出来たはず。
 
 

ここで透明色にするパレットのNo.を指定する

 保存で PNGを選ぶ

 するとこの画面になるので、ここでも透明色のパレットを選べる

 
 
テスト画像

 テストしたければ右クリックで保存で使えるはず。

 上の素体を表示した後、下の白い髪に gmulcolorで色を変えたものを上書きする感じだ。
 
 
テストプログラム

#include "hsp3dish.as"

	celload "color_test2.png",1
	 celdiv 1,32,32

	rn=128,gn=0,bn=0 ; ブレンド値

	repeat
	 stick k,10,0 ; カーソル上下で赤の値を変化
	  if k=2 : rn+
	  if k=8 : rn-
	  if k=128 : end ; ESCキーEND

	 redraw 0
	  color 0,0,0 : boxf

	  gmode 2
	   gmulcolor 255,255,255 	; ノーマル表示の場合はこれでリセットする
	    pos 0,0 : celput 1,0,5,5	; 体の表示

	  gmode 2
	   gmulcolor rn,gn,bn		; ブレンド値を設定
	    pos 0,0 : celput 1,2,5,5	; 髪の表示

	  color 255,255,255 : pos 10,200 : mes rn ; 赤値を表示
	 redraw 1

	 await 1000/20
	loop

PC上ではこれでうまくいく

 256だと 0扱いなのかな

 gmode 2のままだと下の画像は無視されて完全に塗りつぶされるみたい。
 
 
 体を gmode 2、髪を gmode 3,,,128(半透明合成)すると次のようになる。

 ややこしいけど、元の黄色い髪に、白に赤を乗算した色を128(50%)の割合で加算(?)合成している事になると思う。

 128が半値、255が 100%なので、255にするとgmode 2と同じ結果になる。


 (ややこしいけど、画面の 128は白い髪に乗算する赤の値)

 gmode 4はたぶん 3と同じ。

 5は加算(黄 + 赤でオレンジっぽくなってる)

 6は減算(黄 – 赤で緑)

 7は Dishでは機能しないようだ。
 
 
 まとめ
 gmode 2 塗りつぶし(αチャンネルの透明部分を塗らない)
 gmode 3,4 半透明合成(どちらでも同じ)
 gmode 5 加算
 gmode 6 減算

 0と 1は αチャンネルの透明が無視されて透明にならず、その部分は黒(?)で塗りつぶす。
 2~6は αチャンネルの透明部分は透明になる。

 こんな所かな。
 
 
アンドロイド実機で試してみる

 ソース

#include "hsp3dish.as"

	celload "color_test2.png",1
	 celdiv 1,32,32

	rn=128,gn=0,bn=0 ; ブレンド値

	repeat
	 x=mousex : y=mousey
	 stick k,256,0 ; カーソル上下で赤の値を変化
	  if k=256 and 180<x and x<360 and 320<y and y<640 : rn+
	  if k=256 and 0<x and x<180 and 320<y and y<640 : rn-

	 redraw 0
	  color 0,0,0 : boxf

	  gmode 2

	  gmulcolor 255,255,255 	; ノーマル表示の場合はこれでリセットする
	   pos 0,0 : celput 1,0,5,5	; 体の表示

	  gmode 2,,,255

	  gmulcolor rn,gn,bn		; ブレンド値を設定
	   pos 0,0 : celput 1,2,5,5	; 髪の表示

	  color 255,255,255 : pos 10,200 : mes rn ; 赤値を表示

	  color 192,192,192
	   line 0,320,360,320
	   line 180,320,180,640

	  pos 85,420 : mes "-"
	  pos 265,420 : mes "+"

	 redraw 1

	 await 1000/20
	loop

 ビルドして、転送して、実行、と。
 
 
 できました

 gmode 3

 gmode 5

 gmode 6

 6、アレ? 5と同じだけど。

 ふむふむ、マニュアルによると『現在のバージョンでは、android(NDK)ランタイムにおいてgmode 6(色減算)はサポートされませんのでご注意ください。』との事、ほほー。
 
 
 という事で、アンドロイド実機でも gmode 2(α透明抜き描画),3(半透明合成),5(加算)とできました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です