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


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0524
アキアキノヒロロgpdraw命令のオプションについて8未解決


アキアキノヒロロ

リンク

2022/5/24(Tue) 01:22:19|NO.96427

HGIMG4プログラミングガイド 26.シーンの描画について
を読んでも、

> 例:
> gpdraw GPDRAW_OPT_DRAW2D|GPDRAW_OPT_DRAW2D_LATE

> 上の例では、2Dスプライト描画処理、2Dスプライト描画処理(OBJ_LATE)だけを実行します。
> これを利用すると、3Dシーン描画と2Dスプライト描画の間にgcopy命令など別な描画命令による
> 表示を行なうことが可能になります。

という例の解説があるだけで、

> 通常は、パラメーターを指定しなくても問題ありません。

ともあります。

[sample] を見ると、[pronama] のサンプルは、[pronama3] 以外、オプションなしのgpdraw命令。
[pronama3] のgpdraw命令からも、オプションを外してみると、アニメーションが速くなってしまいました。
何故、[pronama3] だけオプションが必要になるのか、プログラミングガイドの解説だけでは、
この違いもよく分かりません。
恐らく、オフスクリーンバッファの関係だろうと思われますが、何故なんでしょう。
[pronama5] など、バッファを使ってそうだけれど、これはオプションなしのgpdraw命令。



この記事に返信する


zrs90(5さい)

リンク

2022/5/24(Tue) 13:37:52|NO.96432

HSP3.6 Windows7pro 32ビット
Core i5 -4590 内蔵グラフィック
メモリ4G HDD500G
Microsoft Wired keyboard 600(有線)、4Kモニター環境
標準エディタ(※ネット接続なし)
でテストしました。

解答になっているか、分かりません。
後、私の仮説が混じってますので
間違い等がある事を前提に見て下さい。

pronama3.hsp を少しいじって
実行して見ました。

96行〜*renderサブルーチンの中で
3回 redraw 0 の処理があります。(109、118、123行)

また、gpdraw命令を、複数回使っているのは
サンプルのpronama3dフォルダ内では
pronama3.hspだけです。(※hgimg4フォルダ等は未確認)

gpdraw命令は、普通、画面全体を書き換えますが

108〜111行で表示している
鏡面反射のステージ(??)を
gpdraw命令の描画オプション指定で、限られた項目だけを
後に描画される設定を上手く利用(??)して、画面全体が
書き換えられないようにしているようです。
コレで、プロ生ちゃんの動作スピードの
バランスを取っているらしい。(??)


redraw 0
gpdraw
redraw 1

を111行か、120行の redraw 1 の後に
複数増やしてみると、画面全体の
書き換え回数が単純に増える為
プロ生ちゃんの動きが倍速以上になっていく
現象が確認出来ます。

上と別になりますが、133行の、redraw 1 の後に

redraw 0
gpdraw
redraw 1

を1〜3個増やしてみると
プロ生ちゃんの動きが、逆にスローになり
hgimg4 sample の文字が点滅するようになります。
また、計4個増やすと1〜3個の時スローだった物が
何故か速くなります。


普通、実行しないプログラムですが、計4個のは
画面の書き換えタイミング関係でしょうか(??)
PC、モニターによる環境依存(??)


追記。

場合によりますが、ビデオのスロー、早送り再生の
ような物に使えるかなと。
ただ巻き戻し再生のような物は難しそうですが。

後、上のスローになる修正(※改悪)をした物と
サンプルそのままの物を同時起動したら
何故か、hgimg4 sample の文字が
点滅が高速化しました。

修正側のプロ生ちゃんの動きが
若干速くなったような(??)

...何ですかねコレ。
余計、分からなくなりました。



アキアキノヒロロ

リンク

2022/5/24(Tue) 16:58:43|NO.96433

私がオフスクリーンバッファのことを言っているのと同じことを
[redraw 0 : gpdraw : redraw 1] と、表現を変えて言っているようにも思えますが。

普通は、必要なところでだけ、[redraw 0 : gpdraw : redraw 1] をする、
即ち、オフスクリーンバッファを使わないのであれば、
主画面での[redraw 0 : gpdraw : redraw 1] 1回でいいものが、
オフスクリーンバッファ使用時はそこでも[redraw 0 : gpdraw : redraw 1] が要る。

> gpdraw命令の描画オプション指定で、限られた項目だけを
> 後に描画される設定を上手く利用(??)して、画面全体が
> 書き換えられないようにしているようです。

そう考えるしかないようにも思いますが、ただ、
[gsel id_shadow] にある [gpdraw] のオプションを外して、
[gsel id_render] にある [gpdraw] に移しても、表示の様子も速度も元のままのようです。

> 111行か、120行の redraw 1 の後に
> 複数増やしてみると、画面全体の
> 書き換え回数が単純に増える為
> プロ生ちゃんの動きが倍速以上になっていく

主画面であれ、バッファであれ、基本的にはそれぞれ1回でいい訳のものを
何回も書き換えてしまうのですから、そうなるんでしょうね。


そして、133行の、redraw 1 には、[gpdraw] がありませんが、これは、
主画面に [celput id_render] しているだけで、プログラミングガイドに、
> 2Dの直接描画命令だけを使用して、オブジェクトによる描画が不要な場合は、
> gpdraw命令を記述する必要もありません。
ということでしょう。

あと一つ、これはどこかで、GENKI さんがおっしゃっていたと思いますが、
[redraw 0] は最初の1回だけでいいようです。
ところが、試しに、[redraw 0] を全てなくしてしまっても、何故か、元の通り。
これも、分かりません。



zrs90(5さい)

リンク

2022/5/24(Tue) 17:19:00|NO.96434

追記(その2)

申し訳ないです。

#96432 の方法は、使えない事が分かりました。
動作検証のみにして下さい。

特に下記の修正(※改悪)をしたプログラムは
コンパイル+実行 → ウィンドウを最小化
すると、一発で落ちます。


上と別になりますが、133行の、redraw 1 の後に

redraw 0
gpdraw
redraw 1

を1〜3個増やしてみると
プロ生ちゃんの動きが、逆にスローになり
hgimg4 sample の文字が点滅するようになります。
また、計4個増やすと1〜3個の時スローだった物が
何故か速くなります。


惜しいな。ビデオのスロー再生みたいな処理等
に使えたら、面白そうだったのに。

ビデオの早送り再生みたいな処理の方も
何とも言えない状態です。



アキアキノヒロロ

リンク

2022/5/24(Tue) 17:36:49|NO.96435

追記です。

> [gsel id_shadow] にある [gpdraw] のオプションを外して、
> [gsel id_render] にある [gpdraw] に移しても、表示の様子も速度も元のままのようです。

さらに、両方ともにオプションをつけてみると、
あら、プロ生ちゃん が倒れ込んじゃいました。

ということは、このオプションは、
[gpload] による3Dモデルデータの描画処理を行わない
ということになるのでしょうか。


プログラミングガイドも、ヘルプも
どうもオプションの説明が簡略すぎて、よく理解できません。



zrs90(5さい)

リンク

2022/5/24(Tue) 20:22:15|NO.96437

...本当に倒れてますね。鏡面の映り込みも
描画途中で止まってるせいか何か変ですね。

何も設定していない gpdraw 命令が存在しない
状態になっているので、おそらく描画待ち状態に
なっているのでは?


このサンプル自体、実行はした事あったんですが
いじったのは今日が初めてで、何が一体どうなっているのか?
分からないまま、88行、128行の
コメントを外したりして、今もいじってます。


#96433 の最後の質問の

あと一つ、これはどこかで、GENKI さんがおっしゃっていたと思いますが、
[redraw 0] は最初の1回だけでいいようです。
ところが、試しに、[redraw 0] を全てなくしてしまっても、何故か、元の通り。
これも、分かりません。


コレも、私の推測になりますが

redraw 0 の前にある
gsel 命令に、redraw 0 ではない
redraw 相当の機能?が含まれているのでは?

この推測が合っているかは、openhsp で
両方の命令を調べるしかないですが
openhspの検索は、私は上手く出来ませんし
c言語自体、読めないので分からないです。


追記(その3)

しかし、このマニュアルの状態で
3.4〜3.5辺りで hgimg4 使ってた方々って
どうやってたんでしょうか?

多分ご存知と思いますが
最近、アドベントカレンダー2017 hsp
と言うイベントが昔あったのを
検索で知りました。
(※openhsp 関係、hsp3のツール等で
有名なShark++さんが2016〜開催
していたようです。)

そこに hgimg4 で制作されていた方の
記事(サンプル)がいくつかあり、残念だったのは
hgimg4の初心者向けのHP?が
あったらしいのですが
閲覧出来なかった事です。



アキアキノヒロロ

リンク

2022/5/25(Wed) 02:01:37|NO.96448

恐縮ですが、私のツイッター
https://twitter.com/akiakinohiroro/status/1527116397016674304
での例でも、[gpdraw] のオプションを付けたり、外したりしてみました。

プロ生ちゃんの速さは変わっても、背景の回転の速さは変わりません。
[gpload] による3Dモデルデータの描画処理だけに関わるようです。

一方、[redraw 0 : redraw 1] の回数を増やすと、
あるいは増やしたものを減らすと、
背景の回転の速さは変わっても、プロ生ちゃんの速さは変わりません。

ここで気をつけるべきは、描画の更新と3Dモデルデータのアニメーションとは
制御の仕組みが違うことです。
アニメーションは、内部時間を単位に動きを制御しているが、
それ以外の動きは、描画の更新(メインループの[await]での指定時間)による
ということです。
このアニメーションに関わる描画処理、言い換えると、
内部時間を単位とする動きに関しては、
[gpdraw] でそのスイッチをオンにし、[redraw 1] でオフにしている。
メインループ1回転の中で、[gpdraw] が複数あると、
いわば、[gpdraw] の複数起動状態になり、内部時間の経過時間を複数回参照するため、
速くなる。内部時間を参照するかしないか、これを[gpdraw] のオプションが決めている、
こう考えるといいんじゃないか。


余計に、こんがらかってしまったかもです。すいません。



法貴優雅

リンク

2022/5/25(Wed) 22:32:41|NO.96458

何か難しく考えていますが、単純に「GPDRAW_OPT_OBJUPDATE」が
3Dモデルのアニメーションを進めるフラグで、それがあるかないかで、
スピードが変わるだけの事じゃないですか?



zrs90(5さい)

リンク

2022/5/26(Thu) 00:06:47|NO.96460

法貴優雅さん
簡潔に教えて頂き、ありがとうございます。
そういった形の考えに、至りませんでした。

私が返信した為、話がややこしくなって
しまいました。申し訳ないです。



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