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


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
0907
mzkhsp3dishにおけるgfilter 1での拡大時の輪郭のノイズ6未解決


mzk

リンク

2019/9/7(Sat) 01:04:07|NO.88343

hsp3dishでcelputで64ピクセルに区切った画像の描画時、
拡大縮小を滑らかにするため、
gfilter 1
を指定すると上下左右の輪郭部に部分的に線が出てしまいます。
(画像はαチャンネル有りのpngをgmode 2やgmode 3で表示しています)

元画像で上下左右にギリギリまで画像があるとそれが見えているような感じもします。
拡大時に元画像をぼかしながら拡大してから切り出してるのかな?と想像しますがどうでしょうか。
同じ現象にあわれた方、改善方などありますか?



この記事に返信する


しまくろねこ

リンク

2019/9/7(Sat) 07:23:37|NO.88345

こんにちは。

プロジェクトフォルダ/jni/main.c


//hgio_view( 800, 480 ); // screen size
//hgio_scale( 1.0f, 1.0f ); // scale value
//hgio_autoscale( 0 ); // auto scale value

の下に

hgio_uvfix( 1 );

を追加してみるのはどうでしょうか?


「HSP3Dish android(NDK)版プログラミングガイド」から一部抜粋

> 13.マニュアル設定項目について
>
> テクスチャを拡大した際に、隣のピクセルがブレンドされてしまう現象を補正します。通常はこのオプションを指定する必要はありませんが、画面のスケーリング等で正しくテクスチャが表示されない場合に試してみてください。
> カッコ内の数値が0以外の場合は補正がONになります。0の場合は補正がOFFになります。



ぜーっと!

リンク

2019/9/7(Sat) 14:44:25|NO.88349

こんにちは。
そういう問題もあったなーと思いだしました。

しまくろねこさんの方法でうまく行けばOK。

うちの場合、その時は色々試して、単純に右を1ドット小さく描いたら回避できた気がします。
なので、パーツサイズぎりぎりまで描かず、上下左右1ドットずつ小さく描いて、
端っこは透明にしておけば大丈夫(かも)。



窓月らら

リンク

2019/9/8(Sun) 01:07:46|NO.88354

この問題はかなり前からずっとあります。
gfilter 1 で補間をかけると、元画像が補間されてからコピーされるようなイメージ。
なのでコピー範囲に隣接する上下左右1px外の画像が影響してしまいます。

またこの問題は標準のスケーリングを使用すると頻繁に発生する問題です。
端末によって出たり出なかったりなので、
いくつか解像度の違う端末でテストしないと気づかないかもしれません。

これは「拡大縮小倍率が割り切れないことが原因」で発生します。

試してみればわかりますが、
hgio_uvfix( 1 ); で改善はされますが、今度はパターン画像の周囲1pxだけが
細くなってしまうという問題が発生します。

解決方法としては、

1. スケーリングを自前にして、割り切れるサイズで拡大縮小する
2. 64x64 のパターン画像の周囲1pxを必ず透明にする

私の場合は当初は2の方法で対処していましたが、
最近は1の方法に切り替えてます。ちょっと面倒ですが・・・

grotate 命令で回転などをした場合でも問題になるので、
この場合は画像デザイン等を工夫する必要があります。



窓月らら

リンク

2019/9/8(Sun) 01:41:11|NO.88356

自前スケーリングについて。
うちで試した限りでは 0.25倍単位で拡大縮小すればよさそうでした。

・縦画面
・スケーリングX基準
・アプリ画面 480x800
・端末画面 1080x1920

だったとします。
この場合、実行時は 1080÷480=2.25 倍になるので
問題はでないかもしれません。

ただしこれが

・端末画面 800x1280

だと、800÷480=1.66666666666667 になってしまいます。
こういう場合に問題が発生します。

拡大縮小も同じことが原因なので、0.25倍単位で拡大縮小するなどの
工夫をすれば改善する可能性はあります。制限にはなりますが。


ヒント

// 表示座標に変換 #defcfunc dxy double _p1 return int(_p1*dm) // スケーリング倍率 // 480 はアプリの内部Xサイズ // ginfo_winx は実行端末のXサイズ dm=ginfo_winx/480 dm=0.25*int(dm/0.25) // x0.25単位の倍率にする gzoom dxy(64),dxy(64),1,0,0,64,64,1



窓月らら

リンク

2019/9/8(Sun) 03:18:57|NO.88357

間違い、こうでした。

dm=double(ginfo_winx)/480



mzk

リンク

2019/9/9(Mon) 08:04:18|NO.88381

皆様

遅くなってすみません。
ありがとうございます。

しまくろねこさんの
hgio_uvfix( 1 );による方法や、
窓月ららさんの自前スケーリングの方法は、
どちらも実機でのスケーリング時の拡大に関する改善という理解で間違い無いでしょうか?

この現象自体はcelputで0.8倍などで描画すると、
F5での起動時にwin上でも起きてしまっています。
時間が無くビルドしての実機での確認が出来ていないのですが、
hgio_uvfix( 1 );で改善されるかどうか、確認していきたいと思います。

ららさんの仰るように、ブレンド拡大縮小してから切り出しているため、
隣のセルの端のドットが見えてしまうのだと思います。
0.25倍での拡大縮小を試してみます。
自前スケーリングについても検討してみます。

ありがとうございます。



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