こんにちは。私は今シンプルなゲームを作りたくてC言語とDXライブラリの使い方を勉強しています。
始めてから日も浅く、基本的なことさえ試行錯誤の日々ですが質問させてください。
[1] 質問文
2Dの背景内を、あたかも3D空間の様にキャラクターを移動させる方法。
例:初代バイオハザード,Final Fantasy 7等
メタセコイアで作ったマップを単純に背景と重ねてみたり等しましたが、いまひとつ分かりません。
背景の描写方法や、3Dマップの組み込み方、また画面をスクロールさせたり、カメラを動かしたりした場合ずれが生じないか等、インターネット上でも答えを見つけられず苦闘しています。
具体的な手順や、アドバイスを頂ければと思い書き込見させていただきました。
[2] 環境
OS : Windows8
Visual Studio Express 2013
[3] その他
数年前Delphiを少し使ったことがありますが、C言語、DXライブラリ共に全くの初心者です。
どうかよろしくお願いします。
2dの背景に3dのマップを組み込むには?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 2dの背景に3dのマップを組み込むには?
やった事は無いですが、レンダリング時にカメラの情報とZバッファの値を別データで出力するって事が考えられますね。
メーカー製ですので専用のプラグインぐらいは当然開発しているでしょう。
カメラについては平行移動は良いけど、カメラが回転する場合は多少嘘付いているのかなと言う気はします。
メーカー製ですので専用のプラグインぐらいは当然開発しているでしょう。
カメラについては平行移動は良いけど、カメラが回転する場合は多少嘘付いているのかなと言う気はします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 2dの背景に3dのマップを組み込むには?
シンプルなゲームを作りたいというわりには、とても手間と時間の掛かる手法を選びましたね。
softyaさんが書かれているように、この手法は必要なデータを準備するまでが肝です。
カメラのアングルが変わる場合は、それ込みで領域分割して深度計算すれば良いと思います。
カメラを動かしてズレが生じないか、ではなくてズレないようにあらゆる要素を事前に決めておかなければいけません。
こちらから何をどういうふうに提示できるかこれから考えてみます。
softyaさんが書かれているように、この手法は必要なデータを準備するまでが肝です。
カメラのアングルが変わる場合は、それ込みで領域分割して深度計算すれば良いと思います。
カメラを動かしてズレが生じないか、ではなくてズレないようにあらゆる要素を事前に決めておかなければいけません。
こちらから何をどういうふうに提示できるかこれから考えてみます。
Re: 2dの背景に3dのマップを組み込むには?
とりあえずプログラムコードでの手順を示すサンプルです。
DXライブラリ公式サイトにある3Dアクション基本 サンプルプログラムを以下のように書き換えて動かしてみてください。
WinMain関数のメインループ内、Render_Process関数呼び出し部分です。
DXライブラリ公式サイトにある3Dアクション基本 サンプルプログラムを以下のように書き換えて動かしてみてください。
WinMain関数のメインループ内、Render_Process関数呼び出し部分です。
#if 0
// 描画処理
Render_Process() ;
#else
// カメラ位置固定
SetCameraPositionAndTarget_UpVecY(VGet(3000.0f, 6000.0f, 3000.0f), VGet(0.0f, 0.0f, 0.0f));
// ステージモデルの描画
MV1SetOpacityRate(stg.ModelHandle, 1.0f); // 通常
MV1DrawModel( stg.ModelHandle ) ;
// ステージモデルの2回目のレンダリングで画面が変化していないことを示すため
// 全体に薄い膜を描画する
SetDrawBlendMode(DX_BLENDMODE_ALPHA, 64);
DrawBox(0, 0, 640, 480, GetColor(255,255,255), TRUE);
SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);
// Zバッファをクリア
// ここまでの描画はただの背景画像と化す
ClearDrawScreenZBuffer();
// ステージモデルの描画(※Zバッファの更新のみ)
MV1SetOpacityRate(stg.ModelHandle, 0.0f); // 透明
MV1DrawModel( stg.ModelHandle ) ;
// プレイヤーモデルの描画
MV1DrawModel( pl.ModelHandle ) ;
// プレイヤーの影の描画
Player_ShadowRender() ;
#endif
Re: 2dの背景に3dのマップを組み込むには?
softya(ソフト屋)さん、 ISLeさんありがとうございます。
ISLeさんのコード試してみましたが、カメラを移動させない場合はできそうな感じがしました。
視点を移動させた際のずれや違和感を減らすにはやはりかなり手間がかかるんですね。
自分の力量を考えて、当面は視点を固定させる方法で作って行こうと思います。
ISLeさんのコード試してみましたが、カメラを移動させない場合はできそうな感じがしました。
視点を移動させた際のずれや違和感を減らすにはやはりかなり手間がかかるんですね。
自分の力量を考えて、当面は視点を固定させる方法で作って行こうと思います。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 2dの背景に3dのマップを組み込むには?
ISLeさんのサンプルコードはZ値の生成にモデルをそのまま使っていますが、レンダリング画像を使う場合はZ値のデータやレンダリング画像の前後関係を示すだけの簡易モデルを必要とします。【ちょっと補正】チョコレート大好き さんが書きました:softya(ソフト屋)さん、 ISLeさんありがとうございます。
ISLeさんのコード試してみましたが、カメラを移動させない場合はできそうな感じがしました。
視点を移動させた際のずれや違和感を減らすにはやはりかなり手間がかかるんですね。
自分の力量を考えて、当面は視点を固定させる方法で作って行こうと思います。
つまり、面倒な手間はかかるんですが大丈夫ですか?
> 当面は視点を固定させる方法で作って行こうと思います
そういう事で解決していない気がします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 2dの背景に3dのマップを組み込むには?
softyaさん
ありがとうございます。
自分でも解決はしていないと思うのですが、色々試しているうちに3Dはおろか、コードもろくに理解出来ていないことを認識しました。もう少し自力で頂いたアドバイスを理解できる程度まで勉強したいと思います。
ありがとうございます。
自分でも解決はしていないと思うのですが、色々試しているうちに3Dはおろか、コードもろくに理解出来ていないことを認識しました。もう少し自力で頂いたアドバイスを理解できる程度まで勉強したいと思います。