|
|
2013/3/25(Mon) 23:11:55|NO.53251
こんにちは。
現在、シューティングゲームを作っていて、
全ての画像をcelputで描写しているのですが、
celputで画像を拡大縮小したり傾けたりすると
画像がジャギジャギ(?)になって不自然になってしまうので困っています。
なので解決策として画面全体に
アンチエイリアス(ぼかし?)をつけたいと思ったのですが
方法がわからず困っています。
わかりにくい質問で申し訳ありません。
そのようなことができる場合、方法を教えていただけると有り難いです。
|
|
2013/3/26(Tue) 15:26:59|NO.53257
cvsmoothでできませんか?アンチエイリアスというよりぼかしですが・・・
|
|
2013/3/27(Wed) 18:35:07|NO.53281
期待に応えられるものかどうかは分かりませんが、ただぼかすだけならモジュールがあります。
ただし、シューティングゲームのFPSに追いつけないかもしれません。その場合はごめんなさい。
;「磨り硝子効果」
;
;(制作 : FunnyMaker)
;
; FrostedGlassEffect_mod p1,p2,p3,p4
;
; p1 : ターゲット画像のあるウィンドウID
; p2 : 作業場用ウィンドウID
; p3 : ぼかしの強度( >= 1)
; p4 : 硝子の粗さ( >= 0)
;
;p1のウィンドウIDを持つウィンドウの中身に磨り硝子効果をかけて返す。
;作業用のウィンドウを一つ用意する必要がある。メモリ解放のため、作業用ウィンドウは作業終了後に1x1で初期化される。
;ぼかしの強度は5くらいが普通。ただぼかしたいだけなら硝子の粗さは0でよい。
;
;<仕組み>
;元の絵をブレンド率 256÷4 = 64 で上下左右にズラしながらコピーする。ズラす幅と回数で磨り硝子の粗さとぼけ度を調整する。
;「ズラす幅 = 硝子の粗さ + 1」,「ズラす回数 = ぼかしの強度」である。
;
#module
#deffunc FrostedGlassEffect_mod int wid1,int wid2,int ScumbleLevel,int Roughness
gsel wid1,0 : PicSize(0) = ginfo(12),ginfo(13)
repeat ScumbleLevel
buffer wid2,PicSize(0),PicSize(1),0 : gmode 0 : pos 0,0 : gcopy wid1,0,0,PicSize(0),PicSize(1)
gsel wid1,0
gmode 3,PicSize(0),PicSize(1),256/4;256/4でやると上手くいく。(∵4回のサイクルで元の絵が4方にRGB値が等分されてコピーされる...かなぁ?)
pos 0,-abs(Roughness + 1)*cnt - 1 : gcopy wid2,0,0,PicSize(0),PicSize(1)
;wait 200
pos abs(Roughness + 1)*cnt + 1,0 : gcopy wid2,0,0,PicSize(0),PicSize(1)
;wait 200
pos 0,abs(Roughness + 1)*cnt + 1 : gcopy wid2,0,0,PicSize(0),PicSize(1)
;wait 200
pos -abs(Roughness + 1)*cnt - 1,0 : gcopy wid2,0,0,PicSize(0),PicSize(1)
;wait 200
loop
buffer wid2,1,1,0;バッファウィンドウの片付け
return
#global
↑を「FrostedGlassEffect.as」という名前で保存してください。
↓サンプルコード
#include "FrostedGlassEffect.as"
chdir dir_tv
screen 3,100,100,0 : picload "hsptv_img.bmp"
buffer 1,200,100,0 : picload "hsptv_img.bmp" : num1(0) = ginfo(12),ginfo(13)
buffer 2,1,1,0
FrostedGlassEffect_mod 1,2,5,0
screen 0,num1(0),num1(1),0
gmode 0 : pos 0,0 : gcopy 1,0,0,num1(0),num1(1)

| |
|
2013/3/27(Wed) 18:37:45|NO.53282
すみません、モジュール3行目の「制作」は正しくは「製作」です。
|
|
2013/3/27(Wed) 21:31:08|NO.53286
解答ありがとうございます
>名無しさん
検索してみましたが
cvsmoothの使い方がいまいち分かりませんでした。
バカですいませんm(__)m
>FunnyMakerさん
いい感じに表示されましたが、
ちょっと動きが悪くなってしまいました。
私のパソコンのスペックのせいかもしれませんが…
もうしばらく解答を募集してみます。
|
|
2013/3/28(Thu) 01:53:12|NO.53292
cvsmoothでもCV用のバッファにコピーしてスムージングかけて
HSPウィンドウにコピーって処理になるからどうしても重くなる
#include "hspcv.as"
cvbuffer 0,640,480 //作業用CVバッファ
celload dir_exe+"\\sample\\hspdx\\testchr.bmp",10
celdiv 10,64,64,32
screen 0,640,480,0,0,0
gmode 2
repeat 50
pos rnd(640),rnd(480)
z=0.1*rnd(20)+0.5
celput 10,rnd(5)+5,z,z,0.05*rnd(100)
loop
title "通常"
gsel 0
cvputimg 0 //HSPバッファからCVバッファ0にコピー
cvsmooth CV_BLUR,5,5,,0 //CVバッファ0をスムージング処理(数値は奇数限定)
screen 1,640,480,0,0,510
title "CV_BLUR"
cvgetimg 0 //CVバッファ0からHSPウィンドウにコピー
gsel 0
cvputimg 0 //HSPバッファからCVバッファ0にコピー
cvsmooth CV_GAUSSIAN,5,5,,0 //CVバッファ0をスムージング処理(数値は奇数限定)
screen 2,640,480,0,650,510
title "CV_GAUSSIAN"
cvgetimg 0 //CVバッファ0からHSPウィンドウ0にコピー
|
|
2013/3/31(Sun) 12:06:48|NO.53353
画面全体にぼかしをかけるのとは違いますが、
DirectXを使用したHGIMG3やHSPDishだと回転や拡縮時のジャギーや歪みが比較的小さいです。
↓このコメントを外すとHSPDishを使います
;#define DISH
#ifdef DISH
#include "hsp3dish.as"
#else
screen 0, 320, 480
#endif
celload dir_tv + "hsptv_img.png", 1
celdiv 1, 64, 64, 32, 32
ang = 0.0
repeat
redraw 0
color 0, 200, 200
boxf
#ifdef DISH
gfilter 1
gmode 3,,, 60
#else
gmode 4,,, 60
color
#endif
pos 160, 240
celput 1, 24, 8, 8, ang / 6
#ifdef DISH
gmode 3,,, 255
#else
gmode 4,,, 255
color
#endif
pos 160, 240
celput 1, 24,,, ang
redraw 1
await 16
ang += 0.01
loop
|
|