ページ 11

3Dゲームでカメラの位置

Posted: 2010年3月23日(火) 07:18
by SHIM
DXライブラリにて3Dゲームを作ろうと思っております。
3Dゲームの制作は少しだけ触れたことがあり原理等は理解しております。

今回ご質問させて頂いたのは座標(0,0,0)に表示してあるものオブジェクトを
画面に捉えるのにどのくらいの位置からカメラで見ればよいかお聞きしたいです。

下記の様に書くと物凄い小さい物体が表示されます。
MV1SetPosition( ChrModelH, VGet( 0.0f, 0.0f, 80.0f ) ) ;

SetCameraPositionAndTarget_UpVecY関数を使おうかと思うのですが
皆様がこの関数を使う場合どの程度の値を入れておりますでしょうか?
現在は1ドット程度のサイズでしか捉えていないので
物体がわかるくらいのサイズですと助かります。
※自分で値を入れてみたのですが表示されませんでした・・・。

質問が下手で申し訳御座いません。

////////////////////////

VECTOR A,B ;

A.x =
A.y =
A.z =

B.x = 0
B.y = 0
B.z = 0

SetCameraPositionAndTarget_UpVecY( A, B ) ;

Re:3Dゲームでカメラの位置

Posted: 2010年3月23日(火) 11:15
by softya
現状物体が小さく表示されるのは、カメラの距離に対して物体のスケールが小さすぎるためです。
ただ、SHIMさんがアリを撮っているのか、象を撮っているのか分からない現状では、適切なカメラの距離をアドバイスする事が出来ませんので、物体に関してすべての情報を提示しもらう必要があります。よろしいでしょうか?

Re:3Dゲームでカメラの位置

Posted: 2010年3月23日(火) 17:35
by SHIM
softya様
回答ありがとうございます。
x-fileを添付させて頂きます。

これは小さいのでしょうか?
普通のサイズがわからないのですがどれくらいが適正なのでしょうか?

Re:3Dゲームでカメラの位置

Posted: 2010年3月23日(火) 22:40
by softya
DXライブラリ置き場のサンプルを改造して表示してみました。
やはり小さいですね。DXライブラリのデフォルトのカメラで扱うには、この数十倍のモデルスケールが欲しいです。
とりあえず単位はcm(メートル)だと仮定して話しますが、このプログラムは100cm上(Z方向)からXY平面を見下ろしています。
カーソルでX,Y方向にカメラが移動しますが、注視点は(0,0,0)です。
XY平面を表すメッシュは10cm単位で書いてあります。
お試しください。

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
VECTOR CameraPos ;

// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}

// モデルの読み込み
ModelHandle = MV1LoadModel( "chr.x" ) ;
//MV1SetScale(ModelHandle,VGet(20.0,20.0,20.0));

// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;

// カメラの座標を初期化
CameraPos.x = 0.0f ;
CameraPos.y = 0.0f ;
CameraPos.z = 100.0f ;

// ESCキーが押されるかウインドウが閉じられるまでループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
clsDx();
// 画面をクリア
ClearDrawScreen() ;

// 方向キーでカメラの座標を移動
if( CheckHitKey( KEY_INPUT_UP ) == 1 )
{
CameraPos.y += 1.0f ;
}
if( CheckHitKey( KEY_INPUT_DOWN ) == 1 )
{
CameraPos.y -= 1.0f ;
}
if( CheckHitKey( KEY_INPUT_LEFT ) == 1 )
{
CameraPos.x -= 1.0f ;
}
if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 )
{
CameraPos.x += 1.0f ;
}
printfDx( "camera(%f,%f,%f)\n" , CameraPos.x, CameraPos.y, CameraPos.z );

// カメラの位置と注視点をセット、注視点は原点
SetCameraPositionAndTarget_UpVecY( CameraPos, VGet( 0.0f, 0.0f, 0.0f ) ) ;

// XY平面を描画
for( float x= -100.0f ; x<=100.0f ; x+=10.0f ) {
DrawLine3D( VGet( x, -100.0f, 0.0f ), VGet( x, 100.0f, 0.0f ), GetColor( 255,255,255 ) ) ;
}
for( float y= -100.0f ; y<=100.0f ; y+=10.0f ) {
DrawLine3D( VGet( -100.0f, y, 0.0f ), VGet( 100.0f, y, 0.0f ), GetColor( 255,255,255 ) ) ;
}
// DrawLine3D( VGet( 0.0f, 0.0f, -100.0f ), VGet( 0.0f, 0.0f, 100.0f ), GetColor( 255,255,255 ) ) ;

// モデルの描画
MV1DrawModel( ModelHandle ) ;

// 裏画面の内容を表画面に反映
ScreenFlip() ;
}

// DXライブラリの後始末
DxLib_End() ;

// ソフトの終了
return 0 ;
}

Re:3Dゲームでカメラの位置

Posted: 2010年3月24日(水) 03:03
by SHIM
出来ました><
ありがとうございます。
これからは物体を大きくして表示します。
ありがとうございました。