#28
by Math » 6年前
[VS2017 Community の場合:開発車用コマンドプロンプトを使用したDXライブラリのコンパイル]
いま
d:\dxlib に
DxLib_VC\プロジェクトに追加すべきファイル_VC用の内容を置いて
メイクファイルを下記のように書きます。
g.mak
コード:
TARGETNAME=main
C_FLAGS=/c /TP /EHsc /D "_MBCS" /MT /Id:\dxlib /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /W3
LINK_FLAGS=/SUBSYSTEM:WINDOWS /LIBPATH:d:\dxlib "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib"
ALL:
cl $(C_FLAGS) $(TARGETNAME).cpp
link /out:$(TARGETNAME).exe $(LINK_FLAGS) $(TARGETNAME).obj
$(TARGETNAME).exe
ソースファイルを
http://dixq.net/g/
3d.02 カメラを回転してみようう からお借りして
main.cpp
コード:
#include <math.h>
#include <DxLib.h>
static const float ROTATE_SPEED = DX_PI_F/90;//回転スピード
// (x,y)の点を(mx,my)を中心にang角回転する
void rotate(float *x, float *y, const float ang, const float mx, const float my){
const float ox = *x-mx, oy = *y-my;
*x = ox * cos(ang) + oy * sin(ang);
*y = -ox * sin(ang) + oy * cos(ang);
*x += mx;
*y += my;
}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );
float cameraX=0, cameraZ=-20; //カメラの座標
const float targetX=0, targetZ=0;//カメラの視線の先ターゲットの座標
//3Dモデルの読み込み
int ModelHandle = MV1LoadModel( "G:/dat/Lat式ミク/Lat式ミクVer2.3_Normal.pmd" ) ;
//奥行0.1~1000までをカメラの描画範囲とする
SetCameraNearFar( 0.1f, 1000.0f ) ;
while(!ScreenFlip()&&!ProcessMessage()&&!ClearDrawScreen()){
if( CheckHitKey(KEY_INPUT_LEFT) > 0 ){//左キーが押されていたら
rotate(&cameraX, &cameraZ, +ROTATE_SPEED, targetX, targetZ);//回転
}
if( CheckHitKey(KEY_INPUT_RIGHT) > 0 ){//右キーが押されていたら
rotate(&cameraX, &cameraZ, -ROTATE_SPEED, targetX, targetZ);//回転
}
//第一引数の視点から第二引数のターゲットを見る角度にカメラを設置
SetCameraPositionAndTarget_UpVecY( VGet( cameraX, 10, cameraZ ), VGet( targetX, 10.0f, targetZ ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
}
DxLib_End();
return 0;
}
実行バッチファイル
g.bat
実行結果
コード:
G:\z18g\0124>g
G:\z18g\0124>nmake -f g.mak
Microsoft(R) Program Maintenance Utility Version 14.11.25508.2
Copyright (C) Microsoft Corporation. All rights reserved.
cl /c /TP /EHsc /D "_MBCS" /MT /Id:\dxlib /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /W3 main.cpp
Microsoft(R) C/C++ Optimizing Compiler Version 19.11.25508.2 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
main.cpp
main.cpp(9): warning C4244: '=': 'double' から 'float' への変換です。データが失われる可能性があります。
main.cpp(10): warning C4244: '=': 'double' から 'float' への変換です。データが失われる可能性があります。
link /out:main.exe /SUBSYSTEM:WINDOWS /LIBPATH:d:\dxlib "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" main.obj
Microsoft (R) Incremental Linker Version 14.11.25508.2
Copyright (C) Microsoft Corporation. All rights reserved.
main.exe
http://www2.koyoen.birdview.co.jp/~abcxyz/あ.jpg
http://www2.koyoen.birdview.co.jp/~abcxyz/い.jpg
ファイル
コード:
G:\z18g\0124>DIR
ドライブ G のボリューム ラベルがありません。
ボリューム シリアル番号は 9016-4EF8 です
G:\z18g\0124 のディレクトリ
2018/01/24 15:06 <DIR> .
2018/01/24 15:06 <DIR> ..
2018/01/24 18:17 16 g.bat
2018/01/24 18:27 1,554 main.cpp
2018/01/24 18:26 467 g.mak
2018/01/24 18:31 4,786 main.obj
2018/01/24 18:31 6,228,992 main.exe
2018/01/24 18:57 11,440 Log.txt
6 個のファイル 6,247,255 バイト
2 個のディレクトリ 4,492,361,728 バイトの空き領域
G:\z18g\0124>
[VS2017 Community の場合:開発車用コマンドプロンプトを使用したDXライブラリのコンパイル]
いま [color=#FF00FF]d:\dxlib[/color] に [color=#FF00FF]DxLib_VC\プロジェクトに追加すべきファイル_VC用[/color]の内容を置いて
メイクファイルを下記のように書きます。
g.mak
[code]
TARGETNAME=main
C_FLAGS=/c /TP /EHsc /D "_MBCS" /MT /Id:\dxlib /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /W3
LINK_FLAGS=/SUBSYSTEM:WINDOWS /LIBPATH:d:\dxlib "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib"
ALL:
cl $(C_FLAGS) $(TARGETNAME).cpp
link /out:$(TARGETNAME).exe $(LINK_FLAGS) $(TARGETNAME).obj
$(TARGETNAME).exe
[/code]
ソースファイルを
[url]http://dixq.net/g/[/url]
[color=#FF00FF]3d.02 カメラを回転してみようう[/color] からお借りして
main.cpp
[code]
#include <math.h>
#include <DxLib.h>
static const float ROTATE_SPEED = DX_PI_F/90;//回転スピード
// (x,y)の点を(mx,my)を中心にang角回転する
void rotate(float *x, float *y, const float ang, const float mx, const float my){
const float ox = *x-mx, oy = *y-my;
*x = ox * cos(ang) + oy * sin(ang);
*y = -ox * sin(ang) + oy * cos(ang);
*x += mx;
*y += my;
}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );
float cameraX=0, cameraZ=-20; //カメラの座標
const float targetX=0, targetZ=0;//カメラの視線の先ターゲットの座標
//3Dモデルの読み込み
int ModelHandle = MV1LoadModel( "G:/dat/Lat式ミク/Lat式ミクVer2.3_Normal.pmd" ) ;
//奥行0.1~1000までをカメラの描画範囲とする
SetCameraNearFar( 0.1f, 1000.0f ) ;
while(!ScreenFlip()&&!ProcessMessage()&&!ClearDrawScreen()){
if( CheckHitKey(KEY_INPUT_LEFT) > 0 ){//左キーが押されていたら
rotate(&cameraX, &cameraZ, +ROTATE_SPEED, targetX, targetZ);//回転
}
if( CheckHitKey(KEY_INPUT_RIGHT) > 0 ){//右キーが押されていたら
rotate(&cameraX, &cameraZ, -ROTATE_SPEED, targetX, targetZ);//回転
}
//第一引数の視点から第二引数のターゲットを見る角度にカメラを設置
SetCameraPositionAndTarget_UpVecY( VGet( cameraX, 10, cameraZ ), VGet( targetX, 10.0f, targetZ ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
}
DxLib_End();
return 0;
}
[/code]
実行バッチファイル
g.bat
[code]
nmake -f g.mak
[/code]
実行結果
[code]
G:\z18g\0124>g
G:\z18g\0124>nmake -f g.mak
Microsoft(R) Program Maintenance Utility Version 14.11.25508.2
Copyright (C) Microsoft Corporation. All rights reserved.
cl /c /TP /EHsc /D "_MBCS" /MT /Id:\dxlib /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /W3 main.cpp
Microsoft(R) C/C++ Optimizing Compiler Version 19.11.25508.2 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
main.cpp
main.cpp(9): warning C4244: '=': 'double' から 'float' への変換です。データが失われる可能性があります。
main.cpp(10): warning C4244: '=': 'double' から 'float' への変換です。データが失われる可能性があります。
link /out:main.exe /SUBSYSTEM:WINDOWS /LIBPATH:d:\dxlib "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" main.obj
Microsoft (R) Incremental Linker Version 14.11.25508.2
Copyright (C) Microsoft Corporation. All rights reserved.
main.exe
[/code]
[url]http://www2.koyoen.birdview.co.jp/~abcxyz/あ.jpg[/url]
[url]http://www2.koyoen.birdview.co.jp/~abcxyz/い.jpg[/url]
ファイル
[code]
G:\z18g\0124>DIR
ドライブ G のボリューム ラベルがありません。
ボリューム シリアル番号は 9016-4EF8 です
G:\z18g\0124 のディレクトリ
2018/01/24 15:06 <DIR> .
2018/01/24 15:06 <DIR> ..
2018/01/24 18:17 16 g.bat
2018/01/24 18:27 1,554 main.cpp
2018/01/24 18:26 467 g.mak
2018/01/24 18:31 4,786 main.obj
2018/01/24 18:31 6,228,992 main.exe
2018/01/24 18:57 11,440 Log.txt
6 個のファイル 6,247,255 バイト
2 個のディレクトリ 4,492,361,728 バイトの空き領域
G:\z18g\0124>
[/code]