2dの背景に3dのマップを組み込むには?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
チョコレート大好き

2dの背景に3dのマップを組み込むには?

#1

投稿記事 by チョコレート大好き » 10年前

こんにちは。私は今シンプルなゲームを作りたくてC言語とDXライブラリの使い方を勉強しています。
始めてから日も浅く、基本的なことさえ試行錯誤の日々ですが質問させてください。

[1] 質問文
2Dの背景内を、あたかも3D空間の様にキャラクターを移動させる方法。
例:初代バイオハザード,Final Fantasy 7等

メタセコイアで作ったマップを単純に背景と重ねてみたり等しましたが、いまひとつ分かりません。

背景の描写方法や、3Dマップの組み込み方、また画面をスクロールさせたり、カメラを動かしたりした場合ずれが生じないか等、インターネット上でも答えを見つけられず苦闘しています。
具体的な手順や、アドバイスを頂ければと思い書き込見させていただきました。

[2] 環境  
OS : Windows8
Visual Studio Express 2013

[3] その他
数年前Delphiを少し使ったことがありますが、C言語、DXライブラリ共に全くの初心者です。
どうかよろしくお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 2dの背景に3dのマップを組み込むには?

#2

投稿記事 by softya(ソフト屋) » 10年前

やった事は無いですが、レンダリング時にカメラの情報とZバッファの値を別データで出力するって事が考えられますね。
メーカー製ですので専用のプラグインぐらいは当然開発しているでしょう。

カメラについては平行移動は良いけど、カメラが回転する場合は多少嘘付いているのかなと言う気はします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: 2dの背景に3dのマップを組み込むには?

#3

投稿記事 by ISLe » 10年前

シンプルなゲームを作りたいというわりには、とても手間と時間の掛かる手法を選びましたね。
softyaさんが書かれているように、この手法は必要なデータを準備するまでが肝です。

カメラのアングルが変わる場合は、それ込みで領域分割して深度計算すれば良いと思います。
カメラを動かしてズレが生じないか、ではなくてズレないようにあらゆる要素を事前に決めておかなければいけません。

こちらから何をどういうふうに提示できるかこれから考えてみます。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: 2dの背景に3dのマップを組み込むには?

#4

投稿記事 by ISLe » 10年前

とりあえずプログラムコードでの手順を示すサンプルです。

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のマップを組み込むには?

#5

投稿記事 by チョコレート大好き » 10年前

softya(ソフト屋)さん、 ISLeさんありがとうございます。
ISLeさんのコード試してみましたが、カメラを移動させない場合はできそうな感じがしました。
視点を移動させた際のずれや違和感を減らすにはやはりかなり手間がかかるんですね。
自分の力量を考えて、当面は視点を固定させる方法で作って行こうと思います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 2dの背景に3dのマップを組み込むには?

#6

投稿記事 by softya(ソフト屋) » 10年前

チョコレート大好き さんが書きました:softya(ソフト屋)さん、 ISLeさんありがとうございます。
ISLeさんのコード試してみましたが、カメラを移動させない場合はできそうな感じがしました。
視点を移動させた際のずれや違和感を減らすにはやはりかなり手間がかかるんですね。
自分の力量を考えて、当面は視点を固定させる方法で作って行こうと思います。
ISLeさんのサンプルコードはZ値の生成にモデルをそのまま使っていますが、レンダリング画像を使う場合はZ値のデータやレンダリング画像の前後関係を示すだけの簡易モデルを必要とします。【ちょっと補正】
つまり、面倒な手間はかかるんですが大丈夫ですか?

> 当面は視点を固定させる方法で作って行こうと思います
そういう事で解決していない気がします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

チョコレート大好き

Re: 2dの背景に3dのマップを組み込むには?

#7

投稿記事 by チョコレート大好き » 10年前

softyaさん
ありがとうございます。
自分でも解決はしていないと思うのですが、色々試しているうちに3Dはおろか、コードもろくに理解出来ていないことを認識しました。もう少し自力で頂いたアドバイスを理解できる程度まで勉強したいと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る