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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0325
woo画面全体にアンチエイリアス(ぼかし?)をかける方法について6未解決


woo

リンク

2013/3/25(Mon) 23:11:55|NO.53251

こんにちは。

現在、シューティングゲームを作っていて、
全ての画像をcelputで描写しているのですが、
celputで画像を拡大縮小したり傾けたりすると
画像がジャギジャギ(?)になって不自然になってしまうので困っています。

なので解決策として画面全体に
アンチエイリアス(ぼかし?)をつけたいと思ったのですが
方法がわからず困っています。

わかりにくい質問で申し訳ありません。
そのようなことができる場合、方法を教えていただけると有り難いです。



この記事に返信する


名無し

リンク

2013/3/26(Tue) 15:26:59|NO.53257

cvsmoothでできませんか?アンチエイリアスというよりぼかしですが・・・



FunnyMaker

リンク

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)



FunnyMaker

リンク

2013/3/27(Wed) 18:37:45|NO.53282

すみません、モジュール3行目の「制作」は正しくは「製作」です。



woo

リンク

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にコピー




K-s

リンク

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



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