トップページ > 過去ログ > 記事閲覧
3Dのゲームである状態で背景が消える
名前:タカトゥ 日時: 2012/05/17 22:52

現在サンプルの3Dアクションを参考にゲームを作っていますが不具合が発生してしましました。 色々試しているのですが原因がわからないので質問させて頂きます。 背景モデルを描画しているのですが 背景モデルの座標(あたり?)がカメラ外に出ると背景が描画されなくなってしまいます。 カメラを移動(回転)させて背景モデルの座標(あたり?)をカメラ内にすることでまた描画されます。 モデルを別のものに変えたり(サンプルのもの等)、描画距離、カメラの距離等を変更しても効果はありませんでした。 このような場合何を疑えばよいでしょうか? 必要があればプロジェクトを送信させて頂きます。

Page: 1 |

Re: 3Dのゲームである状態で背景が消える ( No.1 )
名前:いっち 日時:2012/05/19 00:58

わからないです。DXライブラリのバージョンは何をご使用でしょうか? プロジェクトをアップロードして頂ければ見てみます。
Re: 3Dのゲームである状態で背景が消える ( No.2 )
名前:タカトゥ 日時:2012/05/21 09:33

上げました ttp://ll.la/mH,z(削除しました) パスはdxです。 起動後ロード終了後に真っ暗ですがZを押せば始まります。 方向キーでキャラクター(とカメラ)が移動 Q,Wでカメラが回転するはずです。 VC++2010のプロジェクトデータです。 DXライブラリのバージョンは最新(Ver 3.07f)です。 サンプルの3Dアクションに比べるとかなりスケールが小さくなっています。 勉強中のため設計的に変なところがあるかもしれません。
Re: 3Dのゲームである状態で背景が消える ( No.3 )
名前:いっち 日時:2012/05/20 03:09

理屈は良く分かりませんが CBackGround::Init 内の以下の行をコメントにすると動作しました。 > SetUseASyncLoadFlag( TRUE ); おそらくDXライブラリの非同期読み込みにバグがあるのではないかと思います。 //- 以下、テストコード ("SimpleModel.mqo"を使用)-// // 十字キーを使用してモデルの中心座標を画面外にするとモデル全体が描画されなくなります #include "DxLib.h" struct CAMERA_INFO { VECTOR position; // Relative to Target VECTOR target; VECTOR head; }; void init_camera( CAMERA_INFO& camera ) { camera.position = VGet( 0.0f, 0.0f, -800.0f ); camera.target = VGet( 0.0f, 0.0f, 0.0f ); camera.head = VGet( 0.0f, 1.0f, 0.0f ); } int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) { // const float rot_rate = PHI_F * 2.0f / 60.0f; const float move_rate = 5.0f; ChangeWindowMode( TRUE ); SetWindowText( "DxLib:" DXLIB_VERSION_STR ); if ( DxLib_Init( ) == -1 ) return -1; int white = GetColor( 255, 255, 255 ); SetUseASyncLoadFlag( TRUE ); int mh = MV1LoadModel( "SimpleModel.mqo" ); SetUseASyncLoadFlag( FALSE ); while ( ProcessMessage() == 0 && GetASyncLoadNum() != 0 ) ; SetDrawScreen( DX_SCREEN_BACK ); CAMERA_INFO camera; init_camera( camera ); while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { ClearDrawScreen( ); if ( CheckHitKey( KEY_INPUT_SPACE ) ) { init_camera( camera ); } else { if ( CheckHitKey( KEY_INPUT_UP ) ) { camera.target = VAdd( camera.target, VScale( VNorm( camera.head ), move_rate ) ); } if ( CheckHitKey( KEY_INPUT_DOWN ) ) { camera.target = VAdd( camera.target, VScale( VNorm( camera.head ), -move_rate ) ); } if ( CheckHitKey( KEY_INPUT_LEFT ) ) { camera.target = VAdd( camera.target, VScale( VNorm( VCross( camera.position, camera.head ) ), -move_rate ) ); } if ( CheckHitKey( KEY_INPUT_RIGHT ) ) { camera.target = VAdd( camera.target, VScale( VNorm( VCross( camera.position, camera.head ) ), move_rate ) ); } if ( CheckHitKey( KEY_INPUT_Z ) ) { camera.target = VAdd( camera.target, VScale( VNorm( camera.position ), -move_rate ) ); } if ( CheckHitKey( KEY_INPUT_X ) ) { camera.target = VAdd( camera.target, VScale( VNorm( camera.position ), move_rate ) ); } } SetCameraPositionAndTargetAndUpVec( VAdd( camera.target, camera.position ), camera.target, camera.head ); DrawLine3D( VGet( 0.0f, 0.0f, 0.0f ), VGet( 1000.0f, 0.0f, 0.0f ), GetColor( 255, 0, 0 ) ); DrawLine3D( VGet( 0.0f, 0.0f, 0.0f ), VGet( 0.0f, 1000.0f, 0.0f ), GetColor( 0, 255, 0 ) ); DrawLine3D( VGet( 0.0f, 0.0f, 0.0f ), VGet( 0.0f, 0.0f, 1000.0f ), GetColor( 0, 0, 255 ) ); MV1DrawModel( mh ); DrawFormatString( 0, 0, white, "position x=%f y=%f z=%f size=%f", camera.position.x, camera.position.y, camera.position.z, VSize( camera.position ) ); DrawFormatString( 0, 20, white, "target x=%f y=%f z=%f size=%f", camera.target.x, camera.target.y, camera.target.z, VSize( camera.target ) ); DrawFormatString( 0, 40, white, "head x=%f y=%f z=%f size=%f", camera.head.x, camera.head.y, camera.head.z, VSize( camera.head ) ); ScreenFlip( ); } DxLib_End( ); return 0; }
Re: 3Dのゲームである状態で背景が消える ( No.4 )
名前:管理人 日時:2012/05/20 14:55

すみません、いっちさんが仰られている通りモデルを非同期読み込みした際に 画面外判定用の情報が正しく構築されていませんでした 修正版をアップしましたので、よろしければお使いください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) > いっちさん テスト用コードを載せていただきありがとうございます 直ぐに原因を突き止めることができました
Re: 3Dのゲームである状態で背景が消える ( No.5 )
名前:タカトゥ[解決] 日時:2012/05/20 17:50

修正されていることを確認しました。 どうもありがとうございました。

Page: 1 |