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


HSPTV!掲示板


未解決 解決 停止 削除要請

2024
0823
ストローム3dish時のgzoom命令について12解決


ストローム

リンク

2024/8/23(Fri) 21:15:25|NO.102063

gzoom命令に関して質問があります。

gzoom命令のあるプログラムで

#include "hsp3dish.as"

を先頭に追加したらコピー先が白くなってしまいました。
追加しない元のプログラムは正常に動いています。

gzoom命令はhsp3dish時と仕様の違いがあるのでしょうか?
また別に良い拡大方法があればご教授ください。

※3dish時、redraw 0で画面がクリアされることは知っています。
※celput命令で拡大は可能でしたが、
 徐々に拡大するプログラムを作りたく、あまりにも粗くて使い物になりません。



この記事に返信する


kの字

リンク

2024/8/24(Sat) 23:39:28|NO.102071

これでどうでしょう。
>gzoom命令はhsp3dish時と仕様の違いがあるのでしょうか?
表示サイズをマイナス値にした時、座標から逆方向に表示されますが、
hsp3dishの場合は正方向に表示されます。


#include "hsp3dish.as" screen 0,640,480 buffer 2:picload "jp6girl.png" x=ginfo_winx:y=ginfo_winy ;ロードした画像サイズを取得 xx=x gsel 0 repeat redraw 0 color 0:boxf ;画面塗りつぶし pos 320,0:gzoom xx,y,2,0,0,x,y ;画像表示 stick stc,1+4 ;左右キーで画像の横サイズ変更 if stc&1:xx+10 if stc&4:xx-10 await 1000/60 redraw 1 loop



ストローム

リンク

2024/8/25(Sun) 00:28:50|NO.102072

kの字さん、ありがとうございます。
このプログラムを実行したら普通にできました。

原因を探ってみると、gzoomのウィンドウIDが"0"の場合にうまく動作しません。

やりたい操作としては
小さなグラフィックを並べ、マップのようなもの作って
それを滑らかに拡大させたいのです。

gselでも0以外は指定できないので・・・
上手い方法はないものでしょうか@@;



kの字

リンク

2024/8/25(Sun) 01:39:56|NO.102073

hsp3dishでは現在表示している画面を流用してさらに拡大する事はできません。
仮想画面の画像を加工するのもちょっと難しいですね。
並べて表示させながら拡大させた数値分表示座標をずらすのはいかがでしょう。


#include "hsp3dish.as" screen 0,640,480 buffer 2:picload "mapbg.png" seize=0 gsel 0 repeat redraw 0 color 0:boxf ;画面塗りつぶし color 255:pos 0,450:mes "サイズ+"+size repeat 9 ;マップを3x3で並べる pos cnt\3*32+(cnt\3*size),cnt/3*32+(cnt/3*size) ;均等に並べつつ拡大した分座標をずらす gzoom 32+size,32+size,2,0,0,32,32 loop stick stc,1+4 ;左右キーで画像のサイズ変更 if stc&4:size+1 if stc&1:size-1:if size<0:size=0 await 1000/60 redraw 1 loop



Drip

リンク

2024/8/25(Sun) 01:54:38|NO.102074

Dripです。横から失礼します。
ストロームさん、こんにちは。

>※celput命令で拡大は可能でしたが、
> 徐々に拡大するプログラムを作りたく、あまりにも粗くて使い物になりません。

ちょっと待ってください!HSP3Dishを使う場合においては、celputは最も美しい拡大・縮小表示を実現できる命令のはずです。
celput命令では小数点以下のドットの位置を考慮した拡大縮小表示を行うため、gzoomやgrotate命令より圧倒的に美しく補正描画されます。
以下のスクリプトを実行してみてください。注意深く観察しますと、gzoomでは1ドットずつグッグッと拡大されるのに対し、celputでは完全に滑らかな拡大表示がされるはずです。

#include "hsp3dish.as" celload dir_tv+"\\tamadot.png",3 celdiv 3,64,64 repeat redraw 0 gmode 2 gfilter 1 //スムージングを行う場合、gfilter 1を必ず指定しましょう。 pos 50,30:mes "celput" pos 50,50:celput 3,39,0.001*cnt+1,0.001*cnt+1 pos 50,230:mes "gzoom" pos 50,250:gzoom 0.001*cnt*64+64,0.001*cnt*64+64, 3,448,256,64,64 redraw 1 await 16 loop
なお、DishやDirectXを使用するシステムに共通することですが、「描画結果」を拡大表示する目的では使うことができません。
(スクリーン0の内容をスクリーン0に拡大コピーはできません。別の回避策を投じる必要があります。)
もし簡易的な画面全体の拡大演出を行いたい場合はviewcalc命令の利用をご検討ください。

#include "hsp3dish.as" celload dir_tv+"\\tamadot.png",3 celdiv 3,64,64 repeat redraw 0 viewcalc vptype_2d, sin(0.1*cnt)/4+1,sin(0.1*cnt)/4+1 //ここで倍率制御 gmode 2 gfilter 1 //★ドット感を出したい場合はこの行を消してください pos 50,30:mes "celput" pos 50,50:celput 3,39,0.001*cnt+1,0.001*cnt+1 pos 50,130:mes "gzoom" pos 50,150:gzoom 0.001*cnt*64+64,0.001*cnt*64+64, 3,448,256,64,64 redraw 1 await 16 loop
なお、gfilter命令は毎フレーム(redraw 0のたびに)、宣言しなおす必要がありますが、viewcalc命令は倍率を変更したいタイミングで1回だけ実行すれば以降その倍率がずっと維持されます。



窓月らら

リンク

2024/8/25(Sun) 10:50:50|NO.102076

横からですが
Windows上でも gfilter 1 が効くのと、celputで細かい拡大縮小はいま知りましたーww
ありがとうございます!!
よくみたらだいぶ前から実装されてたのだ・・・;

当方は gfilter 2 でやってて celput が無かった時代に gzoom でやってたのを
そのまま使っていたので気づいてませんでした。。
あらまあw これでスケーリングのやり方変えてみるのだ。
綺麗にやるために0.25倍とかでやってたのですが、もう関係ないかも?

そして screen 0 内でコピーできないのはそのとおりです。仕様なのだ。



ストローム

リンク

2024/8/25(Sun) 17:13:40|NO.102077

>kの字さん
なるほど、この方法が良さそうです。
ありがとうございます!

>Dripさん
少し1つ目のプログラムを改造し試しました。
gfilter補正を知らなくてかなり滑らかになり、
使えるレベルですが・・・
やはりgzoomの方より僅かながらカクカクします。
これはPC上だけでスマホ等では動作が違う・・・
ということなのでしょうか。

viewcalc命令も今回は使いにくそうですが
別で利用できそうです。ありがとうございます。

>窓月ららさん
screen 0内コピーNGは仕様なんですね。
特に明記してあるところが見つけられなかったです。
(探し方が悪いかも)



ストローム

リンク

2024/8/25(Sun) 20:36:22|NO.102078

解決ボタン忘れていました。



Drip

リンク

2024/8/25(Sun) 22:55:39|NO.102079

こんにちは。

ストロームさん

>やはりgzoomの方より僅かながらカクカクします。
>これはPC上だけでスマホ等では動作が違う・・・
>ということなのでしょうか。

成程そのような結果になりましたか…
実はgfilterによる補正はハードウェアによる影響が結構ありますので、特に微妙な違いにおいては自分の環境の表示が他所の環境でも全く同じになるとは思わない方が良いかと思います。
素直に画像を2倍表示するだけ等であれば、celputで2倍にするよりgzoomで2倍にしたほうが綺麗な場合もあるかもしれません。
またテクスチャサイズやコピーサイズによっても描画結果に影響をもたらすかもしれません。
もし複数機でテストが可能であれば、ぜひご自身で色々試してみるのが良いかと思います。がんばってみてください!


窓月ららさん

>よくみたらだいぶ前から実装されてたのだ・・・;
>当方は gfilter 2 でやってて celput が無かった時代に gzoom でやってたのを
>そのまま使っていたので気づいてませんでした。。

はい、gfilterは確か最初期の頃に実装されていた記憶があります^^;
この命令には結構お世話になっていました。

また特にgfilter 2は個人的に結構曲者で、使用する環境によってかなり動作に差異がある印象を受けています。
個体によって次のような結果が得られています。

・gfilter 1と同じ
・gfilter 0と似ているが回転時のドットの配置がより正確
・テクスチャサイズが2の累乗でない場合でも回転・拡縮が高精細
・テクスチャサイズが2の累乗でない場合画質が大きく劣化する
・反転するとボヤける(この機種かなり多し)
・反転してもボヤけず綺麗
・隣のセルのピクセルを拾ってしまう(グラフィックカードを挿してても発生)

等々…グラフィックカード搭載か否かだけではなく、オンボードの種類によっても動作結果が異なり、gfilter 2を使う場合は多機種で充分なテストが必要に感じています。
複数Windows機のみでの検証のため多彩なスマートフォンでの動作状況は把握しきれていないのですが、とりあえずgfilter 2が一番綺麗だろう!という軽い気持ちで使うと他の環境では想定外の描写が行われていることがあるかもしれませんね。
特性を理解して使うことができればgfilter 2で最大の描画品質を発揮できるとは思うのですが、個人的には要警戒なモードです^^;



窓月らら

リンク

2024/8/26(Mon) 08:08:37|NO.102081

gfilter ですが、これはずっと Android だけで有効だと思っていました。
試していたはずですが、私のWindows環境では補間されてなかったのです。
環境によりけりでしたか・・・
Android ではうちの手元の端末では gfilter 1 と 2 で差がよくわからないんですよね・・・
今後は gfilter 1 で統一しようと思います。



窓月らら

リンク

2024/8/26(Mon) 08:37:31|NO.102082

いい機会なので、celput の拡大縮小について検証してみました。
これ、アルファ付pngとかじゃないとスムーズに行かないんですね・・・
それで私は長年気づいてなかったみたいです。。
試しに tamadot.png をアルファ無しの画像にしたら gzoom と同じような感じになりました。
(でももしかしたら境界付近が補間されていないだけ?)

しかしおかげ様で新たな方法が見つかりました。
スケーリングなどにも応用してみたいと思います。



Drip

リンク

2024/8/27(Tue) 17:38:37|NO.102092

こんにちは!

窓月ららさん

>Android ではうちの手元の端末では gfilter 1 と 2 で差がよくわからないんですよね・・・
>今後は gfilter 1 で統一しようと思います。

私の方ではgfilter 1は比較的どの機種も同じような描画結果を確認しています。
余程古い機種で全くスムージングを受け付けないものがもしかしたらあるのかも?しれませんが…私は見たことがありません^^;
15年前のAtomN280搭載オンボードネットブックですら正常にスムージングされていたと思います。
(ただgfilter 2の描画結果がgfilter 0と殆ど同じでスムージングは無効になりました。gfilter 2は機種ごとの個性が結構出る気がします。)
gfilter 1とgfilter 2で違いがよくわからない場合は互換性的にgfilter 1のほうが有利だと思います。

>いい機会なので、celput の拡大縮小について検証してみました。
>これ、アルファ付pngとかじゃないとスムーズに行かないんですね・・・

この検証はスマートフォンの限定仕様とかなのでしょうか?
私の環境(Windows機)では32bit / 8bit PNGの透過色あり・なしを問わず、celputによるスムーズな拡大縮小が確認できます。
以下は256色のビットマップ画像(透明色なし)をゆっくりと拡大縮小するサンプルです。
私の環境ではcelputの方が美しく描画され、gzoomによる描画ではグッグッとドット感のある拡大縮小になってしまいます。
Windowsで異なる動作結果になる環境があったりするでしょうか?ちょっと興味がありますね。

#include "hsp3dish.as" celload dir_exe+"\\sample\\hgimg3\\testchr.bmp",3 celdiv 3,64,64 setreq SYSREQ_CLSCOLOR repeat redraw 0 gfilter 1:color 255,255,255 pos 10,10:mes "ゆっくりと動かしています" pos 50,120:mes "celput" pos 60,150 celput 3,4,0.03*sin(0.03*cnt)+1,0.03*cos(0.03*cnt)+1 pos 140,120:mes "gzoom" pos 150,150 //(zoomの最後のパラメータに1を指定しても結果は変わらないように見えました) gzoom (0.03*sin(0.03*cnt)+1)*64,(0.03*cos(0.03*cnt)+1)*64 , 3,0,64,64,64 redraw 1 await 16 loop
ただ美しいの定義も様々ですので、小数点以下の拡縮表現が目に悪いと考えた場合はgzoomのほうが1ドット単位の拡大になる分美しいと捉えることもできるかもしれませんね^^;



窓月らら

リンク

2024/8/27(Tue) 23:00:15|NO.102093

> Dripさん

celput ですが、確かにbmpでも効果が確認できますね。
アウトラインだけガタガタに見えるって問題はありますが、画像内はスムーズですね。
(背景色が一致していれば全くわからない)
Android ではまだ試してないのですが、これを使ってスケーリングを試す予定です。

gfilter については私が最初に検証したのはだいぶ前のバージョンなのと
XP環境なので効果ない環境だったのかもしれません。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.102063への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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