いつも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 ; // ソフトの終了
}
どうかよろしくお願いします。