トップページ > 過去ログ > 記事閲覧
DrawPolygonIndexed3Dのインデックス
名前:N 日時: 2011/10/31 21:00

下のプログラムでScreenFlipが呼び出された時にアクセス違反が発生しプログラムが停止します。 インデックスの[3][4][5]がこの組み合わせの場合のみ発生するようですが、配列に指定するインデックスには順番規則のようなものがあるのでしょうか? #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode(1); VERTEX3D Vertex[ 4 ] ; WORD Index[ 6 ] ; SetDrawScreen(DX_SCREEN_BACK); // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } SetCameraPositionAndTarget_UpVecY( VGet(50.f,50.f,50.f), VGet( 0.0f, 0.0f, 0.0f ) ) ; // 4頂点分のデータをセット Vertex[ 0 ].pos = VGet( -10.0f, 0.0f, -10.0f ) ; Vertex[ 0 ].norm = VGet( 0.0f, 1.0f, 0.0f ) ; Vertex[ 0 ].dif = GetColorU8( 255,255,255,255 ) ; Vertex[ 1 ].pos = VGet( 10.0f, 0.0f, -10.0f ) ; Vertex[ 1 ].norm = VGet( 0.0f, 1.0f, 0.0f ) ; Vertex[ 1 ].dif = GetColorU8( 255, 0,255,255 ) ; Vertex[ 2 ].pos = VGet( -10.0f, 0.0f, 10.0f ) ; Vertex[ 2 ].norm = VGet( 0.0f, 1.0f, 0.0f ) ; Vertex[ 2 ].dif = GetColorU8( 0,255,255,255 ) ; Vertex[ 3 ].pos = VGet( 10.0f, 0.0f, 10.0f ) ; Vertex[ 3 ].norm = VGet( 0.0f, 1.0f, 0.0f ) ; Vertex[ 3 ].dif = GetColorU8( 0,255,255,255 ) ; // 2ポリゴン分のインデックスデータをセット Index[ 0 ] = 0 ; Index[ 1 ] = 1 ; Index[ 2 ] = 3 ; //ok: (2,0,3) (0,2,3) (2,3,0) (3,2,0) (3,0,2) Index[ 3 ] = 0 ; Index[ 4 ] = 3 ; Index[ 5 ] = 2 ; // 2ポリゴンの描画 DrawPolygonIndexed3D( Vertex, 4, Index, 2, DX_NONE_GRAPH, FALSE ) ; ScreenFlip(); // キー入力待ちをする WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Page: 1 |

Re: DrawPolygonIndexed3Dのインデックス ( No.1 )
名前:管理人 日時:2011/11/07 00:12

ご報告ありがとうございます 配列に指定するインデックスに特に守らなければならない規則はありません 載せていただいたプログラムを手元で実行してみましたが、エラーは発生しませんでした 手元の最新版では正常に動作するかもしれませんので、よろしければこちらをお試しになってみてください 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/DxLibGCCTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMinGWTest.exe // MinGW 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
Re: DrawPolygonIndexed3Dのインデックス ( No.2 )
名前:N 日時:2011/11/10 18:35

最新版で試してみましたが同じエラーが発生しました。DrawPolygonIndexed3Dの返り値は0なので描画は成功しているようですが、ScreenFlip内部でアクセス違反が発生しているようです。 テストはVC2010、Windows 7 Home Premium 64bitで行っています。
Re: DrawPolygonIndexed3Dのインデックス ( No.3 )
名前:いっち 日時:2011/11/16 20:27

私の環境でも問題ありませんでした。 グラフィックのドライバが最新かどうかお確かめ下さい。 それと、念のため事象発生時の Log.txt をご提供いただけますか? 関係ないとは思いますが SetDrawScreen は DxLib_Init の前で行っても無効です。
Re: DrawPolygonIndexed3Dのインデックス ( No.4 )
名前:N 日時:2011/11/17 22:11

グラフィックドライバは最新のものを使用していると思います。一応試しましたがSetDrawScreenは書いても書かなくても関係なくエラーは発生するようです。 試した所、ScreenFlipかDxLib_Endのどちらかが呼ばれた場合にエラーが起きるようです。その二つをコメントアウトした場合はエラーは発生せずにプログラムは終了します。 ログは以下のようになりました。 0:システムの情報を出力します 1: DXライブラリ Ver3.06d 3: 論理プロセッサの数 : 4 4: OS Windows7 ( Build 7601 Service Pack 1 ) 105: CPU動作速度:大体3.28GHz 106: MMX命令を使用します 107: SSE命令が使用可能です 107: SSE2命令が使用可能です 108: CPUベンダ:GenuineIntel 110: CPU名: Intel(R) Core(TM) i5-2500 CPU @ 3.30GHz 112:COMの初期化... 成功しました 115:メモリ総量:8170.27MB 空きメモリ領域:5489.27MB 116:タイマーの精度を検査します 116:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 117: パフォーマンスカウンターを使用します タイマー精度 : 3215.439000 KHz 117: ソフトの二重起動検査... 二重起動はされていませんでした 118:ウインドウクラスを登録します... 登録に成功しました 119:ウインドウモード起動用のウインドウを作成します 141:ウインドウの作成に成功しました 207:IMEを無効にしました 209:ウインドウスタイルをウインドウモード用に変更します... 完了 210:DirectInput関係初期化処理 211: DirectInput7 の取得中... 成功 230: 引き続き初期化処理... 初期化成功 233: ジョイパッドの初期化... 239: ジョイパッドの初期化は正常に終了しました 240: マウスデバイスの初期化... 初期化成功 241: キーボードデバイスの初期化... 初期化成功 242:DirectInput 関連の初期化は正常に終了しました 244:DirectSound の初期化を行います 244:DirectSound インターフェースの取得を行います.... 成功 249:引き続きインターフェースの初期化処理... 成功 291: DirectSound デバイスを列挙します 292: モジュール名: ドライバ記述:プライマリ サウンド ドライバー 293: モジュール名:{0.0.0.00000000}.{ec82d309-ab22-4e91-85a0-78d3915f9460} ドライバ記述:スピーカー (Realtek High Definition Audio) 294: モジュール名:{0.0.0.00000000}.{07018dc0-5de4-40d9-93c6-c2668dd3fe9d} ドライバ記述:Realtek Digital Output (Realtek High Definition Audio) 294: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz 295: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 295: 利用可能サンプリング精度 296: プライマリ 16bit = OK 8bit = OK 296: セカンダリ 16bit = OK 8bit = OK 297: 利用可能チャンネル 297: プライマリ MONO = OK STEREO = OK 298: セカンダリ MONO = OK STEREO = OK 299:DirectSound の初期化は正常に終了しました 303:DirectDraw オブジェクトの取得を行います.... 成功 307:引き続き初期化処理... 初期化に成功しました 325:IDirect3D9Ex オブジェクトを取得します.... 成功 328:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します 603:成功 604:Driver:nvd3dum.dll Description:NVIDIA GeForce GT 430 605:画面のフォーマットは D3DFMT_X8R8G8B8 です 606:Zバッファのフォーマットは D3DFMT_D16 です 606:16bit カラーフォーマットは D_D3DFMT_R5G6B5 です 607:32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です 607:アルファ付き 16bit カラーフォーマットは D_D3DFMT_A4R4G4B4 です 607:アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です 608:アルファテスト用 16bit カラーフォーマットは D_D3DFMT_A1R5G5B5 です 608:アルファテスト用 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です 609:DXT1テクスチャフォーマットは D_D3DFMT_DXT1 です 609:DXT2テクスチャフォーマットは D_D3DFMT_DXT2 です 610:DXT3テクスチャフォーマットは D_D3DFMT_DXT3 です 610:DXT4テクスチャフォーマットは D_D3DFMT_DXT4 です 611:DXT5テクスチャフォーマットは D_D3DFMT_DXT5 です 611:描画用 16bit カラーフォーマットは D_D3DFMT_R5G5B5 です 611:描画用 32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です 612:描画用アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です 612:描画用ABGR浮動小数点16ビット型カラーフォーマットは D_D3DFMT_A16B16G16R16F です 613:描画用ABGR浮動小数点32ビット型カラーフォーマットは D_D3DFMT_A32B32G32R32F です 613:最大テクスチャサイズ 幅:8192 高さ:8192 614:テクスチャステージテンポラリレジスタ:使用可 614:減算合成のハードウェア対応:ネイティブ 615:頂点シェーダーバージョンコード:300 615:ピクセルシェーダーバージョンコード:300 624:バックバッファロック転送の時間:1081nsec 一時的な描画可能バッファを使用した転送の時間:370nsec 625:バックバッファロックを使用しません 625:Zバッファを作成します.... 成功 633:プログラマブルシェーダーを使用します 684:フォントの初期化を行います 688:フォントの初期化は正常に終了しました 689:文字コードバッファの初期化を行います... 完了しました
Re: DrawPolygonIndexed3Dのインデックス ( No.5 )
名前:管理人 日時:2011/11/20 15:28

うーん・・・謎です・・・ プログラムが原因なのか環境が原因なのかを確認したいと思いますので、 こちらの載せて頂いたプログラムを Windows7 64bit + VisualStudio 2010 の環境で コンパイルした実行ファイルを Nさんの環境で正常に動作するかお試しになってみていただけないでしょうか? https://dxlib.xsrv.jp/file/DrawPolygonIndexed3DTest.zip ( exe ファイルを zip で圧縮しています ) 手元の Win7 64bit 環境ではエラーが発生せずポリゴンが描画されることを確認しています
Re: DrawPolygonIndexed3Dのインデックス ( No.6 )
名前:N(解決) 日時:2011/11/20 23:12

グラフィックドライバを更新したと思っていたのですが、もう一度確認した所していなかったようなのでドライバーのバージョンを285.62で試し、問題無く動くことが分かりました。 私の確認不足でお手数をお掛けして申し訳ありませんでした。 管理人様・いっち様、ありがとうございました。

Page: 1 |