ページ 11

プログラムを実行すると動作が停止する

Posted: 2014年9月17日(水) 11:18
by ハインブルーム
初めての質問です。

3Dプログラミングを勉強しようと思い、
新・ゲームプログラミングの館さんの
「3d.1 3Dモデルを表示してみよう」でプロジェクト一式をダウンロードしてみたのですが、
実行するとコンパイルは通るのですが、ミクちゃんがでるとすぐに
「3Dsample.exe は動作を停止しました」と、出てきてプログラムの終了をしなければなりません。

その後、「3d.2 カメラを回転させてみよう」のプログラムを書き足してみたのですが、状況は変わりません。

どうしたらいいのでしょうか?

コード:

#include <DxLib.h>
#include <math.h>

static const float ROTATE_SPEED = DX_PI_F/90;

void rotate( float* x, float* y, const float ang, const float mx, const float my )
{
	const float ox = * x-mx, oy = * y-my;
	* x =  ox * cos(ang) + oy * sin(ang);
	* y = -ox * sin(ang) + oy * cos(ang);
	* x += mx;
	* y += my;
}

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
	ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );

	float cameraX = 0, cameraZ = -20;
	const float targetX = 0, targetZ = 0;

	//3Dモデルの読み込み
	int ModelHandle = MV1LoadModel( "dat/Lat式ミク/Lat式ミクVer2.3_Normal.pmd" ) ;

	//奥行0.1~1000までをカメラの描画範囲とする
	SetCameraNearFar( 0.1f, 1000.0f ) ;

	while(!ScreenFlip()&&!ProcessMessage()&&!ClearDrawScreen())
	{
		if( CheckHitKey(KEY_INPUT_LEFT) > 0 )
		{
			rotate(&cameraX, &cameraZ, +ROTATE_SPEED, targetX, targetZ);
		}
		if( CheckHitKey(KEY_INPUT_RIGHT) > 0 )
		{
			rotate(&cameraX, &cameraZ, -ROTATE_SPEED, targetX, targetZ);
		}

		SetCameraPositionAndTarget_UpVecY( VGet( cameraX, 10, cameraZ ), VGet( targetX, 10.0f, targetZ ) ) ;

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

	}

	DxLib_End();
	return 0;
} 
自分で確認をしましたが、間違いはないと思います。
よろしくお願いします。

Re: プログラムを実行すると動作が停止する

Posted: 2014年9月17日(水) 13:24
by softya(ソフト屋)
プログラムコードよりも、OS、ビデオカード・ドライバ、ハードウェア、DXライブラリのバージョンが問題になりそうです。
まず正確な「3Dsample.exe は動作を停止しました」の時に出るメッセージと、実行時に出来るLog.txtファイルの内容をコピペして貼っていただけませんか?
それで大体把握できると思います。

Re: プログラムを実行すると動作が停止する

Posted: 2014年9月17日(水) 13:32
by ハインブルーム
3Dsample.exe

3Dsample.exeは動作を停止しました

問題が発生したため、プログラムが正しく動作しなくなりました。
プログラムは閉じられ、解決策がある場合はWindowsから通知されます。

ここから下がLog.txtです。

0:システムの情報を出力します
3: DXライブラリ Ver3.10a
4: 論理プロセッサの数 : 4
7: OS Windows7 ( Build 7601 Service Pack 1 )
110: CPU動作速度:大体2.29GHz
111: MMX命令を使用します
111: SSE命令が使用可能です
112: SSE2命令が使用可能です
112: CPUベンダ:GenuineIntel
115: CPU名:Intel(R) Core(TM) i5-4200U CPU @ 1.60GHz
116:COMの初期化... 成功しました
117:メモリ総量:8073.11MB 空きメモリ領域:5636.36MB
120:タイマーの精度を検査します
121:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60
122: パフォーマンスカウンターを使用します タイマー精度 : 2240.927000 KHz
123: ソフトの二重起動検査... 二重起動はされていませんでした
125:ウインドウクラスを登録します... 登録に成功しました
127:ウインドウモード起動用のウインドウを作成します
134:ウインドウの作成に成功しました
135:ウインドウを表示します
197:IMEを無効にしました
199:ウインドウスタイルをウインドウモード用に変更します... 完了
220:DirectInput関係初期化処理
221: XInput DLL の読み込み中... 成功
224: DirectInput7 の取得中... 成功
229: 引き続き初期化処理... 初期化成功
234: ジョイパッドの初期化...
236: ジョイパッドの初期化は正常に終了しました
237: マウスデバイスの初期化... 初期化成功
239: キーボードデバイスの初期化... 初期化成功
241:DirectInput 関連の初期化は正常に終了しました
243:DirectSound の初期化を行います
243:DirectSound インターフェースの取得を行います.... 成功
246:引き続きインターフェースの初期化処理... 成功
548: DirectSound デバイスを列挙します
550: モジュール名: ドライバ記述:プライマリ サウンド ドライバー
552: モジュール名:{0.0.0.00000000}.{b04cd362-bad4-4145-b5cf-6ab7ced17d48} ドライバ記述:Speakers / HP (IDT High Definition Audio CODEC)
553: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz
554: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB

555: 利用可能サンプリング精度
556: プライマリ 16bit = OK 8bit = OK
557: セカンダリ 16bit = OK 8bit = OK

558: 利用可能チャンネル
559: プライマリ MONO = OK STEREO = OK
559: セカンダリ MONO = OK STEREO = OK

560:DirectSound の初期化は正常に終了しました
564:DirectDraw オブジェクトの取得を行います.... 成功
569:引き続き初期化処理... 初期化に成功しました
582:IDirect3D9Ex オブジェクトを取得します.... 成功
584:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します
851:成功
852:Driver:igdumdim32.dll Description:Intel(R) HD Graphics Family
853:画面のフォーマットは D3DFMT_X8R8G8B8 です
853:Zバッファのフォーマットは D3DFMT_D16 です
854:16bit カラーフォーマットは D3DFMT_R5G6B5 です
854:32bit カラーフォーマットは D3DFMT_X8R8G8B8 です
855:アルファ付き 16bit カラーフォーマットは D3DFMT_A4R4G4B4 です
855:アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です
856:アルファテスト用 16bit カラーフォーマットは D3DFMT_A1R5G5B5 です
856:アルファテスト用 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です
857:DXT1テクスチャフォーマットはD3DFMT_DXT1 です
857:DXT2テクスチャフォーマットはD3DFMT_DXT2 です
858:DXT3テクスチャフォーマットはD3DFMT_DXT3 です
859:DXT4テクスチャフォーマットはD3DFMT_DXT4 です
859:DXT5テクスチャフォーマットはD3DFMT_DXT5 です
860:描画用 16bit カラーフォーマットは D3DFMT_R5G6B5 です
860:描画用 32bit カラーフォーマットは D3DFMT_X8R8G8B8 です
860:描画用アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です
861:描画用ABGR整数16ビット型カラーフォーマットは D3DFMT_A16B16G16R16 です
861:描画用ABGR浮動小数点16ビット型カラーフォーマットは D3DFMT_A16B16G16R16F です
862:描画用ABGR浮動小数点32ビット型カラーフォーマットは D3DFMT_A32B32G32R32F です
863:描画用1チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8R8G8B8 です
863:描画用1チャンネル整数16ビット型カラーフォーマットは D3DFMT_G16R16 です
864:描画用1チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_R16F です
864:描画用1チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_R32F です
865:描画用2チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8B8G8R8 です
865:描画用2チャンネル整数16ビット型カラーフォーマットは D3DFMT_G16R16 です
865:描画用2チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_G16R16F です
866:描画用2チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_G32R32F です
866:一度に描画できるプリミティブの最大数:1048575
867:対応している最大頂点インデックス:16777215
867:同時にレンダリングできるバッファの数:4
868:最大テクスチャサイズ 幅:8192 高さ:8192
868:テクスチャステージテンポラリレジスタ:使用可
868:減算合成のハードウェア対応:ネイティブ
869:ハードウェア頂点シェーダーバージョンコード:300
869:エミュレーション頂点シェーダーバージョンコード:エミュレーション無し
870:ピクセルシェーダーバージョンコード:300
883:バックバッファロック転送の時間:1558nsec 一時的な描画可能バッファを使用した転送の時間:1295nsec
883:バックバッファロックを使用しません
884:Zバッファを作成します.... 成功
901:プログラマブルシェーダーを使用します

1020:フォントの初期化を行います
1022:フォントの初期化は正常に終了しました
1026:文字コードバッファの初期化を行います... 完了しました
3526:Load Texture Error : カラーチャンネル画像ファイル C:\Users\miya-cat\Documents\Visual Studio 2010\Projects\3Dsample\dat\Lat式ミク\toon01.bmp の読み込みに失敗しました

3720:Load Texture Error : カラーチャンネル画像ファイル C:\Users\miya-cat\Documents\Visual Studio 2010\Projects\3Dsample\dat\Lat式ミク\toon0.bmp の読み込みに失敗しました


これでよろしいでしょうか?

Re: プログラムを実行すると動作が停止する

Posted: 2014年9月17日(水) 13:53
by softya(ソフト屋)
モデル読み込み途中でダメだった様ですね。PCとの相性問題がありますので、DXライブラリを最新にすると大丈夫かもしれません。
「DXライブラリ置き場 ダウンロードページ」
http://homepage2.nifty.com/natupaji/DxLib/dxdload.html
こちらにありますが、差し替え方は分かりますか?

Re: プログラムを実行すると動作が停止する

Posted: 2014年9月17日(水) 14:12
by ハインブルーム
張っていただいたページの一番上のものでよろしいのでしょうか?

差し替え方がわからないので教えていただけるとうれしいです。

Re: プログラムを実行すると動作が停止する

Posted: 2014年9月17日(水) 14:41
by softya(ソフト屋)
そうです。一番上のVisualC++用ですね。
ダウンロードしたら解凍してもらって、
「プロジェクトに追加すべきファイル_VC用」
の中身をすでに解凍済みである
「3Dsample\DxLib」
に同じファイル群があると思うので上書きコピーしてください。

Re: プログラムを実行すると動作が停止する

Posted: 2014年9月17日(水) 15:12
by ハインブルーム
ダウンロードして
「DxLib_VC3_12e(1).exe」というアプリケーションを実行したところ、

7-Zip SFX 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18

Processing archive: C:\Users\miya-cat\Downloads\DxLib_VC3\12e (1).exe

file DxLib_VC\サンプルプログラム実行用フォルダ\test.wav
already exists. Overwrite with
DxLib_VC\サンプルプログラム実行用フォルダ\test.wav?
(Y)es / (N)0 / (A)lways / (S)kip all / A(u)to rename all / (Q)uit?


と、表示されて止まります。

あと、一番最初にダウンロードしたDXライブラリが最新のものだったらしく、
「DxLib_VC3_12e.exe」と「DxLib_VC3_12e(1).exe」の二つがある状態です。

このまま「DxLib_VC3_12e(1).exe」を解凍して進めていっても同じように動作が停止してしまいませんでしょうか?

Re: プログラムを実行すると動作が停止する

Posted: 2014年9月17日(水) 15:23
by softya(ソフト屋)
プログラミングを行うものとしてエラーメッセージをちゃんと理解することは非常に大切です。
「already exists. Overwrite with」と出ているんですよね? 意味は調べましたか? 調べたなら自ずと対応は分かるはずです。
こういうのを読み飛ばさないことが、プログラミングの手始めに大事だと思ってください。

Re: プログラムを実行すると動作が停止する

Posted: 2014年9月17日(水) 15:54
by ハインブルーム
先ほどはすみませんでした。

すべてを上書きし、その後「3Dsample\DxLib」に上書きコピーしたのですが、状況は変わりませんでした。

同じことを数回やってみたのですがやはりだめでした。
もしかしてハードウェアのほうに問題があるのでしょうか?

Re: プログラムを実行すると動作が停止する

Posted: 2014年9月17日(水) 16:50
by softya(ソフト屋)
あっと、こちらこそすいません。リビルドをしないとライブラリが差し替わらないと説明していませんでした。
リビルドに成功すればLog.txtの
3: DXライブラリ Ver3.10a
が書き換わるはずです。

Re: プログラムを実行すると動作が停止する

Posted: 2014年9月18日(木) 10:55
by ハインブルーム
リビルトをして実行をしたら動いてくれました!

ありがとうございました!