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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0427
SADOUSラスタースクロールなるものをやりたい6解決


SADOUS

リンク

2014/4/27(Sun) 23:01:12|NO.61715

ちょっと前からですが、roppyakukee→SADOUSへ改名です。

2DSTGの背景や敵攻撃Fxにラスタースクロールを使いたいです。
背景にラスターを使う理由は、よくわかりません。
ディレクターがラスタースクロールは使いたいと言っていたので。
もうひとつ、敵攻撃Fxに円形の中を歪ませるような視覚効果を得たいと
思ったのです。ブラックホール的な何か。

後者は、ラスタースクロールである必要はなさそうなので置いておきますが、
「ラスタースクロール」とググってみても、水平帰線期間・ハードウェア割り込み・
割り込みルーチン内でスクロールレジスタを...僕の知識がなさ過ぎるせいか
何をどうしていいかさっぱりわかりません。
スクロールレジスタとか何者なのかサッパリです。



gcopyで縦幅1pxの横棒で三角関数を用いてグネグネずらして表示する擬似ラスターが
あったのですが、ゲーム中の背景に使うには処理が重くなると思うのです。
その、ハードウェア割り込みとかをHSPで操作する場合は
どういった命令を使うのでしょうか?
擬似でも軽く処理できるものであれば大歓迎です。

サンプルソースを組んでもらえるとものすごくありがたいのですが、
それもアレなので
こういう命令を使ってどうのこうのといった説明だけでも助かります。
(使ったことのあるものはHSP言語だけ



この記事に返信する


ZAP

リンク

2014/4/28(Mon) 00:38:06|NO.61716

ラスタースクロールというのはおおざっぱに言えば、
画面の横1ラインを描画し終わったタイミングをハードウェアから検出し、
そのタイミングで次のラインの描画位置をずらしたりすることで
画像全体が波打つような効果を出したりするモノです。

基本的に、昔のゲームマシンなどの処理速度の遅いハードウェアで
画像効果の演出をするためのテクニックで、基本的に、ハードウェアがその機能を
搭載しており、かつプログラム側でハードウェアからの割り込み信号を検出して
処理することとなるので、HSPでは(というか昨今のPCでは)素人レベルで
プログラムできるモノではないと思います。

素直に画像を加工して処理する方法を考えた方が時間の節約になるでしょう。



暇人

リンク

2014/4/28(Mon) 01:05:13|NO.61717

>スクロールレジスタとか何者なのかサッパリです。
これはゲーム機や一昔前のPCでの話だろう
特定のメモリアドレスの数値を数バイト書き換えるだけでBGをスクロールさせられたので
水平帰線期間の僅かな時間でスクロールさせる事が出来た

今はDirectXとかでピクセルシェーダのプログラムして
割り込みを使わないでラスターエフェクトをやるらしい

描画を標準命令でやってるなら↓ぐらいで妥協するしかない

celload dir_exe+"\\sample\\hspcv\\bgsamp.jpg",1 celdiv 1,640,1 repeat redraw 0 r=0.03*cnt repeat 480 pos sin(r)*100,cnt celput 1,cnt r+0.01 loop redraw 1 await 16 loop
重いなら横ラインの分割を減らすとか・・・



あり

リンク

2014/4/28(Mon) 09:02:22|NO.61719

>gcopyで縦幅1pxの横棒で三角関数を用いてグネグネずらして表示する擬似ラスターが
>あったのですが、ゲーム中の背景に使うには処理が重くなると思うのです。

悩むより実際に比べてみれば分かる、という事で
暇人さんのサンプルを改造してみました。
(うねりの強さは調整可能なのでタイトルのFPSだけ注目してください)

#include "d3m.hsp" SCR_HEIGHT = 1 ; スクロール1ラインの高さ celload dir_exe+"\\sample\\hspcv\\bgsamp.jpg",1 celdiv 1,640,SCR_HEIGHT button gosub "1ライン", *scr_chg button gosub "2ライン", *scr_chg button gosub "4ライン", *scr_chg button gosub "8ライン", *scr_chg button gosub "全体", *scr_chg repeat redraw 0 r=0.03*cnt repeat 480/SCR_HEIGHT pos sin(r)*100,cnt*SCR_HEIGHT celput 1,cnt r+0.01 loop redraw 1 fps + d3getfps() ff + 1 : ff \ 100 ; 100フレームの平均値を表示 if ff = 0 : fps / 100 : title "" + fps + "FPS" await 0;16 loop *scr_chg if stat = 0 : SCR_HEIGHT = 1 if stat = 1 : SCR_HEIGHT = 2 if stat = 2 : SCR_HEIGHT = 4 if stat = 3 : SCR_HEIGHT = 8 if stat = 4 : SCR_HEIGHT = 480 celdiv 1,640,SCR_HEIGHT return



kanahiron

リンク

2014/4/28(Mon) 17:04:09|NO.61720

(質問者ではありませんが…)
cel系の命令って使ったことなかったので驚きました

フレームレート測るためにありさんのを一部暇人さんの(gcopy)に変えたのですが、
cel系は420fpsでたのに対しbcopyは113fpsしか出ませんでした…
この速度なら普通のゲームに組み込めそうですね



SADOUS

リンク

2014/5/1(Thu) 22:35:03|NO.61809

遅れました!すみません。

>kanahironさん
これはすごい
gcopyを使っていたのでcelの速度のこともありますし、
是非使ってみたいと思います。

>暇人さん,ありさん
かなりシンプルな処理になっていて、
ラスタースクロールの具合も想像していたよりもしっかりしていて
とおても参考になります。
やはり処理速度・・・celを使うようにしたいですね。

>ZAPさん
dxプラグインでdg系の命令の中に水平帰線という単語が含まれていたので
そのへんちょこちょこいじってみてからにしてみます。
当時のコンピュータにあった機能だったのですかー。



通りすがり

リンク

2014/5/5(Mon) 15:26:23|NO.61861

どちらが早いかということで、上に出ているスクリプトを改造して
gcopy と celput を切り替えられるようにしてみました(突貫で汚いですがご容赦を)。
でもあまり変わらないような?

#include "d3m.hsp" SCR_HEIGHT = 1 ; スクロール1ラインの高さ celload dir_exe+"\\sample\\hspcv\\bgsamp.jpg",1 gosub *scr_chg objsize 110, 20 combox sw1,, "celput(gmode 0)\ncelput(gmode 1)\ngcopy(gmode 0)\ngcopy(gmode 1)" combox sw2,, "1ライン\n2ライン\n4ライン\n8ライン\n全体" button gosub "反映", *scr_chg repeat redraw 0 r=0.03*cnt repeat 480/SCR_HEIGHT pos sin(r)*100,cnt*SCR_HEIGHT if flg < 2 { celput 1,cnt } else { gcopy 1, 0, cnt * SCR_HEIGHT } r+0.01 loop redraw 1 fps + d3getfps() ff + 1 : ff \ 100 ; 100フレームの平均値を表示 if ff = 0 : fps / 100 : title "" + fps + "FPS / " + msg await 0;16 loop *scr_chg if sw2 < 5 { SCR_HEIGHT = 1 << sw2 } else { SCR_HEIGHT = 480 } msg = "" + SCR_HEIGHT + "ライン " if sw1 < 2 { gmode sw1 celdiv 1,640,SCR_HEIGHT msg += "celdiv" } else { gmode sw1 - 2, 640, SCR_HEIGHT msg += "gcopy" } msg += " gmode " + (sw1 & 1) flg = sw1 return
「プログラミング・マニュアル>HSPの基本動作概念>CEL関連命令について」にて
----------
2Dキャラクター表示のためのセル描画命令が用意されています。 これは、従来のgcopy命令に代わる分かりやすい記述と構造を持っています。 また、将来のバージョンでのαチャンネルサポートやDirectX対応を見据えた、 高速描画のための拡張という側面を持っています。 将来のバージョンでは、CEL関連命令で扱われる画像素材及び描画は、 DirectXによる高速化の対象となります。
----------
とあるので、
現時点での違いは使い方以外ではほとんどなさそうです
今後のために今のうちから慣れておくというのはありでしょうが。



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