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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0407
わた雲回転コピーが粗雑2解決


わた雲

リンク

2017/4/7(Fri) 19:00:32|NO.78993

制作中のゲームで、画面がゆっくりと90°回転する場面を作りたいのですが、
celputによる回転はガックガクで見られたものではありません。
調べたらcv系命令がきれいに回転させられるとのことでしたが、私の理解力不足で、
いくらサンプルやヘルプとにらめっこしても使い方がさっぱりわかりません。

celputを用いたソースはこちらです。
(一部省略あり。コピー元はID302、サイズは1440*1440、ID0のサイズは800*600)


*rotate gsel 302 (コピー元となる画像を描写) gsel 0 repeat 90 redraw 0 pos 0,-back : celput 301//背景描写 cx=??? cy=???//回転の中心座標。複雑に変化する celdiv 302,1440,1440,cx,cy pos 400,300 : celput 302,,,,deg2rad(cnt) redraw 1 await 16 loop return

cv系命令で上記のスクリプトと同じようなことができる方法、
またはそれ以外のきれいに回転コピーができる方法を教えていただけませんでしょうか。



この記事に返信する


motchy

リンク

2017/4/7(Fri) 23:37:58|NO.78998

やってみました。こんなのでどうでしょう?
hspcvを使うのは初めてなので、このやり方が適切なのかどうかは知りませんが。

cvバッファに画像を読み込んで cvrotate を繰り返すと誤差が蓄積して魔鏡みたいになるので、
HSPバッファに読み込んでおいた素材を cvrotate の度にcvバッファに転送し直してます。


#include "hspcv.as" #define WID_MAIN 0 #define WID_BUF 1 #define CVBID 0 *init //素材ロード celload dir_tv+"hsptv_img.bmp", WID_BUF gsel WID_BUF sx_img=ginfo_sx : sy_img=ginfo_sy //cvバッファ初期化 cvbuffer CVBID, sx_img, sy_img #define DUR_AWAIT 16 //await 間隔[ms] #const double DT 0.001*DUR_AWAIT //〃[sec] #const double OMEGA m_pi/10 //回転角速度[rad/sec] theta=0.0 //回転角度 screen WID_MAIN, sx_img, sy_img *main repeat gosub *rotate await DUR_AWAIT loop *rotate theta += OMEGA*DT gsel WID_BUF : cvputimg CVBID cvrotate rad2deg(theta), 1, 0,0, CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS, CVBID gsel WID_MAIN redraw 0 color 0,0,0 : boxf cvgetimg CVBID, 0 redraw 1 return



わた雲

リンク

2017/4/8(Sat) 12:28:52|NO.79001

ありがとうございます。
なんとか、CV系命令の使い方がわかりました。



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