トップページ > 記事閲覧
スクリーンへの3Dオブジェクトの描画がおかしくなる
名前:シミュン 日時: 2015/11/19 11:33

いつもDXライブラリにはお世話になっております。 MakeScreen関数で作成したスクリーンに3Dオブジェクトを描画した後、視点を変えるとうまく描画されなくなります。 何か必要な処理を忘れているのか、バグなのか判別がつきませんでしたので、お力添えをいただけたら幸いです。 下がテストコードになります。 裏画面には球体と3Dモデルを描画し、スクリーンには白く塗りつぶした後、球体と3Dモデルを同様に描画しています。 矢印でカメラを上下左右に動かすと、スクリーンの画像だけ描画がおかしくなります。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode(TRUE); if( DxLib_Init() == -1 ) return -1 ; SetDrawScreen( DX_SCREEN_BACK ) ; int screen = MakeScreen(128,128,true); VECTOR CameraPos ; CameraPos.x = 0.0f ; CameraPos.y = 0.0f ; CameraPos.z = -200.0f ; int ModelHandle = MV1LoadModel( "DxChara.x" ) ; MV1SetScale(ModelHandle,VGet(0.1f,0.1f,0.1f)); while(!ProcessMessage()) { ClearDrawScreen(); if( CheckHitKey( KEY_INPUT_UP ) == 1 ) { CameraPos.y += 20.0f ; } if( CheckHitKey( KEY_INPUT_DOWN ) == 1 ) { CameraPos.y -= 20.0f ; } if( CheckHitKey( KEY_INPUT_LEFT ) == 1 ) { CameraPos.x -= 20.0f ; } if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 ) { CameraPos.x += 20.0f ; } //スクリーンに描画 SetDrawScreen( screen ) ; FillGraph(screen,255,255,255,255); SetUseZBuffer3D( TRUE ) ; SetWriteZBuffer3D( TRUE ) ; SetCameraPositionAndTarget_UpVecY( CameraPos, VGet( 0.0f, 0.0f, 0.0f ) ) ; DrawSphere3D(VGet(50,100,200),50,64,GetColor(0,255,255),GetColor(255,255,255),true); MV1DrawModel( ModelHandle ) ; SetUseZBuffer3D( FALSE ) ; SetWriteZBuffer3D( FALSE ) ; //裏画面に描画 SetDrawScreen( DX_SCREEN_BACK ) ; SetUseZBuffer3D( TRUE ) ; SetWriteZBuffer3D( TRUE ) ; SetCameraPositionAndTarget_UpVecY( CameraPos, VGet( 0.0f, 0.0f, 0.0f ) ) ; DrawSphere3D(VGet(50,100,200),50,64,GetColor(0,255,255),GetColor(255,255,255),true); MV1DrawModel( ModelHandle ) ; SetUseZBuffer3D( FALSE ) ; SetWriteZBuffer3D( FALSE ) ; DrawGraph(300,300,screen,true); // DrawFormatString(0,0,GetColor(255,255,255),"x:%f,y:%f,z:%f",GetCameraPosition().x,GetCameraPosition().y,GetCameraPosition().z); ScreenFlip() ; } WaitKey() ; // キー入力待ち DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } どうかよろしくお願いします。
メンテ

Page: 1 |

Re: スクリーンへの3Dオブジェクトの描画がおかしくなる ( No.1 )
名前:yumetodo 日時:2015/11/20 02:22

>SetUseZBuffer3D( TRUE ) ; >SetWriteZBuffer3D( TRUE ) ; あれ、これってMakeScreenの前にやるものじゃなかったでしたっけ(間違えてたらすみません)
メンテ
Re: スクリーンへの3Dオブジェクトの描画がおかしくなる ( No.2 )
名前:管理人 日時:2015/11/20 02:26

裏画面は ClearDrawScreen() ; でZバッファ( 3D描画物の前後関係を処理するためのバッファ )が クリアされているのに対して、MakeScreen で作成したスクリーンに対しては ClearDrawScreen() ; による Zバッファのクリアがされていないのが原因です( FillGraph でカラーバッファはクリアされますが、 Zバッファには影響を与えないので・・・ ) SetDrawScreen( screen ) ; の後の箇所に ClearDrawScreen() ; を加えていただければ 正常に描画されるようになりますので、よろしければお試しください m(_ _)m > yumetodoさん いえ、SetUseZBuffer3D や SetWriteZBuffer3D は SetDrawBlendMode や SetDrawMode のように 描画処理の設定なので、使用する位置は間違っていません
メンテ
Re: スクリーンへの3Dオブジェクトの描画がおかしくなる ( No.3 )
名前:シミュン(解決) 日時:2015/11/20 12:59

> yumetodo様 結果的に間違っていたようですが、回答していただきありがとうございました。 > 管理人様 解決しました! ClearDrawScreenでスクリーン画像のZバッファをクリアする必要があるというのは盲点でした。 迅速な回答ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存