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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0802
スペース画像を自由に変形7解決


スペース

リンク

2015/8/2(Sun) 22:20:46|NO.70414

画像を自由に変形するプログラムを作ってみた。変形の処理にはgsquareを使用。
これを応用すればPhotoshopのパペットワープ、ゲーム画面の切替効果等に使えると思う。
ただ、問題は処理速度。グリット数を増やすとどうしても処理が遅くなってしまう。
画像編集ソフト的な目的なら遅くても問題はないと思う。
ただゲーム等に組み込むとなると最低40fps(カクツキが目立たない限度)、できれば60fpsは欲しい。
そしてgsquareの欠点は処理速度以外に画質の問題がある。大きく変形させるとガクガクに。
拡大した画像を変形→縮小である程度抑えられるが、今ですら遅いのに更に遅くなる・・・
どなたか、暇な時でいいので処理速度と画質、この2つの改善策を提案して頂けると嬉しいです。

(i7260(4コア8スレッド)、GTX760、RAM160、使用画像1280x1024、グリッド数16*16でほぼ60)
#include"d3m.hsp"
グリッドx2=10:グリッドy2=10//グリッド数
Screen 2,200,200
pos 50,5:input グリッドx2,50,20,2
pos 50,30:input グリッドy2,50,20,2
pos 50,50:button gosub"読み込み",*処理始め
pos 50,80:button gosub"初期化",*初期化

pos 0,5:mes "グリッドx"
pos 0,30:mes "グリッドy"
stop
*処理始め
Dialog "jpg\npng\bmp\ngif\njpeg\nico\nnpsd\ntga",16,"画像を選択"
if stat=0:end
Buffer 1
picload refstr
winx=ginfo_winx
winy=ginfo_winy
gosub*初期化
Screen 0,winx,winy
repeat
getkey k,1
mx=mousex:my=mousey
redraw 0
Color 255,255,255:boxf:Color 0,0,0
repeat グリッドx+1
ct=cnt
repeat グリッドy+1
if グリッドx!ct&グリッドy!cnt:{
先x=座標x.ct.cnt,座標x.(ct+1).cnt,座標x.(ct+1).(cnt+1),座標x.ct.(cnt+1)
先y=座標y.ct.cnt,座標y.(ct+1).cnt,座標y.(ct+1).(cnt+1),座標y.ct.(cnt+1)
元x=onemx*ct,onemx*(ct+1),onemx*(ct+1),onemx*(ct)
元y=onemy*cnt,onemy*cnt,onemy*(cnt+1),onemy*(cnt+1)
gsquare 1,先x,先y,元x,元y
}
pos 座標x.ct.cnt-8,座標y.ct.cnt-8:mes "●"
if k=1&kbac=0 & 座標x.ct.cnt-判定x<mx & 座標y.ct.cnt-判定y<my &座標x.ct.cnt+判定x>mx &座標y.ct.cnt+判定y>my:選択x=ct:選択y=cnt:フラグ=1
loop
loop
redraw 1
if フラグ=1:座標x.選択x.選択y=mx:座標y.選択x.選択y=my
if k=0&kbac=1:フラグ=0
kbac=k
title ""+d3getfps()+"fps"
await
if グリッドx!グリッドx2 or グリッドy!グリッドy2 & グリッドx2!0 &グリッドy2!0:gosub*初期化
loop

*初期化
グリッドx=グリッドx2
グリッドy=グリッドy2
onemx=int(double(winx)/double(グリッドx))
onemy=int(double(winy)/double(グリッドy))
判定x=16
判定y=16
dim 座標x,999,999
dim 座標y,グリッドx+1,グリッドy+1
dim 先x,4
dim 先y,4
dim 元x,4
dim 元y,4
repeat グリッドx+1
ct=cnt
repeat グリッドy+1
座標x.ct.cnt=ct*onemx
座標y.ct.cnt=cnt*onemy
loop
loop
return



この記事に返信する


スペース

リンク

2015/8/2(Sun) 22:21:18|NO.70415

preさんで囲むの忘れました(´・ω・`)



GENKI

リンク

2015/8/3(Mon) 01:35:10|NO.70418

私も昔似たようなもの作ったんですが、グリッド数増やすと重くて使えないんですよね。
いかに処理する頂点数を減らすかが課題になってました。目的しだいで、いらない頂点が結構出ます。
http://mclab.uunyan.com/dl/dl18.htm
http://mclab.uunyan.com/dl/dl19.htm

動かしてないところは出来るだけgsquareを使わないような作りにすると軽くなるかもしれません。
あるいは必要な頂点のみを作って使う手もあります。
http://mclab.uunyan.com/dl/dl31.htm



スペース

リンク

2015/8/3(Mon) 11:40:37|NO.70429

>>GENKIさん
TOY-CAKE!の完成度に驚きです。
やはり頂点数を出来るだけ減らしたり、redrawの描画範囲を指定するくらいしか無いんですかね。



zakki

リンク

2015/8/3(Mon) 21:08:51|NO.70440

通常のWindows版ランタイムはgsquareはCPU処理ですが、dishだとGPU処理なので軽いかもしれません
Windows版のCPU処理にしてもSIMD化やマルチスレッド化で高速化の余地はありそうです



ニボッシー

リンク

2015/8/3(Mon) 21:36:47|NO.70443

これだけ短い処理でこんな凄いこと出来るんですね!
フォトショップは高くて買えませんがパペットワープは使ってみたいのでこれからの進展期待してます!



スペース

リンク

2015/8/3(Mon) 21:41:26|NO.70444

すみません、dishには全く詳しくないため、使い方がよくわかりません。
d3m.hspをインクルードして試してみたのですがウィンドウサイズが縦長になってしまいます。
dishはスマートフォン用という認識なのですが、どうすればいいのでしょうか?



スペース

リンク

2015/8/3(Mon) 21:45:09|NO.70445

>>ニボッシーさん
ありがとうございます。
現在ADVノベルゲームを作るソフトを作ろうかと思っていて、
実装予定の機能を仮組みして試している所です。
できればパペットワープ風の事を単体でできるソフトもあったら便利そうですね。



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