次のプログラムを実行しても2Dのものが表示されません
どうすれば3D空間に3Dの物体と2Dのものが一緒に表示されるのでしょうか?
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
int Rc=0,Jump=0,Jc=0;//Rcループカウンター,Jumpジャンプフラッグ,Jcジャンプカウンター
// Zバッファを有効にする
SetUseZBuffer3D( TRUE ) ;
// Zバッファへの書き込みを有効にする
SetWriteZBuffer3D( TRUE ) ;
float MYX=320,MYY=240,MYZ=0;
float Range, Atten0, Atten1, Atten2 ;
int KabeModel=MV1LoadModel( "Kabe.mqo" ) ;
int FrameNo=0;
int i;
int j;
Range = 2000.0f ;
Atten0 = 0.0f ;
Atten1 = 0.0006f ;
Atten2 = 0.0f ;
VERTEX3D Vertex[ 6 ] ;
char Map[ 16 ][ 16 ] =
{
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,0,1,1,1,0,1,1,0,1,1,0,
0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,
0,1,1,1,1,1,1,0,1,0,0,1,1,1,1,0,
0,1,0,1,0,0,0,0,1,0,0,1,0,0,0,0,
0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,
0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,0,
0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,0,
0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,
0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,
0,0,0,1,1,1,1,1,0,0,0,1,0,0,1,0,
0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,
0,1,1,1,0,1,0,0,0,0,1,0,1,0,1,0,
0,1,0,1,1,1,0,0,0,1,1,0,1,0,0,0,
0,1,0,1,0,0,0,1,1,1,0,0,1,1,1,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
} ;
// ライトのアンビエントカラーを赤色に変更
SetLightAmbColor( GetColorF( 0.4f, 0.0f, 0.0f, 0.0f ) ) ;
MATERIALPARAM MatParam ;
MatParam.Diffuse = GetColorF( 1.0f, 1.0f, 1.0f, 1.0f ) ; // ディフューズカラーは白
MatParam.Ambient = GetColorF( 1.0f, 1.0f, 1.0f, 1.0f ) ; // アンビエントカラーは白( ライトのアンビエントカラーをそのまま反映する )
MatParam.Specular = GetColorF( 0.0f, 0.0f, 0.0f, 0.0f ) ; // スペキュラカラーは無し
MatParam.Emissive = GetColorF( 0.0f, 0.0f, 0.0f, 0.0f ) ; // エミッシブカラー( 自己発光 )もなし
MatParam.Power = 0.0f ; // スペキュラはないので0
// マテリアルのパラメータをセット
SetMaterialParam( MatParam ) ;
ChangeLightTypePoint(
VGet( 320.0f, 1000.0f, 200.0f ),
Range,
Atten0,
Atten1,
Atten2 ) ;
while(1){
if(CheckHitKey(KEY_INPUT_LEFT)==1)MYX-=1;
if(CheckHitKey(KEY_INPUT_RIGHT)==1)MYX+=1;
if(CheckHitKey(KEY_INPUT_UP)==1)MYZ+=1;
if(CheckHitKey(KEY_INPUT_DOWN)==1)MYZ-=1;
if(CheckHitKey(KEY_INPUT_SPACE)==1){
if(Jump==0){Jump++;
Jc=Rc;
}}
if(Jc+20>=Rc){
if(Jump==1){
MYY+=3;}}
else{
if(Jump==1){
Jump++;
}
}
if(Jump==2){
MYY--;
if(MYY<240){
Jump-=2;
}
}
if(MYY>240)MYY--;
// マップを描画する
for( i = 0 ; i < 16 ; i ++ )
{
for( j = 0 ; j < 16 ; j ++ )
{
// 道ではないところは描画しない
if( Map[ i ][ j ] == 0 ) continue ;
// 壁モデルの座標を変更する
MV1SetPosition( KabeModel, VGet( j * 1000.0f, 0.0f, i * 1000.0f ) ) ;
// 4方の壁の状態で描画するフレーム番号を変更する
FrameNo = 0 ;
if( Map[ i ][ j + 1 ] == 0 ) FrameNo += 1 ;
if( Map[ i ][ j - 1 ] == 0 ) FrameNo += 2 ;
if( Map[ i + 1 ][ j ] == 0 ) FrameNo += 4 ;
if( Map[ i - 1 ][ j ] == 0 ) FrameNo += 8 ;
// 割り出した番号のフレームを描画する
MV1DrawFrame( KabeModel, FrameNo ) ;
}
}
// 3D空間上に球を描画する
DrawSphere3D( VGet( MYX, MYY, MYZ ), 80.0f, 32, GetColor( 10,24,231 ), GetColor( 100, 40, 100 ), TRUE );
// Windows システムからくる情報を処理する
if( ProcessMessage() == -1 ) break ;
// ESCキーが押されたらループから抜ける
if( CheckHitKey( KEY_INPUT_ESCAPE ) == 1 ) break ;
WaitTimer(20);
ClearDrawScreen();
Rc++;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}