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回だけ実行すれば以降その倍率がずっと維持されます。