Re: スカイドームをどうやって実装するのか? ( No.1 ) |
- 名前:TE 日時:2013/05/21 21:35
スカイドームの座標をキャラクタの座標にしてしまえば良いのではないでしょうか。
そうすればキャラクタにスカイドームがついてくるのではみ出すことはないと思います。
ちなみにスカイドームを大きくし過ぎると描画範囲外で表示されなくなってしまいます。
|
Re: スカイドームをどうやって実装するのか? ( No.2 ) |
- 名前:珈琲 日時:2013/05/21 22:58
別にカメラはキャラクターに追従しているわけでなく、結構頻繁に切り替わります。
カメラの座標とスカイドームの座標を同期してもいいのですが、有効視界距離がスカイドームの半径になってしまいます。
理想的なのは、一番最初、何があろうともスカイドームを始めに描画する、ということがDXライブラリの設定を変えずにできるといいのですが・・・
|
Re: スカイドームをどうやって実装するのか? ( No.3 ) |
- 名前:takatwu 日時:2013/05/22 21:48
スカイドーム描画時にZバッファに書き込まないようにし
スカイドーム→その他
の順で描画したらどうでしょうか
|
Re: スカイドームをどうやって実装するのか? ( No.4 ) |
- 名前:珈琲 日時:2013/05/25 21:01
MV1SetUseZBuffer(Skydome,false);
としてみたのですが
その後
MV1DrawModel(Skydome);
↓
MV1DrawModel(Character);
の順だと描画されるのに
MV1DrawModel(Character);
↓
MV1DrawModel(Skydome);
だとCharacterが描画されなくなりました。
イマイチ動作がよくわからないのですが、
MV1DrawModel(Character);
の時点で既に描画されているのでしょうか?
MV1DrawModel(Character);
MV1DrawModel(Skydome);
MV1DrawModel(Character_2);
の順で処理した場合、Zバッファによる描画はScreenflipと同じタイミングとか想像してたのですが
|
Re: スカイドームをどうやって実装するのか? ( No.5 ) |
- 名前:管理人 日時:2013/05/26 14:47
Zバッファの仕組みについてはご存知でしょうか?
もしご存知ではないのでしたら「Zバッファ 仕組み」などで検索してみてください、
解説されているサイトが見つかると思いますので、よろしければご覧になってみてください
MV1DrawModel(Character);
↓
MV1DrawModel(Skydome);
でキャラクターが描画されないのは、MV1DrawModel(Character);で描画したキャラクターが
後からスカイドームの描画で上書きされてしまっているからだと思います
ところで
MV1DrawModel(Skydome);
↓
MV1DrawModel(Character);
とすることで当初のスカイドームからキャラクターがはみ出す問題は解決すると
思うのですが、この方法では何か不都合があるのでしょうか?
> の順で処理した場合、Zバッファによる描画はScreenflipと同じタイミングとか想像してたのですが
Zバッファを使用する場合も使用しない場合も、MV1DrawModel を呼んだ直後に
描画を開始しています
|
Re: スカイドームをどうやって実装するのか? ( No.6 ) |
- 名前:珈琲 日時:2013/05/26 15:35
その方法で出来たのですが、仕組みがちょっと理解できなかった、という旨で補足させて頂きました。
>Zバッファを使用する場合も使用しない場合もMV1DrawModel を呼んだ直後に描画を開始しています
MV1DrawModel(Character);
MV1DrawModel(Skydome);
MV1DrawModel(Character_2);
この順に処理した時、もしCharacterがCharacter_2よりも前に重なっていた時の動作がいまいち納得できませんでした。
Characterよりも遠いCharacter_2だけスカイドームの内側に描画される・・?
|
Re: スカイドームをどうやって実装するのか? ( No.7 ) |
- 名前:管理人 日時:2013/05/26 18:27
MV1SetUseZBuffer(Skydome,false);
を実行した場合は Zバッファを参照もしないしZバッファへ書き込みもしない、という設定になりますので
この状態で MV1DrawModel(Skydome); を実行すると画面上に先に何を描画していても、スカイドームは
必ず描画されます
なのでスカイドームが描画される箇所に既に Character が描画されていてもそれを
無視してスカイドームが上書きされます、要は3D的な前後関係は一切関係なく描画されます
ただしZバッファへの書き込みも行わない為 Character を描画したときにZバッファに書き込まれたZ値は
そのまま残りますので、画面構成的に Character2 が Character に隠れるような位置にいた場合は
Zバッファの効果によって MV1DrawModel(Character_2); を実行しても Character2 は描画されない
という現象が発生します
|
Re: スカイドームをどうやって実装するのか? ( No.8 ) |
- 名前:珈琲 日時:2013/05/26 21:26
あー、なるほど
ということは、やっぱりZバッファによる描画と入れ子で描画処理しないほうがいいですか?
一番奥か一番手前、みたいな・・・
|
Re: スカイドームをどうやって実装するのか? ( No.9 ) |
- 名前:管理人 日時:2013/05/26 21:43
> ということは、やっぱりZバッファによる描画と入れ子で描画処理しないほうがいいですか?
はい、というか原理上一番奥にスカイドームを置くことを前提とした処理のご提案なので入れ子も一番手前もできません
|
Re: スカイドームをどうやって実装するのか? ( No.10 ) |
- 名前:珈琲 日時:2013/05/26 22:00
なるほど、確かにそうですね
ご丁寧に最後までお付き合いいただきありがとうございました
|