HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0211
こむらDirectXでアルファチャンネルを使用する方法11解決


こむら

リンク

2014/2/11(Tue) 07:28:06|NO.59869

HSPでDirectXを使用することはできますよね?で、私は透過pngをDirectXで使用したいのですが
どうやってもうまくいきません。画像を読み込むと白い四角しか表示されません。
ちなみにアルファチャンネルの画像の読み込みはGDI+(?)を使用しています。
DirectXに関しては最近触れたばかりなので分かたないことが多いです。
よろしくお願いします。



この記事に返信する


ZAP

リンク

2014/2/11(Tue) 14:40:24|NO.59888

DirectXのプラグインは何を使用しているのですか?

hgimg3なら、画像サイズに制約はあるけど
アルファチャネル付き画像も扱えたハズです。



こむら

リンク

2014/2/11(Tue) 15:49:36|NO.59889

>ZAP様
拡張プラグインは
「HSPDXFIX for HSP2.6x&3.x」
を使用しています。



ZAP

リンク

2014/2/11(Tue) 17:18:40|NO.59894

HSPDXFIXではアルファチャンネルは扱えないと思います。

hmm.dllを使えば可能みたいですが、
http://hsp.tv/play/pforum.php?mode=pastwch&num=22962

hmm.dll自体かなり古いので、個人的にはhgimg3でテクスチャを使って
擬似的に2Dを表現する方がイイのではないかと思います。



こむら

リンク

2014/2/11(Tue) 21:22:13|NO.59898

>>ZAP様
DirectXは使用せず、hmmだけを使用して画像を表示させることはできました。
しかし…何かが違うんです。透明部分の切り抜きが雑というか…
もう少し綺麗させることはできないか模索中です。

#include "hmm.as" dginit dgscreen 640, 480, 1, 16 dgloadfname "nc70557.png", 1 dggsel 0 dgpos 16, 25 dgrect 0, 0, 33, 49 dgscaleandangle 33, 49, 256 dgblendmode 1 await 0 dgcolor ,,, 0 dgclear dgcolor 255, 255, 255, 255 dggcopy 1,3 ;座標(0,0)の位置を中心にして128*128の大きさの半透明で表示される。 dgredraw
上記のスクリプトで画像を表示させたのですがどうも綺麗ではありません。
png形式なのがいけないのでしょうか?



暇人

リンク

2014/2/11(Tue) 21:58:46|NO.59899

> dgscreen 640, 480, 1, 16
32ビットのPNGを16ビットで初期化したスクリーンに表示してるから精度が落ちてるんだと思う

dgscreen 640, 480, 1, 32
にする

>DirectXは使用せず、hmmだけを使用して画像を表示させることはできました。
hmmがDirectXを使用して表示してる



こむら

リンク

2014/2/11(Tue) 22:48:45|NO.59900

>ZAP様
無事、きれいに描画することができました!ありがとうございます。
しかし、今度は別の問題が…というか私の組み方がおかしいのですが。
hmmで無事描画できましたのでそれをHSPDXFIXで使用したいのですが、
早速わからくなってしまいました。
今までDirectXの方で画像を表示させていたスクリプトにhmmを組み合わせて
やりたいのですが、わかりません。
とりあえず上のスクリプトをそのままぶち込んだのですがやっぱりできませんでした。
何から何まで質問してしまって申し訳ありません。
ちなみにDirectXで画像を表示させていたスクリプトです。

;初期化---------------------------------------------------- #include "hspdxfix.as" #include "hsp3util.as" es_ini 1000,1000,360:es_screen 640,480,32,,1,1 if stat : dialog"HSPDXFIX : DirectXの初期化に失敗":end *start gsel 0:mmstop:es_cls:es_draw:es_sync:wait 100 ;---------------------------------------------------------- ;本番------------------------------------------------------ buffer 1 ;HSPの管理しているバッファを初期化 picload"filename.bmp" es_buffer 1,1,$00ff00 ;DirectXのバッファに転送 ;転送失敗時 if stat=1 { es_bye dialog "転送に失敗しました。",1,"Error" end } ;キャラクタ登録 es_size 50,42,100,0 ;キャラクタのサイズ指定 es_pat 0,2,1,0 ;キャラクタ登録 es_cls es_put 0,0,0 ;登録確認 es_sync wait 500 es_bye end



check

リンク

2014/2/11(Tue) 22:58:58|NO.59901

だから、HSPDXFIXもHMMもDirectXを使って描画しているんだって。
両方同時に使用するとバグの原因になりかねない。

>今までDirectXの方で画像を表示させていたスクリプトにhmmを組み合わせて
>やりたいのですが、わかりません。
結局何をしたいかが分からない。
HSPDXFIXで画像を表示したいということか?



こむら

リンク

2014/2/11(Tue) 23:22:13|NO.59902

>check様
自分のやりたいことを明確に記述しておくべきでした。
すみません。
hmmで画像を読み込んだら、HSPDXFIXの機能はもう使えませんか?
自分はHSPDXFIXでアルファチャンネル(png)を扱う、ということしたいんですが
どうやら皆さんのコメント等をみているとそれは不可能だということらしいので…



こむら

リンク

2014/2/11(Tue) 23:31:28|NO.59903

連続してすみません
HSPDXFIXの機能というのは
es_size
es_pat
es_link
es_check
es_bound
等の命令(?)のことでお願いします。



ZAP

リンク

2014/2/12(Wed) 00:23:45|NO.59904

hmmとHSPDXFIXはDirectXを使いやすくするために別の作者が作ったプラグインであり
扱うデータはそれぞれのプラグインが個別に管理してる。

一方で読み込んだデータをもう一方で使うなんて芸当は不可能。
DirectXの描画をするためにどっちかのプラグインを使え、ということです。

アルファチャンネルをどうしても使いたいのであれば、HSPDXFIXではできないので
描画はすべてhmm.dllの命令を使ってやるべき。

HSPDXFIXを使うのであれば、アルファチャンネルを使わずに目的を達成する方法を考えるべき。



こむら

リンク

2014/2/12(Wed) 20:24:14|NO.59905

>ZAP様
そうなんですか…ありがとうございます。
そして自分の疑問に関して回答してくださった皆さん、
本当にありがとうございました。



ONION software Copyright 1997-2021(c) All rights reserved.