載せていただいたプログラムで以前のバージョンとの描画結果の違いを確認しました
ただ、こちらは仕様となります
関数リファレンスの DrawPolygon3D の解説にあります通り、DrawPolygon3D で使用する
グラフィックハンドルの画像のサイズは 2 の n乗サイズである必要があります
もし 2 の n乗サイズ以外の画像を使用される場合は、DXライブラリのバージョンや
プログラムを実行するPCの環境によってグラフィックハンドルが使用するテクスチャのサイズが
変化しますので、非公開関数の GetGraphTextureSize を使用してどのようなテクスチャサイズを
使用していても同じ描画結果が得られるようなプログラムにする必要があります
載せていただいたプログラムを GetGraphSize と GetGraphTextureSize を使用して
バージョンや環境が異なっても同じ描画結果が得られるようにしてみましたので、
よろしければご覧ください m(_ _)m
#include "DxLib.h"
#include <math.h>
#define PI 3.1415926535897932384626433832795
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE);
int handle[2], i;
int GraphSizeX[2];
int GraphSizeY[2];
int GraphTextureSizeX[2];
int GraphTextureSizeY[2];
int Charcter=0;
int MoveFrame=0;
int MoveFlag=0;
VERTEX3D CharcterVertex[12];
VECTOR RCAngle;
RCAngle.x=0.f;
RCAngle.y=0.f;
RCAngle.z=0.f;
if( DxLib_Init() == -1 )
return -1;
SetDrawScreen( DX_SCREEN_BACK ) ;
handle[0] = LoadGraph("test1.bmp");//表
handle[1] = LoadGraph("test6.bmp");//裏
for(i = 0;i < 2; ++i) {
GetGraphSize( handle[i], &GraphSizeX[i], &GraphSizeY[i] );
GetGraphTextureSize( handle[i], &GraphTextureSizeX[i], &GraphTextureSizeY[i] );
}
for(i = 0; i < 12; ++i) {
CharcterVertex[i].dif=GetColorU8(255,255,255,255);
CharcterVertex[i].spc=GetColorU8(0,0,0,0);
CharcterVertex[i].sv=0.f;
}
SetUseCullingFlag( TRUE );
//SetUseBackCulling(DX_CULLING_LEFT);
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// メインループ(ESCキーが押されたらループを抜ける)
while( ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0 )
{
// 画面のクリア
ClearDrawScreen() ;
if(MoveFrame==0){
if(CheckHitKey(KEY_INPUT_LEFT)==1){
MoveFrame=12;//移動フレーム
MoveFlag=0;
}
if(CheckHitKey(KEY_INPUT_RIGHT)==1){
MoveFrame=12;//移動フレーム
MoveFlag=1;
}
}
if(MoveFrame>0){
if(MoveFlag==1){
RCAngle.y+=DX_PI_F/12;
}else{
RCAngle.y-=DX_PI_F/12;
}
if(MoveFrame==6)
Charcter=!Charcter;
MoveFrame--;
}
MATRIX TransformMatrix ;
SetUseLighting(false) ;
SetDrawBright( 255,255,255 );
SetDrawMode( DX_DRAWMODE_BILINEAR );
SetDrawBlendMode( DX_BLENDMODE_ALPHA,255);
// 回転( x, y, z軸回転の順 )+座標移動行列の作成
TransformMatrix = MGetRotX( RCAngle.x ) ;
TransformMatrix = MMult( TransformMatrix, MGetRotY( RCAngle.y ) ) ;
TransformMatrix = MMult( TransformMatrix, MGetRotZ( RCAngle.z ) ) ;
TransformMatrix = MMult( TransformMatrix, MGetTranslate( VGet( 320.f, 240.f, 0.0f) ) ) ;
// 行列を使ってワールド座標を算出
CharcterVertex[ 0 ].pos = VTransform( VGet( -GraphSizeX[Charcter]/2.0f, GraphSizeY[Charcter]/2.0f, 0 ), TransformMatrix ) ;
CharcterVertex[ 1 ].pos = VTransform( VGet( GraphSizeX[Charcter]/2.0f, GraphSizeY[Charcter]/2.0f, 0 ), TransformMatrix ) ;
CharcterVertex[ 2 ].pos = VTransform( VGet( -GraphSizeX[Charcter]/2.0f, -GraphSizeY[Charcter]/2.0f, 0 ), TransformMatrix ) ;
CharcterVertex[ 3 ].pos = VTransform( VGet( GraphSizeX[Charcter]/2.0f, -GraphSizeY[Charcter]/2.0f, 0 ), TransformMatrix ) ;
CharcterVertex[ 4 ].pos = CharcterVertex[ 2 ].pos ;
CharcterVertex[ 5 ].pos = CharcterVertex[ 1 ].pos ;
CharcterVertex[0].u=0.f;
CharcterVertex[0].v=0.f;
CharcterVertex[1].u=(float)GraphSizeX[Charcter]/GraphTextureSizeX[Charcter];
CharcterVertex[1].v=0.f;
CharcterVertex[2].u=0.f;
CharcterVertex[2].v=(float)GraphSizeY[Charcter]/GraphTextureSizeY[Charcter];
CharcterVertex[3].u=(float)GraphSizeX[Charcter]/GraphTextureSizeX[Charcter];
CharcterVertex[3].v=(float)GraphSizeY[Charcter]/GraphTextureSizeY[Charcter];
CharcterVertex[4]=CharcterVertex[2];
CharcterVertex[5]=CharcterVertex[1];
// 行列を使って法線を算出
CharcterVertex[ 0 ].norm = VTransformSR( VGet( 0.0f, 0.0f, -1.0f ), TransformMatrix ) ;
CharcterVertex[ 1 ].norm = CharcterVertex[ 0 ].norm ;
CharcterVertex[ 2 ].norm = CharcterVertex[ 0 ].norm ;
CharcterVertex[ 3 ].norm = CharcterVertex[ 0 ].norm ;
CharcterVertex[ 4 ].norm = CharcterVertex[ 0 ].norm ;
CharcterVertex[ 5 ].norm = CharcterVertex[ 0 ].norm ;
if(Charcter==0)
DrawPolygon3D( &CharcterVertex[0], 2, handle[0], true );
else
DrawPolygon3D( &CharcterVertex[0], 2, handle[1], true );
CharcterVertex[6] = CharcterVertex[0];
CharcterVertex[7] = CharcterVertex[1];
CharcterVertex[8] = CharcterVertex[2];
CharcterVertex[9] = CharcterVertex[3];
CharcterVertex[6].pos = CharcterVertex[1].pos;
CharcterVertex[7].pos = CharcterVertex[0].pos;
CharcterVertex[8].pos = CharcterVertex[3].pos;
CharcterVertex[9].pos = CharcterVertex[2].pos;
CharcterVertex[10] = CharcterVertex[8];
CharcterVertex[11] = CharcterVertex[7];
if(Charcter==0)
DrawPolygon3D( &CharcterVertex[6], 2, handle[0], true );
else
DrawPolygon3D( &CharcterVertex[6], 2, handle[1], true );
SetDrawMode(DX_DRAWMODE_NEAREST);
ScreenFlip();
}
DxLib_End() ;
return 0 ;
}