|
| |
|
このページではDXライブラリの3D表現を扱うための主な関数の説明と簡単な サンプルプログラムを載せています。 | |
|
3D図形描画関係関数 | |
| DrawLine3D | 3D空間に線分を描画する |
| DrawTriangle3D | 3D空間に三角形を描画する |
| DrawSphere3D | 3D空間に球を描画する |
| DrawCapsule3D | 3D空間にカプセルを描画する |
| DrawCone3D | 3D空間に円錐を描画する |
| DrawBillboard3D | 3D空間に画像を描画する |
| DrawModiBillboard3D | 3D空間に2次元的な変形を加えた画像を描画する |
| DrawPolygon3D | 3D空間に三角形ポリゴンの集合を描画する |
| DrawPolygonIndexed3D | 3D空間に三角形ポリゴンの集合を描画する(インデックス) |
| SetMaterialUseVertDifColor | 3D図形描画のライティング計算に頂点データのディフューズカラーを使用するかどうかを設定する |
| SetMaterialUseVertSpcColor | 3D図形描画のライティング計算に頂点データのスペキュラカラーを使用するかどうかを設定する |
| SetMaterialParam | 3D図形描画のライティング計算に使用するマテリアルパラメータを設定する |
| SetUseZBuffer3D | Zバッファを使用するかどうかを設定する |
| SetWriteZBuffer3D | Zバッファに書き込みを行うかどうかを設定する |
| SetUseBackCulling | ポリゴンのバックカリングを使用するかどうかを設定する |
| SetTextureAddressModeUV | テクスチャアドレスモードを設定する |
| SetFogEnable | フォグを有効にするかどうかを設定する |
| SetFogColor | フォグの色を変更する |
| SetFogStartEnd | フォグが始まる距離と終了する距離を設定する |
| GetColorF | 不動小数点型のカラー値を取得する |
| GetColorU8 | 符号なし整数8ビットのカラー値を取得する |
|
カメラ関数 | |
| SetCameraNearFar | カメラの 手前クリップ距離と 奥クリップ距離を設定する |
| SetCameraPositionAndTarget_UpVecY | カメラの視点、注視点を設定する( 上方向はY軸から算出 ) |
| SetCameraPositionAndTargetAndUpVec | カメラの視点、注視点、上方向を設定する |
| SetCameraPositionAndAngle | カメラの視点、垂直回転角度、水平回転角度、捻り回転角度を設定する |
| SetCameraViewMatrix | ビュー行列を直接設定する |
| SetupCamera_Perspective | 遠近法カメラをセットアップする |
| SetupCamera_Ortho | 正射影カメラをセットアップする |
| SetupCamera_ProjectionMatrix | 射影行列を設定する |
| SetCameraDotAspect | カメラのドットアスペクト比を設定する |
| ConvWorldPosToScreenPos | ワールド座標をスクリーン座標に変換する |
| ConvScreenPosToWorldPos | スクリーン座標をワールド座標に変換する |
| SetCameraScreenCenter | 画面上でのカメラが見ている映像の中心座標を設定する |
|
ライト関数 | |
| SetUseLighting | ライティング計算処理を使用するかどうかを設定する |
| SetGlobalAmbientLight | グローバルアンビエントライトカラーを設定する |
|
標準ライト関数 | |
| ChangeLightTypeDir | 標準ライトのタイプをディレクショナルライトにする |
| ChangeLightTypePoint | 標準ライトのタイプをポイントライトにする |
| ChangeLightTypeSpot | 標準ライトのタイプをスポットライトにする |
| SetLightEnable | 標準ライトの有効、無効をセットする |
| SetLightDifColor | 標準ライトのディフューズカラーを設定する |
| SetLightSpcColor | 標準ライトのスペキュラカラーを設定する |
| SetLightAmbColor | 標準ライトのアンビエントカラーを設定する |
| SetLightDirection | 標準ライトの方向を設定する |
| SetLightPosition | 標準ライトの位置を設定する |
| SetLightRangeAtten | 標準ライトの有効距離と距離減衰パラメータを設定する |
| SetLightAngle | 標準ライトの照射角度パラメータを設定する |
| GetLightType | 標準ライトのタイプを取得する |
| GetLightEnable | 標準ライトの有効、無効を取得する |
| GetLightDifColor | 標準ライトのディフューズカラーを取得する |
| GetLightSpcColor | 標準ライトのスペキュラカラーを取得する |
| GetLightAmbColor | 標準ライトのアンビエントカラーを取得する |
| GetLightDirection | 標準ライトの向きを取得する |
| GetLightPosition | 標準ライトの位置を取得する |
| GetLightRangeAtten | 標準ライトの有効距離と距離減衰パラメータを取得する |
| GetLightAngle | 標準ライトの照射角度パラメータを取得する |
|
ライトハンドル関数 | |
| CreateDirLightHandle | ディレクショナルタイプのライトハンドルを作成する |
| CreatePointLightHandle | ポイントタイプのライトハンドルを作成する |
| CreateSpotLightHandle | スポットタイプのライトハンドルを作成する |
| DeleteLightHandle | ライトハンドルを削除する |
| DeleteLightHandleAll | ライトハンドルを全て削除する |
| SetLightTypeHandle | ライトハンドルのタイプを変更する |
| SetLightEnableHandle | ライトハンドルのライトの有効、無効を設定する |
| SetLightDifColorHandle | ライトハンドルのライトのディフューズカラーを設定する |
| SetLightSpcColorHandle | ライトハンドルのライトのスペキュラカラーを設定する |
| SetLightAmbColorHandle | ライトハンドルのライトのアンビエントカラーを設定する |
| SetLightDirectionHandle | ライトハンドルのライトの方向を設定する |
| SetLightPositionHandle | ライトハンドルのライトの位置を設定する |
| SetLightRangeAttenHandle | ライトハンドルのライトの有効距離と距離減衰パラメータを設定する |
| SetLightAngleHandle | ライトハンドルのライトの照射角度パラメータを設定する |
| GetLightTypeHandle | ライトハンドルのライトのタイプを取得する |
| GetLightEnableHandle | ライトハンドルのライトの有効、無効を取得する |
| GetLightDifColorHandle | ライトハンドルのライトのディフューズカラーを取得する |
| GetLightSpcColorHandle | ライトハンドルのライトのスペキュラカラーを取得する |
| GetLightAmbColorHandle | ライトハンドルのライトのアンビエントカラーを取得する |
| GetLightDirectionHandle | ライトハンドルのライトの方向を取得する |
| GetLightPositionHandle | ライトハンドルのライトの位置を取得する |
| GetLightRangeAttenHandle | ライトハンドルのライトの有効距離と距離減衰パラメータを取得する |
| GetLightAngleHandle | ライトハンドルのライトの照射角度パラメータを取得する |
|
算術演算関数 | |
| VGet | ベクトルを取得する |
| VAdd | 二つのベクトルを加算する |
| VSub | 二つのベクトルを減算する |
| VDot | 二つのベクトルの内積を取得する |
| VCross | 二つのベクトルの外積を取得する |
| VScale | ベクトルのスケーリングをする |
| VSize | ベクトルのサイズを取得する |
| VSquareSize | ベクトルのサイズの2乗を取得する |
| VNorm | 正規化ベクトルを取得する |
| VTransform | 行列を使ったベクトルの変換 |
| VTransformSR | 行列を使ったベクトルの変換( スケーリング+回転成分のみ ) |
| MGetIdent | 単位行列を取得する |
| MGetScale | 拡大行列を取得する |
| MGetTranslate | 平行移動行列を取得する |
| MGetRotX | X軸回転行列を取得する |
| MGetRotY | Y軸回転行列を取得する |
| MGetRotZ | Z軸回転行列を取得する |
| MGetRotAxis | 指定軸で指定角度回転する行列を取得する |
| MGetRotVec2 | ある向きからある向きへ変換する回転行列を取得する |
| MGetAxis1 | 指定の3軸上のベクトルを基本軸上のベクトルに変換する行列を取得する |
| MGetAxis2 | 基本軸上のベクトルを指定の3軸上のベクトルに変換する行列を取得する |
| MAdd | 二つの行列の足し算を行う |
| MMult | 二つの行列の乗算を行う |
| MScale | 行列のスケーリングを行う |
| MTranspose | 転置行列を取得する |
| MInverse | 逆行列を取得する |
|
衝突検出系関数 | |
| Segment_Segment_MinLength | 二つの線分の最近点間の距離を得る |
| Segment_Triangle_MinLength | 線分と三角形の最近点間の距離を得る |
| Segment_Point_MinLength | 線分と点の一番近い距離を得る |
| HitCheck_Line_Triangle | 三角形と線分の当たり判定 |
|
3Dモデル関係の関数 | |
|
モデルの読み込み・複製関係の関数 | |
| MV1LoadModel | モデルの読み込み |
| MV1DuplicateModel | 指定のモデルと同じ基礎データを使用してモデルを作成する |
| MV1DeleteModel | モデルを削除する |
|
モデル描画関数 | |
| MV1DrawModel | モデルを描画する |
| MV1DrawFrame | モデルの指定のフレームを描画する |
| MV1DrawMesh | モデルの指定のメッシュを描画する |
|
モデル基本制御関数 | |
| MV1SetPosition | モデルの座標をセットする |
| MV1GetPosition | モデルの座標を取得する |
| MV1SetScale | モデルの拡大値をセットする |
| MV1GetScale | モデルの拡大値を取得する |
| MV1SetRotationXYZ | モデルの回転値をセットする |
| MV1GetRotationXYZ | モデルの回転値を取得する |
| MV1SetRotationZYAxis | モデルのZ軸とY軸の方向をセットする |
| MV1SetMatrix | モデルの座標変換用行列をセットする |
| MV1GetMatrix | モデルの座標変換用行列を取得する |
| MV1SetVisible | モデルを描画するかどうかを変更する |
| MV1GetVisible | モデルを描画するかどうかを取得する |
| MV1SetDifColorScale | モデルのディフューズカラーのスケール値を設定する |
| MV1GetDifColorScale | モデルのディフューズカラーのスケール値を取得する |
| MV1SetSpcColorScale | モデルのスペキュラカラーのスケール値を設定する |
| MV1GetSpcColorScale | モデルのスペキュラカラーのスケール値を取得する |
| MV1SetEmiColorScale | モデルのエミッシブカラーのスケール値を設定する |
| MV1GetEmiColorScale | モデルのエミッシブカラーのスケール値を取得する |
| MV1SetAmbColorScale | モデルのアンビエントカラーのスケール値を設定する |
| MV1GetAmbColorScale | モデルのアンビエントカラーのスケール値を取得する |
| MV1GetSemiTransState | モデルに半透明要素があるかどうかを取得する |
| MV1SetOpacityRate | モデルの不透明度を設定する |
| MV1GetOpacityRate | モデルの不透明度を取得する |
| MV1SetUseZBuffer | モデルを描画する際にZバッファを使用するかどうかを設定する |
| MV1SetWriteZBuffer | モデルを描画する際にZバッファに書き込みを行うかどうかを設定する |
| MV1SetUseVertDifColor | モデル描画のライティング計算に頂点データのディフューズカラーを使用するかどうかを設定する |
| MV1SetUseVertSpcColor | モデル描画のライティング計算に頂点データのスペキュラカラーを使用するかどうかを設定する |
|
アニメーション関数 | |
| MV1AttachAnim | アニメーションをアタッチする |
| MV1DetachAnim | アニメーションをデタッチする |
| MV1SetAttachAnimTime | アタッチしているアニメーションの再生時間を設定する |
| MV1GetAttachAnimTime | アタッチしているアニメーションの再生時間を取得する |
| MV1GetAttachAnimTotalTime | アタッチしているアニメーションの総時間を取得する |
| MV1SetAttachAnimBlendRate | アタッチしているアニメーションのブレンド率を設定する |
| MV1GetAttachAnimBlendRate | アタッチしているアニメーションのブレンド率を取得する |
| MV1GetAttachAnim | アタッチしているアニメーションのアニメーション番号を取得する |
| MV1GetAnimNum | アニメーションの数を取得する |
| MV1GetAnimName | 指定番号のアニメーション名を取得する |
| MV1GetAnimIndex | 指定名のアニメーション番号を取得する |
| MV1GetAnimTotalTime | 指定番号のアニメーションの総時間を得る |
|
マテリアル関数 | |
| MV1GetMaterialNum | モデルで使用しているマテリアルの数を取得する |
| MV1GetMaterialName | 指定のマテリアルの名前を取得する |
| MV1SetMaterialDifColor | 指定のマテリアルのディフューズカラーを変更する |
| MV1GetMaterialDifColor | 指定のマテリアルのディフューズカラーを取得する |
| MV1SetMaterialSpcColor | 指定のマテリアルのスペキュラカラーを変更する |
| MV1GetMaterialSpcColor | 指定のマテリアルのスペキュラカラーを取得する |
| MV1SetMaterialEmiColor | 指定のマテリアルのエミッシブカラーを変更する |
| MV1GetMaterialEmiColor | 指定のマテリアルのエミッシブカラーを取得する |
| MV1SetMaterialAmbColor | 指定のマテリアルのアンビエントカラーを変更する |
| MV1GetMaterialAmbColor | 指定のマテリアルのアンビエントカラーを取得する |
| MV1SetMaterialSpcPower | 指定のマテリアルのスペキュラの強さを変更する |
| MV1GetMaterialSpcPower | 指定のマテリアルのスペキュラの強さを取得する |
| MV1GetMaterialDifMapTexture | 指定のマテリアルでディフューズマップとして使用されているテクスチャ番号を取得する |
| MV1GetMaterialSpcMapTexture | 指定のマテリアルでスペキュラマップとして使用されているテクスチャ番号を取得する |
| MV1GetMaterialNormalMapTexture | 指定のマテリアルで法線マップとして使用されているテクスチャ番号を取得する |
| MV1SetMaterialDrawBlendMode | 指定のマテリアルの描画ブレンドモードを変更する |
| MV1GetMaterialDrawBlendMode | 指定のマテリアルの描画ブレンドモードを取得する |
| MV1SetMaterialDrawBlendParam | 指定のマテリアルの描画ブレンドパラメータを変更する |
| MV1GetMaterialDrawBlendParam | 指定のマテリアルの描画ブレンドパラメータを取得する |
|
テクスチャ関係 | |
| MV1GetTextureNum | モデルで使用されているテクスチャの数を取得する |
| MV1GetTextureName | テクスチャの名前を取得する |
| MV1SetTextureGraphHandle | テクスチャとして使用するグラフィックハンドルを変更する |
| MV1GetTextureGraphHandle | テクスチャのグラフィックハンドルを取得する |
| MV1SetTextureAddressMode | テクスチャのアドレスモードを変更する |
| MV1GetTextureAddressModeU | テクスチャのU値のアドレスモードを取得する |
| MV1GetTextureAddressModeV | テクスチャのV値のアドレスモードを取得する |
| MV1SetTextureSampleFilterMode | テクスチャのフィルタリングモードを変更する |
| MV1GetTextureSampleFilterMode | テクスチャのフィルタリングモードを取得する |
|
フレーム関数 | |
| MV1GetFrameNum | フレームの数を取得する |
| MV1SearchFrame | 指定名のフレームをモデル中から検索する |
| MV1SearchFrameChild | 指定名のフレームを指定のフレームの子フレームの中から検索する |
| MV1GetFrameName | フレームの名前を取得する |
| MV1GetFrameParent | フレームの親フレームを取得する |
| MV1GetFrameChildNum | フレームの子フレームの数を取得する |
| MV1GetFrameChild | フレームの子フレームを取得する |
| MV1GetFramePosition | フレームの座標を取得する |
| MV1GetFrameLocalMatrix | フレームの座標変換行列を取得する |
| MV1GetFrameLocalWorldMatrix | フレームのローカル座標からワールド座標に変換する行列を取得する |
| MV1SetFrameUserLocalMatrix | フレームの座標変換行列を設定する |
| MV1ResetFrameUserLocalMatrix | フレームの座標変換行列をデフォルトに戻す |
| MV1SetFrameVisible | フレームの表示・非表示状態を変更する |
| MV1GetFrameVisible | フレームの表示・非表示状態を取得する |
| MV1SetFrameDifColorScale | フレームのディフューズカラーのスケール値を設定する |
| MV1GetFrameDifColorScale | フレームのディフューズカラーのスケール値を取得する |
| MV1SetFrameSpcColorScale | フレームのスペキュラカラーのスケール値を設定する |
| MV1GetFrameSpcColorScale | フレームのスペキュラカラーのスケール値を取得する |
| MV1SetFrameEmiColorScale | フレームのエミッシブカラーのスケール値を設定する |
| MV1GetFrameEmiColorScale | フレームのエミッシブカラーのスケール値を取得する |
| MV1SetFrameAmbColorScale | フレームのアンビエントカラーのスケール値を設定する |
| MV1GetFrameAmbColorScale | フレームのアンビエントカラーのスケール値を取得する |
| MV1GetFrameSemiTransState | フレームに半透明要素があるかどうかを取得する |
| MV1SetFrameOpacityRate | フレームの不透明度を設定する |
| MV1GetFrameOpacityRate | フレームの不透明度を取得する |
| MV1SetFrameTextureAddressTransform | フレームのテクスチャ座標変換パラメータを設定する |
| MV1ResetFrameTextureAddressTransform | フレームのテクスチャ座標変換パラメータをリセットする |
| MV1GetFrameTriangleNum | フレームに含まれるポリゴンの数を取得する |
| MV1GetFrameMeshNum | フレームに含まれるメッシュの数を取得する |
| MV1GetFrameMesh | フレームに含まれるメッシュを取得する |
|
メッシュ関数 | |
| MV1GetMeshNum | モデルに含まれるメッシュの数を取得する |
| MV1GetMeshMaterial | メッシュが使用しているマテリアルの番号を取得する |
| MV1GetMeshTriangleNum | メッシュに含まれる三角形ポリゴンの数を取得する |
| MV1SetMeshVisible | メッシュの表示・非表示状態を変更する |
| MV1GetMeshVisible | メッシュの表示・非表示状態を取得する |
| MV1SetMeshDifColorScale | メッシュのディフューズカラーのスケール値を設定する |
| MV1GetMeshDifColorScale | メッシュのディフューズカラーのスケール値を取得する |
| MV1SetMeshSpcColorScale | メッシュのスペキュラカラーのスケール値を設定する |
| MV1GetMeshSpcColorScale | メッシュのスペキュラカラーのスケール値を取得する |
| MV1SetMeshEmiColorScale | メッシュのエミッシブカラーのスケール値を設定する |
| MV1GetMeshEmiColorScale | メッシュのエミッシブカラーのスケール値を取得する |
| MV1SetMeshAmbColorScale | メッシュのアンビエントカラーのスケール値を設定する |
| MV1GetMeshAmbColorScale | メッシュのアンビエントカラーのスケール値を取得する |
| MV1SetMeshOpacityRate | メッシュの不透明度を設定する |
| MV1GetMeshOpacityRate | メッシュの不透明度を取得する |
| MV1SetMeshDrawBlendMode | メッシュの描画ブレンドモードを設定する |
| MV1GetMeshDrawBlendMode | メッシュの描画ブレンドモードを取得する |
| MV1SetMeshDrawBlendParam | メッシュの描画ブレンドパラメータを設定する |
| MV1GetMeshDrawBlendParam | メッシュの描画ブレンドパラメータを取得する |
| MV1SetMeshBackCulling | メッシュのバックカリングを行うかどうかを設定する |
| MV1GetMeshBackCulling | メッシュのバックカリングを行うかどうかを取得する |
| MV1GetMeshMaxPosition | メッシュに含まれる頂点のローカル座標での最大値を取得する |
| MV1GetMeshMinPosition | メッシュに含まれる頂点のローカル座標での最小値を取得する |
| MV1GetMeshSemiTransState | メッシュに半透明要素があるかどうかを取得する |
| MV1SetMeshUseVertDifColor | メッシュの頂点ディフューズカラーをマテリアルのディフューズカラーの代わりに使用するかどうかを設定する |
| MV1GetMeshUseVertDifColor | メッシュの頂点ディフューズカラーをマテリアルのディフューズカラーの代わりに使用するかどうかの設定を取得する |
| MV1SetMeshUseVertSpcColor | メッシュの頂点スペキュラカラーをマテリアルのスペキュラカラーの代わりに使用するかどうかを設定する |
| MV1GetMeshUseVertSpcColor | メッシュの頂点スペキュラカラーをマテリアルのスペキュラカラーの代わりに使用するかどうかの設定を取得する |
|
コリジョン( 衝突判定 )関数 | |
| MV1SetupCollInfo | コリジョン情報を構築する |
| MV1TerminateCollInfo | コリジョン情報の後始末をする |
| MV1RefreshCollInfo | コリジョン情報を更新する |
| MV1CollCheck_Line | 線分とモデルの当たり判定 |
| MV1CollCheck_Sphere | 球とモデルの当たり判定 |
| MV1CollCheck_Capsule | カプセルとモデルの当たり判定 |
| MV1CollCheck_GetResultPoly | 当たり判定結果ポリゴン配列から指定番のポリゴン情報を取得する |
| MV1CollResultPolyDimTerminate | 当たり判定結果ポリゴン配列の後始末をする |
|
参照用メッシュ関数 | |
| MV1SetupReferenceMesh | 参照用メッシュのセットアップ |
| MV1TerminateReferenceMesh | 参照用メッシュの後始末をする |
| MV1RefreshReferenceMesh | 参照用メッシュを更新する |
| MV1GetReferenceMesh | 参照用メッシュを取得する |
| 3D図形描画関数 | ||||||||||||||
| ||||||||||||||
|
サンプル 3D空間上に線分を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3D空間上に線分を描画する
DrawLine3D( VGet( 100.0f, 100.0f, 0.0f ), VGet( 300.0f, 200.0f, 0.0f ), GetColor( 255,255,255 ) ) ;
// キー入力待ちをする
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 3D空間上に三角形を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3D空間上に三角形を描画する
DrawTriangle3D(
VGet(100.0f,100.0f, 0.0f),
VGet(500.0f,400.0f, 0.0f),
VGet(600.0f,100.0f,100.0f), GetColor( 255,255,255 ), FALSE ) ;
// キー入力待ちをする
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 3D空間上に球を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Zバッファを有効にする
SetUseZBuffer3D( TRUE ) ;
// Zバッファへの書き込みを有効にする
SetWriteZBuffer3D( TRUE ) ;
// 3D空間上に球を描画する
DrawSphere3D( VGet( 320.0f, 200.0f, 0.0f ), 80.0f, 32, GetColor( 255,0,0 ), GetColor( 255, 255, 255 ), TRUE ) ;
// キー入力待ちをする
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 3D空間上にカプセルを描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Zバッファを有効にする
SetUseZBuffer3D( TRUE ) ;
// Zバッファへの書き込みを有効にする
SetWriteZBuffer3D( TRUE ) ;
// 3D空間上にカプセルを描画する
DrawCapsule3D( VGet( 320.0f, 100.0f, 0.0f ), VGet( 320.0f, 300.0f, 0.0f ), 40.0f, 8, GetColor( 0,255,0 ), GetColor( 255,255,255 ), TRUE ) ;
// キー入力待ちをする
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 3D空間上に円錐を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Zバッファを有効にする
SetUseZBuffer3D( TRUE ) ;
// Zバッファへの書き込みを有効にする
SetWriteZBuffer3D( TRUE ) ;
// 3D空間上に円錐を描画する
DrawCone3D( VGet( 320.0f, 400.0f, 0.0f ), VGet( 320.0f, 100.0f, 0.0f ), 80.0f, 16, GetColor( 0,0,255 ), GetColor( 255,255,255 ), TRUE ) ;
// キー入力待ちをする
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 3D空間上に画像を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int GrHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 画像の読み込み
GrHandle = LoadGraph( "Test1.bmp" ) ;
// 3D空間上に画像を描画
DrawBillboard3D( VGet( 320.0f, 240.0f, 100.0f ), 0.5f, 0.5f, 120.0f, 0.0f, GrHandle, TRUE ) ;
// キー入力待ちをする
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 3D空間上に変形画像を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int GrHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 画像の読み込み
GrHandle = LoadGraph( "Test1.bmp" ) ;
// 3D空間上に画像を描画
DrawModiBillboard3D( VGet( 320.0f, 240.0f, 100.0f ),
-100.0f, 200.0f,
100.0f, 200.0f,
100.0f, -200.0f,
-100.0f, -200.0f, GrHandle, TRUE ) ;
// キー入力待ちをする
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 3D空間上にポリゴンを2つ描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
VERTEX3D Vertex[ 6 ] ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 2ポリゴン分の頂点のデータをセット
Vertex[ 0 ].pos = VGet( 100.0f, 100.0f, 0.0f ) ;
Vertex[ 0 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 0 ].dif = GetColorU8( 255,255,255,255 ) ;
Vertex[ 0 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 0 ].u = 0.0f ;
Vertex[ 0 ].v = 0.0f ;
Vertex[ 0 ].su = 0.0f ;
Vertex[ 0 ].sv = 0.0f ;
Vertex[ 1 ].pos = VGet( 250.0f, 100.0f, 0.0f ) ;
Vertex[ 1 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 1 ].dif = GetColorU8( 255, 0,255,255 ) ;
Vertex[ 1 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 1 ].u = 0.0f ;
Vertex[ 1 ].v = 0.0f ;
Vertex[ 1 ].su = 0.0f ;
Vertex[ 1 ].sv = 0.0f ;
Vertex[ 2 ].pos = VGet( 100.0f, 300.0f, 0.0f ) ;
Vertex[ 2 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 2 ].dif = GetColorU8( 0,255,255,255 ) ;
Vertex[ 2 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 2 ].u = 0.0f ;
Vertex[ 2 ].v = 0.0f ;
Vertex[ 2 ].su = 0.0f ;
Vertex[ 2 ].sv = 0.0f ;
Vertex[ 3 ].pos = VGet( 400.0f, 200.0f, 0.0f ) ;
Vertex[ 3 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 3 ].dif = GetColorU8( 0,255,255,255 ) ;
Vertex[ 3 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 3 ].u = 0.0f ;
Vertex[ 3 ].v = 0.0f ;
Vertex[ 3 ].su = 0.0f ;
Vertex[ 3 ].sv = 0.0f ;
Vertex[ 4 ].pos = VGet( 600.0f, 400.0f, 0.0f ) ;
Vertex[ 4 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 4 ].dif = GetColorU8( 0, 0,255,255 ) ;
Vertex[ 4 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 4 ].u = 0.0f ;
Vertex[ 4 ].v = 0.0f ;
Vertex[ 4 ].su = 0.0f ;
Vertex[ 4 ].sv = 0.0f ;
Vertex[ 5 ].pos = VGet( 500.0f, 50.0f, 0.0f ) ;
Vertex[ 5 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 5 ].dif = GetColorU8( 255, 0,255,255 ) ;
Vertex[ 5 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 5 ].u = 0.0f ;
Vertex[ 5 ].v = 0.0f ;
Vertex[ 5 ].su = 0.0f ;
Vertex[ 5 ].sv = 0.0f ;
// 2ポリゴンの描画
DrawPolygon3D( Vertex, 2, DX_NONE_GRAPH, FALSE ) ;
// キー入力待ちをする
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 3D空間上に4つの頂点データを使用してポリゴンを2つ描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
VERTEX3D Vertex[ 4 ] ;
WORD Index[ 6 ] ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 4頂点分のデータをセット
Vertex[ 0 ].pos = VGet( 100.0f, 100.0f, 0.0f ) ;
Vertex[ 0 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 0 ].dif = GetColorU8( 255,255,255,255 ) ;
Vertex[ 0 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 0 ].u = 0.0f ;
Vertex[ 0 ].v = 0.0f ;
Vertex[ 0 ].su = 0.0f ;
Vertex[ 0 ].sv = 0.0f ;
Vertex[ 1 ].pos = VGet( 250.0f, 100.0f, 0.0f ) ;
Vertex[ 1 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 1 ].dif = GetColorU8( 255, 0,255,255 ) ;
Vertex[ 1 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 1 ].u = 0.0f ;
Vertex[ 1 ].v = 0.0f ;
Vertex[ 1 ].su = 0.0f ;
Vertex[ 1 ].sv = 0.0f ;
Vertex[ 2 ].pos = VGet( 100.0f, 300.0f, 0.0f ) ;
Vertex[ 2 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 2 ].dif = GetColorU8( 0,255,255,255 ) ;
Vertex[ 2 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 2 ].u = 0.0f ;
Vertex[ 2 ].v = 0.0f ;
Vertex[ 2 ].su = 0.0f ;
Vertex[ 2 ].sv = 0.0f ;
Vertex[ 3 ].pos = VGet( 400.0f, 200.0f, 0.0f ) ;
Vertex[ 3 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 3 ].dif = GetColorU8( 0,255,255,255 ) ;
Vertex[ 3 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 3 ].u = 0.0f ;
Vertex[ 3 ].v = 0.0f ;
Vertex[ 3 ].su = 0.0f ;
Vertex[ 3 ].sv = 0.0f ;
// 2ポリゴン分のインデックスデータをセット
Index[ 0 ] = 0 ;
Index[ 1 ] = 1 ;
Index[ 2 ] = 2 ;
Index[ 3 ] = 3 ;
Index[ 4 ] = 2 ;
Index[ 5 ] = 1 ;
// 2ポリゴンの描画
DrawPolygonIndexed3D( Vertex, 4, Index, 2, DX_NONE_GRAPH, FALSE ) ;
// キー入力待ちをする
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 3D空間上に標準の設定( 頂点データのディフューズカラーを使用する )で球を描画した後、 頂点データのディフューズカラーを使用しない設定にして、マテリアルのディフューズカラーを 黄色にした上で再度球を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MATERIALPARAM Material ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Zバッファを有効にする
SetUseZBuffer3D( TRUE ) ;
// Zバッファへの書き込みを有効にする
SetWriteZBuffer3D( TRUE ) ;
// デフォルトの設定で3D空間上に球を描画する
DrawSphere3D( VGet( 160.0f, 200.0f, 0.0f ), 80.0f, 32, GetColor( 255,0,0 ), GetColor( 255,255,255 ), TRUE ) ;
// 頂点データのディフューズカラーを使用しないようにする
SetMaterialUseVertDifColor( FALSE ) ;
// マテリアルのディフューズカラーを黄色にする
Material.Diffuse = GetColorF( 1.0f, 1.0f, 0.0f, 1.0f ) ;
Material.Specular = GetColorF( 0.0f, 0.0f, 0.0f, 0.0f ) ;
Material.Ambient = GetColorF( 0.0f, 0.0f, 0.0f, 0.0f ) ;
Material.Emissive = GetColorF( 0.0f, 0.0f, 0.0f, 0.0f ) ;
Material.Power = 20.0f ;
SetMaterialParam( Material ) ;
// 再度3D空間上に球を描画する( 引数 DifColor の値は無視されます )
DrawSphere3D( VGet( 480.0f, 200.0f, 0.0f ), 80.0f, 32, GetColor( 255,0,0 ), GetColor( 255,255,255 ), TRUE ) ;
// キー入力待ちをする
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 3D空間上に標準の設定( 頂点データのスペキュラカラーを使用する )で球を描画した後、 頂点データのスペキュラカラーを使用しない設定にして、マテリアルのスペキュラカラーを 黄色にした上で再度球を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MATERIALPARAM Material ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Zバッファを有効にする
SetUseZBuffer3D( TRUE ) ;
// Zバッファへの書き込みを有効にする
SetWriteZBuffer3D( TRUE ) ;
// デフォルトの設定で3D空間上に球を描画する
DrawSphere3D( VGet( 160.0f, 200.0f, 0.0f ), 80.0f, 32, GetColor( 128,0,0 ), GetColor( 255,255,255 ), TRUE ) ;
// 頂点データのスペキュラカラーを使用しないようにする
SetMaterialUseVertSpcColor( FALSE ) ;
// マテリアルのスペキュラカラーを黄色にする
Material.Diffuse = GetColorF( 0.0f, 0.0f, 0.0f, 1.0f ) ;
Material.Specular = GetColorF( 1.0f, 1.0f, 0.0f, 0.0f ) ;
Material.Ambient = GetColorF( 0.0f, 0.0f, 0.0f, 0.0f ) ;
Material.Emissive = GetColorF( 0.0f, 0.0f, 0.0f, 0.0f ) ;
Material.Power = 20.0f ;
SetMaterialParam( Material ) ;
// 再度3D空間上に球を描画する( 引数 SpcColor の値は無視されます )
DrawSphere3D( VGet( 480.0f, 200.0f, 0.0f ), 80.0f, 32, GetColor( 128,0,0 ), GetColor( 255,255,255 ), TRUE ) ;
// キー入力待ちをする
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル マテリアルの設定で自己発光色を暗い青色にした上で球を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MATERIALPARAM Material ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Zバッファを有効にする
SetUseZBuffer3D( TRUE ) ;
// Zバッファへの書き込みを有効にする
SetWriteZBuffer3D( TRUE ) ;
// マテリアルの自己発光色を暗い青色にする
Material.Diffuse = GetColorF( 0.0f, 0.0f, 0.0f, 1.0f ) ;
Material.Specular = GetColorF( 0.0f, 0.0f, 0.0f, 0.0f ) ;
Material.Ambient = GetColorF( 0.0f, 0.0f, 0.0f, 0.0f ) ;
Material.Emissive = GetColorF( 0.0f, 0.0f, 0.5f, 0.0f ) ;
Material.Power = 20.0f ;
SetMaterialParam( Material ) ;
// デフォルトの設定で3D空間上に球を描画する
DrawSphere3D( VGet( 320.0f, 200.0f, 0.0f ), 80.0f, 32, GetColor( 128,0,0 ), GetColor( 255,255,255 ), TRUE ) ;
// キー入力待ちをする
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル Zバッファを有効にしない状態で球を描画した後、Zバッファを有効にして 更にZバッファへの書き込みも行う設定にして再度球を描画します。 Zバッファを有効にしない状態では球の奥の面が手前の面より後に描画される関係で 正しい描画結果が得られません。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// デフォルトの設定で3D空間上に球を描画する
DrawSphere3D( VGet( 160.0f, 200.0f, 0.0f ), 80.0f, 32, GetColor( 128,0,0 ), GetColor( 255,255,255 ), TRUE ) ;
// Zバッファを有効にする
SetUseZBuffer3D( TRUE ) ;
// Zバッファへの書き込みを有効にする
SetWriteZBuffer3D( TRUE ) ;
// Zバッファを有効にした状態で再度3D空間上に球を描画する
DrawSphere3D( VGet( 480.0f, 200.0f, 0.0f ), 80.0f, 32, GetColor( 128,0,0 ), GetColor( 255,255,255 ), TRUE ) ;
// キー入力待ちをする
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル Zバッファを有効にしない状態で球を描画した後、Zバッファを有効にして 再度球を描画します。 Zバッファを有効にしない状態では球の奥の面が手前の面より後に描画される関係で 正しい描画結果が得られません。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// デフォルトの設定で3D空間上に球を描画する
DrawSphere3D( VGet( 160.0f, 200.0f, 0.0f ), 80.0f, 32, GetColor( 128,0,0 ), GetColor( 255,255,255 ), TRUE ) ;
// Zバッファを有効にする
SetUseZBuffer3D( TRUE ) ;
// Zバッファへの書き込みを有効にする
SetWriteZBuffer3D( TRUE ) ;
// Zバッファを有効にした状態で再度3D空間上に球を描画する
DrawSphere3D( VGet( 480.0f, 200.0f, 0.0f ), 80.0f, 32, GetColor( 128,0,0 ), GetColor( 255,255,255 ), TRUE ) ;
// キー入力待ちをする
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 画面右側にバックカリングを無効の状態で、画面左側にバックカリングを有効にした状態でそれぞれ球を描画します。 Zバッファを使用しない状態なのでバックカリングを有効にしていない画面右側の球は裏面のポリゴンが表面のポリゴンの 後に描画されるという現象が発生するので見た目が破綻しますが、バックカリングを有効にした状態で描画している画面左側の 球は裏面のポリゴンが描画されないのでZバッファを有効にしていない状態でも正常な見た目で描画されます。 ( 因みにバックカリングを行うことで見た目的に正常な描画結果が得られるのは描画するポリゴン集合にへこんだ部分がない場合のみです )
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// バックカリングなしで3D空間上に球を描画する
DrawSphere3D( VGet( 500.0f, 200.0f, 0.0f ), 80.0f, 8, GetColor( 255,0,0 ), GetColor( 255, 255, 255 ), TRUE ) ;
// バックカリングを有効にする
SetUseBackCulling( TRUE ) ;
// バックカリングありで3D空間上に球を描画する
DrawSphere3D( VGet( 140.0f, 200.0f, 0.0f ), 80.0f, 8, GetColor( 255,0,0 ), GetColor( 255, 255, 255 ), TRUE ) ;
// キー入力待ちをする
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル テクスチャのアドレスモードをU方向を DX_TEXADDRESS_WRAP に、V方向を DX_TEXADDRESS_MIRROR にした上で テクスチャサイズの3倍のテクスチャ座標を使ってポリゴンを描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
VERTEX3D Vertex[ 6 ] ;
int GrHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// ポリゴンに貼り付ける画像の読みこみ
GrHandle = LoadGraph( "Kao.bmp" ) ;
// テクスチャのアドレスモードをU方向を DX_TEXADDRESS_WRAP に
// V方向を DX_TEXADDRESS_MIRROR に設定
SetTextureAddressModeUV( DX_TEXADDRESS_WRAP, DX_TEXADDRESS_MIRROR ) ;
// 2ポリゴン分の頂点のデータをセット
Vertex[ 0 ].pos = VGet( 100.0f, 400.0f, 0.0f ) ;
Vertex[ 0 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 0 ].dif = GetColorU8( 255,255,255,255 ) ;
Vertex[ 0 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 0 ].u = 0.0f ;
Vertex[ 0 ].v = 0.0f ;
Vertex[ 0 ].su = 0.0f ;
Vertex[ 0 ].sv = 0.0f ;
Vertex[ 1 ].pos = VGet( 500.0f, 400.0f, 0.0f ) ;
Vertex[ 1 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 1 ].dif = GetColorU8( 255,255,255,255 ) ;
Vertex[ 1 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 1 ].u = 3.0f ;
Vertex[ 1 ].v = 0.0f ;
Vertex[ 1 ].su = 0.0f ;
Vertex[ 1 ].sv = 0.0f ;
Vertex[ 2 ].pos = VGet( 100.0f, 100.0f, 0.0f ) ;
Vertex[ 2 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 2 ].dif = GetColorU8( 255,255,255,255 ) ;
Vertex[ 2 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 2 ].u = 0.0f ;
Vertex[ 2 ].v = 3.0f ;
Vertex[ 2 ].su = 0.0f ;
Vertex[ 2 ].sv = 0.0f ;
Vertex[ 3 ].pos = VGet( 500.0f, 100.0f, 0.0f ) ;
Vertex[ 3 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 3 ].dif = GetColorU8( 255,255,255,255 ) ;
Vertex[ 3 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 3 ].u = 3.0f ;
Vertex[ 3 ].v = 3.0f ;
Vertex[ 3 ].su = 0.0f ;
Vertex[ 3 ].sv = 0.0f ;
Vertex[ 4 ].pos = VGet( 100.0f, 100.0f, 0.0f ) ;
Vertex[ 4 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 4 ].dif = GetColorU8( 255,255,255,255 ) ;
Vertex[ 4 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 4 ].u = 0.0f ;
Vertex[ 4 ].v = 3.0f ;
Vertex[ 4 ].su = 0.0f ;
Vertex[ 4 ].sv = 0.0f ;
Vertex[ 5 ].pos = VGet( 500.0f, 400.0f, 0.0f ) ;
Vertex[ 5 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 5 ].dif = GetColorU8( 255,255,255,255 ) ;
Vertex[ 5 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 5 ].u = 3.0f ;
Vertex[ 5 ].v = 0.0f ;
Vertex[ 5 ].su = 0.0f ;
Vertex[ 5 ].sv = 0.0f ;
// 2ポリゴンの描画
DrawPolygon3D( Vertex, 2, GrHandle, FALSE ) ;
// キー入力待ちをする
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル フォグ機能を有効にした状態でモデルを画面から徐々に離しながら4体描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle, i ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// フォグを有効にする
SetFogEnable( TRUE ) ;
// フォグの色を黄色にする
SetFogColor( 255, 255, 0 ) ;
// フォグの開始距離を0、終了距離を1500にする
SetFogStartEnd( 0.0f, 1500.0f ) ;
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面を黄色で塗りつぶす
DrawBox( 0, 0, 640, 480, GetColor( 255, 255, 0 ), TRUE ) ;
// 3Dモデルを徐々に画面から離しながら4体描画する
for( i = 0 ; i < 4 ; i ++ )
{
// モデルの座標をセット
MV1SetPosition( ModelHandle, VGet( 700.0f, -300.0f, 200.0f + i * 400.0f ) ) ;
// モデルを描画
MV1DrawModel( ModelHandle ) ;
}
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル フォグ機能を有効にした状態でモデルを画面から徐々に離しながら4体描画します。 フォグの色を黒にしているので徐々に暗闇に消えていくように見えます
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle, i ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// フォグを有効にする
SetFogEnable( TRUE ) ;
// フォグの色を黒色にする
SetFogColor( 0, 0, 0 ) ;
// フォグの開始距離を0、終了距離を1500にする
SetFogStartEnd( 0.0f, 1500.0f ) ;
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 3Dモデルを徐々に画面から離しながら4体描画する
for( i = 0 ; i < 4 ; i ++ )
{
// モデルの座標をセット
MV1SetPosition( ModelHandle, VGet( 700.0f, -300.0f, 200.0f + i * 400.0f ) ) ;
// モデルを描画
MV1DrawModel( ModelHandle ) ;
}
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル フォグ機能を有効にした状態でフォグの開始距離を1000、終了距離を3500に変更した上で モデルを画面から徐々に離しながら8体描画します。 SetFogEnable のサンプルプログラムと違い、フォグの色が掛かり始めるのが3体目からになっています。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle, i ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// フォグを有効にする
SetFogEnable( TRUE ) ;
// フォグの色を黄色にする
SetFogColor( 255, 255, 0 ) ;
// フォグの開始距離を1000、終了距離を3500にする
SetFogStartEnd( 1000.0f, 3500.0f ) ;
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面を黄色で塗りつぶす
DrawBox( 0, 0, 640, 480, GetColor( 255, 255, 0 ), TRUE ) ;
// 3Dモデルを画面から徐々に離しながら8体描画する
for( i = 0 ; i < 8 ; i ++ )
{
// モデルの座標をセット
MV1SetPosition( ModelHandle, VGet( 700.0f, -300.0f, 200.0f + i * 400.0f ) ) ;
// モデルを描画
MV1DrawModel( ModelHandle ) ;
}
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル GetColorF 関数を使用している関数 SetLightDifColor 等のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル GetColorU8 関数を使用している関数 DrawPolygon3D 等のサンプルを参照してください。 | ||||||||||||||
| カメラ関数 | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル SimpleModel.mqo を画面奥方向に座標をずらして8つ描画して、 方向キーの上下で Far の値を、左右で Near の値を変更できるサンプルプログラムです。 クリップ値を変更することで描画される範囲が変わるのが分かります。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle, i ;
float Near, Far ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// Near Far 値の初期化
Near = 100.0f ;
Far = 2000.0f ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// ESCキーが押されるかウインドウが閉じられるまでループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// 上下のキー入力で Far を操作
if( CheckHitKey( KEY_INPUT_UP ) == 1 )
{
Far += 20.0f ;
}
if( CheckHitKey( KEY_INPUT_DOWN ) == 1 )
{
Far -= 20.0f ;
}
// 左右のキーで Near を操作
if( CheckHitKey( KEY_INPUT_LEFT ) == 1 )
{
Near -= 20.0f ;
}
if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 )
{
Near += 20.0f ;
}
// Near の値が 0.0f 以下になっていたら補正
if( Near <= 0.0f ) Near = 10.0f ;
// Far の値が Near より小さくなっていたら補正
if( Far <= Near ) Far = Near + 10.0f ;
// Near, Far クリップの距離を設定
SetCameraNearFar( Near, Far ) ;
// モデルを距離を変えて8個描画
for( i = 0 ; i < 8 ; i ++ )
{
// モデルの座標を設定
MV1SetPosition( ModelHandle, VGet( 320.0f, 180.0f, 100.0f + i * 400.0f ) ) ;
// モデルの描画
MV1DrawModel( ModelHandle ) ;
}
// 画面左上に Near の値と Far の値を描画
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Near %f Far %f", Near, Far ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル SimpleModel.mqo を原点に描画した状態で、カメラの位置を方向キーで 操作できるようにしたサンプルプログラムです。 カメラは常に原点を注視点としていますのでモデルは常に画面中心に表示されますが、 キー入力によって見える角度が変わります。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
VECTOR CameraPos ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// カメラの座標を初期化
CameraPos.x = 0.0f ;
CameraPos.y = 0.0f ;
CameraPos.z = -800.0f ;
// ESCキーが押されるかウインドウが閉じられるまでループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// 画面をクリア
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 ;
}
// カメラの位置と注視点をセット、注視点は原点
SetCameraPositionAndTarget_UpVecY( CameraPos, VGet( 0.0f, 0.0f, 0.0f ) ) ;
// モデルの描画
MV1DrawModel( ModelHandle ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル SimpleModel.mqo を原点に配置して、左右キーでそのモデルを見ている カメラの上の方向を回転できるようにしたサンプルプログラムです。
#include "DxLib.h"
#include <math.h>
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
float Roll ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// カメラの視線の回転値を初期化
Roll = 0.0f ;
// ESCキーが押されるかウインドウが閉じられるまでループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// 左右キーでカメラの回転値を変更
if( CheckHitKey( KEY_INPUT_LEFT ) == 1 )
{
Roll -= PHI_F / 60.0f ;
}
if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 )
{
Roll += PHI_F / 60.0f ;
}
// カメラの位置と注視点をセット
// 視点はZ軸のマイナス800の位置
// 注視点は原点
// 上方向は Roll の値から算出
SetCameraPositionAndTargetAndUpVec(
VGet( 0.0f, 0.0f, -800.0f ),
VGet( 0.0f, 0.0f, 0.0f ),
VGet( sin( Roll ), cos( Roll ), 0.0f ) ) ;
// モデルの描画
MV1DrawModel( ModelHandle ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル カメラの向きを上下左右キーで変えられるようにしたサンプルです。 回転していることを確認できるようにモデルファイル SimpleModel.mqo をカメラを囲むように 4個描画しています。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
float VRotate, HRotate, TRotate ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// カメラの回転値を初期化
VRotate = 0.0f ;
HRotate = 0.0f ;
TRotate = 0.0f ;
// ESCキーが押されるかウインドウが閉じられるまでループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// 左シフトキーを押しているかどうかで処理を分岐
if( CheckHitKey( KEY_INPUT_LSHIFT ) == 1 )
{
// 左右キーでカメラの捻り方向回転値を変更
if( CheckHitKey( KEY_INPUT_LEFT ) == 1 )
{
TRotate -= PHI_F / 60.0f ;
}
if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 )
{
TRotate += PHI_F / 60.0f ;
}
}
else
{
// 左右キーでカメラの水平方向回転値を変更
if( CheckHitKey( KEY_INPUT_LEFT ) == 1 )
{
HRotate -= PHI_F / 60.0f ;
}
if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 )
{
HRotate += PHI_F / 60.0f ;
}
}
// 上下キーでカメラの垂直方向回転値を変更
if( CheckHitKey( KEY_INPUT_UP ) == 1 )
{
VRotate += PHI_F / 60.0f ;
}
if( CheckHitKey( KEY_INPUT_DOWN ) == 1 )
{
VRotate -= PHI_F / 60.0f ;
}
// カメラの位置と回転値をセット、カメラの位置は原点
SetCameraPositionAndAngle( VGet( 0.0f, 0.0f, 0.0f ), VRotate, HRotate, TRotate ) ;
// モデルをカメラを囲むように4個描画
MV1SetPosition( ModelHandle, VGet( 0.0f, 0.0f, 800.0f ) ) ;
MV1DrawModel( ModelHandle ) ;
MV1SetPosition( ModelHandle, VGet( 0.0f, 0.0f, -800.0f ) ) ;
MV1DrawModel( ModelHandle ) ;
MV1SetPosition( ModelHandle, VGet( 800.0f, 0.0f, 0.0f ) ) ;
MV1DrawModel( ModelHandle ) ;
MV1SetPosition( ModelHandle, VGet( -800.0f, 0.0f, 0.0f ) ) ;
MV1DrawModel( ModelHandle ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル カメラの向きを左右キーで変えられるようにしたサンプルです。 回転していることを確認できるようにモデルファイル SimpleModel.mqo をカメラを囲むように 4個描画しています。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
float Rotate ;
MATRIX Matrix ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// カメラの回転値を初期化
Rotate = 0.0f ;
// ESCキーが押されるかウインドウが閉じられるまでループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// 左右キーでカメラの回転値を変更
if( CheckHitKey( KEY_INPUT_LEFT ) == 1 )
{
Rotate -= PHI_F / 60.0f ;
}
if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 )
{
Rotate += PHI_F / 60.0f ;
}
// 回転値を使用してY軸の回転行列を作成
Matrix = MGetRotY( Rotate ) ;
// 回転行列をビュー行列としてセット
SetCameraViewMatrix( Matrix ) ;
// モデルをカメラを囲むように4個描画
MV1SetPosition( ModelHandle, VGet( 0.0f, 0.0f, 800.0f ) ) ;
MV1DrawModel( ModelHandle ) ;
MV1SetPosition( ModelHandle, VGet( 0.0f, 0.0f, -800.0f ) ) ;
MV1DrawModel( ModelHandle ) ;
MV1SetPosition( ModelHandle, VGet( 800.0f, 0.0f, 0.0f ) ) ;
MV1DrawModel( ModelHandle ) ;
MV1SetPosition( ModelHandle, VGet( -800.0f, 0.0f, 0.0f ) ) ;
MV1DrawModel( ModelHandle ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル カメラの視野角を左右キーで変えられるようにしたサンプルです。 視野角が変化していることを確認できるようにモデルファイル SimpleModel.mqo をカメラの前方に 3個描画しています。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
float Fov ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// 視野角を初期化
Fov = 60.0f ;
// ESCキーが押されるかウインドウが閉じられるまでループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// 左右キーで視野角の値を変更
if( CheckHitKey( KEY_INPUT_LEFT ) == 1 )
{
Fov -= 2.0f ;
}
if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 )
{
Fov += 2.0f ;
}
// 視野角が 8.0f 以下になったら補正
if( Fov < 8.0f ) Fov = 8.0f ;
// 視野角が 170.0f 以上になったら補正
if( Fov > 170.0f ) Fov = 170.0f ;
// 遠近法のセットアップ( ラジアン値に変換しています )
SetupCamera_Perspective( Fov * PHI_F / 180.0f ) ;
// カメラの前方にモデルを3個描画
MV1SetPosition( ModelHandle, VGet( -1400.0f + 320.0f, 240.0f, 0.0f ) ) ;
MV1DrawModel( ModelHandle ) ;
MV1SetPosition( ModelHandle, VGet( 0.0f + 320.0f, 240.0f, 0.0f ) ) ;
MV1DrawModel( ModelHandle ) ;
MV1SetPosition( ModelHandle, VGet( 1400.0f + 320.0f, 240.0f, 0.0f ) ) ;
MV1DrawModel( ModelHandle ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 表示方式を正射影に変えてからカメラの前方に奥行き値の違うモデルを3つ描画します。 正射影なので奥行き的に何処に位置していても同じ大きさで描画されます。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// カメラを正射影に変更
SetupCamera_Ortho( 2000.0f ) ;
// カメラの前方に奥行き座標の違うモデルを3個描画
MV1SetPosition( ModelHandle, VGet( -700.0f + 320.0f, 240.0f, 0.0f ) ) ;
MV1DrawModel( ModelHandle ) ;
MV1SetPosition( ModelHandle, VGet( 0.0f + 320.0f, 240.0f, 500.0f ) ) ;
MV1DrawModel( ModelHandle ) ;
MV1SetPosition( ModelHandle, VGet( 700.0f + 320.0f, 240.0f, 1000.0f ) ) ;
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル ドットアスペクト比の設定を縦2倍にしてからモデルを描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// ドット比を縦に2倍に変更
SetCameraDotAspect( 0.5f ) ;
// モデルをカメラの映る位置に移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 0.0f ) ) ;
// モデルを描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル DxChara.x の0番目のモーションを再生しながら、フレーム番号26の座標に2Dの四角形を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle, AttachIndex ;
float TotalTime, PlayTime ;
VECTOR ScreenPos ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルの0番目のアニメーションをアタッチする
AttachIndex = MV1AttachAnim( ModelHandle, 0, -1, FALSE ) ;
// アタッチしたアニメーションの総再生時間を取得する
TotalTime = MV1GetAttachAnimTotalTime( ModelHandle, AttachIndex ) ;
// 再生時間の初期化
PlayTime = 0.0f ;
// 何かキーが押されるかウインドウが閉じられるまでループ
while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// 再生時間を進める
PlayTime += 100.0f ;
// 再生時間がアニメーションの総再生時間に達したら再生時間を0に戻す
if( PlayTime >= TotalTime )
{
PlayTime = 0.0f ;
}
// 再生時間をセットする
MV1SetAttachAnimTime( ModelHandle, AttachIndex, PlayTime ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// ナンバー26のフレームの画面上での座標を取得する
ScreenPos = ConvWorldPosToScreenPos( MV1GetFramePosition( ModelHandle, 26 ) ) ;
// 取得したスクリーン座標に四角形を描画
DrawBox( ScreenPos.x - 2, ScreenPos.y - 2, ScreenPos.x + 2, ScreenPos.y + 2, GetColor( 255,0,0 ), TRUE ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 画面上に表示されているモデルファイル SimpleModel.mqo のポリゴンとマウスポインタの位置から 画面奥へ伸びる線分とで当たり判定を行い、線分に接触したポリゴンを黄色で描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
VECTOR StartPos, EndPos ;
MV1_COLL_RESULT_POLY HitPoly ;
int Mx, My ;
// ウインドウモードで起動する
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// 3Dモデルを見える位置に移動する
MV1SetPosition( ModelHandle, VGet( 320.0f, 300.0f, 600.0f ) ) ;
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// モデル全体のコリジョン情報を構築
MV1SetupCollInfo( ModelHandle, -1, 8, 8, 8 ) ;
// ウインドウが閉じられるか何かキーが押されるまでループ
while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// マウスの座標を取得
GetMousePoint( &Mx, &My ) ;
// マウスポインタがある画面上の座標に該当する3D空間上の Near 面の座標を取得
StartPos = ConvScreenPosToWorldPos( VGet( Mx, My, 0.0f ) ) ;
// マウスポインタがある画面上の座標に該当する3D空間上の Far 面の座標を取得
EndPos = ConvScreenPosToWorldPos( VGet( Mx, My, 1.0f ) ) ;
// モデルと線分との当たり判定
HitPoly = MV1CollCheck_Line( ModelHandle, -1, StartPos, EndPos ) ;
// 当たったかどうかで処理を分岐
if( HitPoly.HitFlag == 1 )
{
// 当たった場合は衝突の情報を描画する
// 当たったポリゴンを黄色で描画する
DrawTriangle3D( HitPoly.Position[ 0 ], HitPoly.Position[ 1 ], HitPoly.Position[ 2 ], GetColor( 255,255,0 ), TRUE ) ;
// 交差した座標を描画
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Hit Pos %f %f %f",
HitPoly.HitPosition.x, HitPoly.HitPosition.y, HitPoly.HitPosition.z ) ;
// 当たったポリゴンが含まれるフレームの番号を描画
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "Frame %d", HitPoly.FrameIndex ) ;
// 当たったポリゴンが使用しているマテリアルの番号を描画
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "Material %d", HitPoly.MaterialIndex ) ;
// 当たったポリゴンを形成する三頂点の座標を描画
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "Position %f %f %f",
HitPoly.Position[ 0 ].x, HitPoly.Position[ 0 ].y, HitPoly.Position[ 0 ].z ) ;
DrawFormatString( 0, 64, GetColor( 255,255,255 ), " %f %f %f",
HitPoly.Position[ 1 ].x, HitPoly.Position[ 1 ].y, HitPoly.Position[ 1 ].z ) ;
DrawFormatString( 0, 80, GetColor( 255,255,255 ), " %f %f %f",
HitPoly.Position[ 2 ].x, HitPoly.Position[ 2 ].y, HitPoly.Position[ 2 ].z ) ;
// 当たったポリゴンの法線を描画
DrawFormatString( 0, 96, GetColor( 255,255,255 ), "Normal %f %f %f",
HitPoly.Normal.x, HitPoly.Normal.y, HitPoly.Normal.z ) ;
}
else
{
// 当たらなかった場合は衝突しなかった旨だけ描画する
DrawString( 0, 0, "NO HIT", GetColor( 255,255,255 ) ) ;
}
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル カメラの消失点を画面右側に変更してから立方体を描画します。
#include "DxLib.h"
#define X1 100.0f
#define X2 540.0f
#define Y1 100.0f
#define Y2 380.0f
#define Z1 0.0f
#define Z2 1000.0f
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int Color ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// カメラの注視点の画面上の位置を右寄りにする
SetCameraScreenCenter( 480.0f, 240.0f ) ;
// 直方体を描画する
Color = GetColor( 255,255,255 ) ;
DrawLine3D( VGet( X1, Y1, Z1 ), VGet( X2, Y1, Z1 ), Color ) ;
DrawLine3D( VGet( X2, Y1, Z1 ), VGet( X2, Y2, Z1 ), Color ) ;
DrawLine3D( VGet( X2, Y2, Z1 ), VGet( X1, Y2, Z1 ), Color ) ;
DrawLine3D( VGet( X1, Y2, Z1 ), VGet( X1, Y1, Z1 ), Color ) ;
DrawLine3D( VGet( X1, Y1, Z2 ), VGet( X2, Y1, Z2 ), Color ) ;
DrawLine3D( VGet( X2, Y1, Z2 ), VGet( X2, Y2, Z2 ), Color ) ;
DrawLine3D( VGet( X2, Y2, Z2 ), VGet( X1, Y2, Z2 ), Color ) ;
DrawLine3D( VGet( X1, Y2, Z2 ), VGet( X1, Y1, Z2 ), Color ) ;
DrawLine3D( VGet( X1, Y1, Z1 ), VGet( X1, Y1, Z2 ), Color ) ;
DrawLine3D( VGet( X2, Y1, Z1 ), VGet( X2, Y1, Z2 ), Color ) ;
DrawLine3D( VGet( X2, Y2, Z1 ), VGet( X2, Y2, Z2 ), Color ) ;
DrawLine3D( VGet( X1, Y2, Z1 ), VGet( X1, Y2, Z2 ), Color ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ライト関数 | ||||||||||||||
| ||||||||||||||
|
サンプル DxChara.x をライティング計算をOFFにして描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// ライティングの計算をしないように設定を変更
SetUseLighting( FALSE ) ;
// モデルをカメラの映る位置に移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// モデルを描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル グローバルアンビエントカラーを赤にしてモデルを描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// グローバルアンビエントカラーを赤色に変更
SetGlobalAmbientLight( GetColorF( 1.0f, 0.0f, 0.0f, 0.0f ) ) ;
// モデルをカメラの映る位置に移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 0.0f ) ) ;
// モデルを描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| 標準ライト関数 | ||||||||||||||
| ||||||||||||||
|
サンプル 標準ライトの方向をX軸のマイナス方向にしてモデルを描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// X軸のマイナス方向のディレクショナルライトに変更
ChangeLightTypeDir( VGet( -1.0f, 0.0f, 0.0f ) ) ;
// モデルをカメラの映る位置に移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 0.0f ) ) ;
// モデルを描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 標準ライトをポイントライトにして、D〜H、C〜Nまでのキーを使用して 各パラメータを変更できるようにしたサンプルです。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
float Range, Atten0, Atten1, Atten2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// 各パラメータを初期化
Range = 2000.0f ;
Atten0 = 0.0f ;
Atten1 = 0.0006f ;
Atten2 = 0.0f ;
// ESCキーが押されるかウインドウが閉じられるまでループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// DCキーでライトの影響範囲を変更
if( CheckHitKey( KEY_INPUT_D ) == 1 )
{
Range += 20.0f ;
}
if( CheckHitKey( KEY_INPUT_C ) == 1 )
{
Range -= 20.0f ;
}
// FVキーでライトの距離減衰パラメータ0の値を変更
if( CheckHitKey( KEY_INPUT_F ) == 1 )
{
Atten0 += 0.001f ;
}
if( CheckHitKey( KEY_INPUT_V ) == 1 )
{
Atten0 -= 0.001f ;
}
// GBキーでライトの距離減衰パラメータ1の値を変更
if( CheckHitKey( KEY_INPUT_G ) == 1 )
{
Atten1 += 0.00001f ;
}
if( CheckHitKey( KEY_INPUT_B ) == 1 )
{
Atten1 -= 0.00001f ;
}
// HNキーでライトの距離減衰パラメータ2の値を変更
if( CheckHitKey( KEY_INPUT_H ) == 1 )
{
Atten2 += 0.0000001f ;
}
if( CheckHitKey( KEY_INPUT_N ) == 1 )
{
Atten2 -= 0.0000001f ;
}
// 影響距離の値を補正
if( Range < 0.0f ) Range = 0.0f ;
// 距離減衰パラメータの値を補正
if( Atten0 < 0.0f ) Atten0 = 0.0f ;
if( Atten1 < 0.0f ) Atten1 = 0.0f ;
if( Atten2 < 0.0f ) Atten2 = 0.0f ;
// モデルの上空にポイントライトを設定
ChangeLightTypePoint(
VGet( 320.0f, 1000.0f, 200.0f ),
Range,
Atten0,
Atten1,
Atten2 ) ;
// モデルをカメラの映る位置に移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 200.0f ) ) ;
// モデルを描画
MV1DrawModel( ModelHandle ) ;
// パラメータの内容を画面に表示
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Key:D.C Range %f", Range ) ;
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "Key:F.V Atten0 %f", Atten0 ) ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "Key:G.B Atten1 %f", Atten1 ) ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "Key:H.N Atten2 %f / 100.0f", Atten2 * 100.0f ) ;
// 裏画面の内容を表画面に反映する
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 標準ライトをスポットライトにして、A〜H、Z〜Nまでのキーを使用して 各パラメータを変更できるようにしたサンプルです。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
float OutAngle, InAngle, Range, Atten0, Atten1, Atten2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// 各パラメータを初期化
OutAngle = 90.0f ;
InAngle = 45.0f ;
Range = 2000.0f ;
Atten0 = 0.0f ;
Atten1 = 0.0006f ;
Atten2 = 0.0f ;
// ESCキーが押されるかウインドウが閉じられるまでループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// AZキーで OutAngle の値を変更
if( CheckHitKey( KEY_INPUT_A ) == 1 )
{
OutAngle += 1.0f ;
}
if( CheckHitKey( KEY_INPUT_Z ) == 1 )
{
OutAngle -= 1.0f ;
}
// SXキーで InAngle の値を変更
if( CheckHitKey( KEY_INPUT_S ) == 1 )
{
InAngle += 1.0f ;
}
if( CheckHitKey( KEY_INPUT_X ) == 1 )
{
InAngle -= 1.0f ;
}
// DCキーでライトの影響範囲を変更
if( CheckHitKey( KEY_INPUT_D ) == 1 )
{
Range += 20.0f ;
}
if( CheckHitKey( KEY_INPUT_C ) == 1 )
{
Range -= 20.0f ;
}
// FVキーでライトの距離減衰パラメータ0の値を変更
if( CheckHitKey( KEY_INPUT_F ) == 1 )
{
Atten0 += 0.001f ;
}
if( CheckHitKey( KEY_INPUT_V ) == 1 )
{
Atten0 -= 0.001f ;
}
// GBキーでライトの距離減衰パラメータ1の値を変更
if( CheckHitKey( KEY_INPUT_G ) == 1 )
{
Atten1 += 0.00001f ;
}
if( CheckHitKey( KEY_INPUT_B ) == 1 )
{
Atten1 -= 0.00001f ;
}
// HNキーでライトの距離減衰パラメータ2の値を変更
if( CheckHitKey( KEY_INPUT_H ) == 1 )
{
Atten2 += 0.0000001f ;
}
if( CheckHitKey( KEY_INPUT_N ) == 1 )
{
Atten2 -= 0.0000001f ;
}
// 角度の値を補正
if( OutAngle < 0.0f ) OutAngle = 0.0f ;
if( OutAngle > 180.0f ) OutAngle = 180.0f ;
if( InAngle < 0.0f ) InAngle = 0.0f ;
if( InAngle > OutAngle ) InAngle = OutAngle ;
// 影響距離の値を補正
if( Range < 0.0f ) Range = 0.0f ;
// 距離減衰パラメータの値を補正
if( Atten0 < 0.0f ) Atten0 = 0.0f ;
if( Atten1 < 0.0f ) Atten1 = 0.0f ;
if( Atten2 < 0.0f ) Atten2 = 0.0f ;
// Y軸のマイナス方向のスポットライトを設定
ChangeLightTypeSpot(
VGet( 320.0f, 1000.0f, 200.0f ),
VGet( 0.0f, -1.0f, 0.0f ),
OutAngle * PHI_F / 180.0f,
InAngle * PHI_F / 180.0f,
Range,
Atten0,
Atten1,
Atten2 ) ;
// モデルをカメラの映る位置に移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 200.0f ) ) ;
// モデルを描画
MV1DrawModel( ModelHandle ) ;
// パラメータの内容を画面に表示
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Key:A.Z OutAngle( 度 ) %f", OutAngle ) ;
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "Key:S.X InAngle( 度 ) %f", InAngle ) ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "Key:D.C Range %f", Range ) ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "Key:F.V Atten0 %f", Atten0 ) ;
DrawFormatString( 0, 64, GetColor( 255,255,255 ), "Key:G.B Atten1 %f", Atten1 ) ;
DrawFormatString( 0, 80, GetColor( 255,255,255 ), "Key:H.N Atten2 %f / 100.0f", Atten2 * 100.0f ) ;
// 裏画面の内容を表画面に反映する
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル SimpleModel.mqo を普通に描画した後、標準ライトを無効にした状態で画面右側に描画します。 標準ライトのディレクショナルライトは当たらず、自己発光色の灰色のみになっているのが確認できます。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// モデルをカメラの映る位置に移動
MV1SetPosition( ModelHandle, VGet( 0.0f, 240.0f, 600.0f ) ) ;
// モデルを描画
MV1DrawModel( ModelHandle ) ;
// 標準ライトを無効にする
SetLightEnable( FALSE ) ;
// モデルの位置を変更
MV1SetPosition( ModelHandle, VGet( 700.0f, 240.0f, 600.0f ) ) ;
// モデルを描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 標準ライトのディフューズカラーを青色にした状態で SimpleModel.mqo を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// 標準ライトのディフューズカラーを青色にする
SetLightDifColor( GetColorF( 0.0f, 0.0f, 1.0f, 0.0f ) ) ;
// モデルをカメラの映る位置に移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 300.0f ) ) ;
// モデルを描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 標準ライトのスペキュラカラーを黄色にした状態で SimpleModel.mqo を描画します。 ( スペキュラカラーの変化が変わりやすいようにディフューズカラーの色を黒にしています )
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// スペキュラカラーの変化がわかりやすいように標準ライトのディフューズカラーを真っ黒にする
SetLightDifColor( GetColorF( 0.0f, 0.0f, 0.0f, 0.0f ) ) ;
// 標準ライトのスペキュラカラーを黄色にする
SetLightSpcColor( GetColorF( 1.0f, 1.0f, 0.0f, 0.0f ) ) ;
// モデルをカメラの映る位置に移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 300.0f ) ) ;
// モデルを描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 標準ライトのアンビエントカラーを暗い緑色にした状態で SimpleModel.mqo を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// 標準ライトのアンビエントカラーを暗い緑色にする
SetLightAmbColor( GetColorF( 0.0f, 0.2f, 0.0f, 0.0f ) ) ;
// モデルをカメラの映る位置に移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 300.0f ) ) ;
// モデルを描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 標準ライトの向きをX軸のプラス方向にした状態で SimpleModel.mqo を描画します。 ( 標準ライトの初期タイプはディレクショナルライトです )
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// 標準ライトの方向をX軸のプラス方向にする
SetLightDirection( VGet( 1.0f, 0.0f, 0.0f ) ) ;
// モデルをカメラの映る位置に移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 300.0f ) ) ;
// モデルを描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 標準ライトをポイントライトに変更した後、ライトの位置をモデルの上側に移動した状態で モデルを描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// モデルをカメラの映る位置に移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 300.0f ) ) ;
// 標準ライトをポイントライトにする
ChangeLightTypePoint( VGet( 0.0f, 0.0f, 0.0f ), 2000.0f, 0.0f, 0.002f, 0.0f ) ;
// 標準ライトの位置をモデルの上に移動する
SetLightPosition( VGet( 320.0f, 1000.0f, 0.0f ) ) ;
// モデルを描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル 標準ライトの情報を画面に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
char *TypeName ;
COLOR_F Color ;
VECTOR Vector ;
float Range, Atten0, Atten1, Atten2 ;
float InAngle, OutAngle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 画面に標準ライトのタイプを描画
switch( GetLightType() )
{
case DX_LIGHTTYPE_DIRECTIONAL : TypeName = "Directional" ; break ;
case DX_LIGHTTYPE_POINT : TypeName = "Point" ; break ;
case DX_LIGHTTYPE_SPOT : TypeName = "Spot" ; break ;
}
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "LightType %s", TypeName ) ;
// ライトが有効かどうかを描画
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "Enable %d", GetLightEnable() ) ;
// ディフューズカラーを描画
Color = GetLightDifColor() ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "Diffuse Color %f %f %f", Color.r, Color.g, Color.b ) ;
// スペキュラカラーを描画
Color = GetLightSpcColor() ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "Specular Color %f %f %f", Color.r, Color.g, Color.b ) ;
// アンビエントカラーを描画
Color = GetLightAmbColor() ;
DrawFormatString( 0, 64, GetColor( 255,255,255 ), "Ambient Color %f %f %f", Color.r, Color.g, Color.b ) ;
// 向きを描画
Vector = GetLightDirection() ;
DrawFormatString( 0, 80, GetColor( 255,255,255 ), "Direction %f %f %f", Vector.x, Vector.y, Vector.z ) ;
// 位置を描画
Vector = GetLightPosition() ;
DrawFormatString( 0, 96, GetColor( 255,255,255 ), "Position %f %f %f", Vector.x, Vector.y, Vector.z ) ;
// 有効距離と距離減衰パラメータを描画する
GetLightRangeAtten( &Range, &Atten0, &Atten1, &Atten2 ) ;
DrawFormatString( 0, 112, GetColor( 255,255,255 ), "Range %f", Range ) ;
DrawFormatString( 0, 128, GetColor( 255,255,255 ), "Attenuation0 %f", Atten0 ) ;
DrawFormatString( 0, 144, GetColor( 255,255,255 ), "Attenuation1 %f", Atten1 ) ;
DrawFormatString( 0, 160, GetColor( 255,255,255 ), "Attenuation2 %f", Atten2 ) ;
// 照射角度パラメータを描画する
GetLightAngle( &OutAngle, &InAngle ) ;
DrawFormatString( 0, 176, GetColor( 255,255,255 ), "In Angle %f", InAngle ) ;
DrawFormatString( 0, 192, GetColor( 255,255,255 ), "Out Angle %f", OutAngle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル GetLightType関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル GetLightType関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル GetLightType関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル GetLightType関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル GetLightType関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル GetLightType関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル GetLightType関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル GetLightType関数 のサンプルを参照してください。 | ||||||||||||||
| ライトハンドル関数 | ||||||||||||||
| ||||||||||||||
|
サンプル X軸にマイナス方向のディレクショナルライトハンドルを作成して、 効果がわかり易いように標準ライトを無効にした上でモデルを描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle, LightHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// 効果がわかり易いように標準ライトを無効化
SetLightEnable( FALSE ) ;
// X軸にマイナス方向のディレクショナルタイプのライトの作成
LightHandle = CreateDirLightHandle( VGet( -1.0f, 0.0f, 0.0f ) ) ;
// モデルをカメラの映る位置に移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 600.0f ) ) ;
// モデルを描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 読み込んだモデルの上側にポイントライトを作成して、 効果がわかり易いように標準ライトを無効にした上でモデルを描画します。 ポイントライトの各パラメータを変化させるとどのような変化があるのかは ChangeLightTypePoint関数 のサンプルで確認できます。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle, LightHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// 効果がわかり易いように標準ライトを無効化
SetLightEnable( FALSE ) ;
// モデルをカメラの映る位置に移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 600.0f ) ) ;
// モデルの上側にポイントタイプのライトを作成
LightHandle = CreatePointLightHandle(
VGet( 320.0f, 1000.0f, 600.0f ),
2000.0f,
0.0f,
0.002f,
0.0f ) ;
// モデルを描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 読み込んだモデルの上側に下向きの光を放つスポットライトを作成して、 効果がわかり易いように標準ライトを無効にした上でモデルを描画します。 スポットライトの各パラメータを変化させるとどのような変化があるのかは ChangeLightTypeSpot関数 のサンプルで確認できます。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle, LightHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// モデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// 効果がわかり易いように標準ライトを無効化
SetLightEnable( FALSE ) ;
// モデルをカメラの映る位置に移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 600.0f ) ) ;
// モデルの上側に下向きのスポットタイプのライトを作成
LightHandle = CreateSpotLightHandle(
VGet( 320.0f, 1000.0f, 600.0f ),
VGet( 0.0f, -1.0f, 0.0f ),
PHI_F / 2.0f,
PHI_F / 4.0f,
2000.0f,
0.0f,
0.002f,
0.0f ) ;
// モデルを描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ディレクショナルライトを作成してすぐ削除します。 削除関数を使うサンプルプログラムなので実行しても何も起きません。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int LightHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// ディレクショナルライトタイプのハンドルの作成
LightHandle = CreateDirLightHandle( VGet( 1.0f, 0.0f, 0.0f ) ) ;
// 直後に削除
DeleteLightHandle( LightHandle ) ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル ディレクショナルタイプのライトを作成した後、それをポイントタイプのライトに変更して ポイントライトとしてのパラメータを設定した後モデルを描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int LightHandle, ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// ライトハンドルのライトの効果がわかり易いように標準ライトを無効化
SetLightEnable( FALSE ) ;
// ディレクショナルタイプのライトハンドルの作成
LightHandle = CreateDirLightHandle( VGet( 1.0f, 0.0f, 0.0f ) ) ;
// ライトのタイプをポイントライトに変更
SetLightTypeHandle( LightHandle, DX_LIGHTTYPE_POINT ) ;
// 位置を設定
SetLightPositionHandle( LightHandle, VGet( 320.0f, 1000.0f, 600.0f ) ) ;
// 有効距離と距離減衰パラメータを設定
SetLightRangeAttenHandle( LightHandle, 2000.0f, 0.0f, 0.002f, 0.0f ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 600.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 3つのディレクショナルタイプのライトハンドルを作成した後、各ライトを50%の確率で 無効にして、そのあとモデルを描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int LightHandle[ 3 ], ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// ライトハンドルのライトの効果がわかり易いように標準ライトを無効化
SetLightEnable( FALSE ) ;
// ディレクショナルタイプのライトハンドルを3つ作成
LightHandle[ 0 ] = CreateDirLightHandle( VGet( 1.0f, 0.0f, 0.0f ) ) ;
LightHandle[ 1 ] = CreateDirLightHandle( VGet( 0.0f, 1.0f, 0.0f ) ) ;
LightHandle[ 2 ] = CreateDirLightHandle( VGet( 0.0f, 0.0f, 1.0f ) ) ;
// 各ライトを50%の確率で無効にする
if( GetRand( 100 ) > 50 )
{
SetLightEnableHandle( LightHandle[ 0 ], FALSE ) ;
}
if( GetRand( 100 ) > 50 )
{
SetLightEnableHandle( LightHandle[ 1 ], FALSE ) ;
}
if( GetRand( 100 ) > 50 )
{
SetLightEnableHandle( LightHandle[ 2 ], FALSE ) ;
}
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 600.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ライトハンドルのディフューズカラーを青色にした状態で SimpleModel.mqo を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int LightHandle, ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// ライトハンドルのライトの効果がわかり易いように標準ライトを無効化
SetLightEnable( FALSE ) ;
// ディレクショナルタイプのライトハンドルを作成
LightHandle = CreateDirLightHandle( VGet( 1.0f, -1.0f, 1.0f ) ) ;
// ライトハンドルのディフューズカラーを青色にする
SetLightDifColorHandle( LightHandle, GetColorF( 0.0f, 0.0f, 1.0f, 0.0f ) ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 600.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ライトハンドルのスペキュラカラーを赤色にした状態で SimpleModel.mqo を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int LightHandle, ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// ライトハンドルのライトの効果がわかり易いように標準ライトを無効化
SetLightEnable( FALSE ) ;
// ディレクショナルタイプのライトハンドルを作成
LightHandle = CreateDirLightHandle( VGet( 1.0f, -1.0f, 1.0f ) ) ;
// スペキュラカラーの変更がわかり易いようにディフューズカラーを黒にする
SetLightDifColorHandle( LightHandle, GetColorF( 0.0f, 0.0f, 0.0f, 0.0f ) ) ;
// ライトハンドルのスペキュラカラーを赤色にする
SetLightSpcColorHandle( LightHandle, GetColorF( 1.0f, 0.0f, 0.0f, 0.0f ) ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 600.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ライトハンドルのアンビエントカラーを暗い緑色にした状態で SimpleModel.mqo を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int LightHandle, ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// ライトハンドルのライトの効果がわかり易いように標準ライトを無効化
SetLightEnable( FALSE ) ;
// ディレクショナルタイプのライトハンドルを作成
LightHandle = CreateDirLightHandle( VGet( 1.0f, -1.0f, 1.0f ) ) ;
// ライトハンドルのアンビエントカラーを暗い緑色にする
SetLightAmbColorHandle( LightHandle, GetColorF( 0.0f, 0.2f, 0.0f, 0.0f ) ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 600.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ライトハンドルのライトの向きをX軸のプラス方向にした状態で SimpleModel.mqo を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int LightHandle, ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// ライトハンドルのライトの効果がわかり易いように標準ライトを無効化
SetLightEnable( FALSE ) ;
// ディレクショナルタイプのライトハンドルを作成
LightHandle = CreateDirLightHandle( VGet( 1.0f, -1.0f, 1.0f ) ) ;
// ライトハンドルの方向をX軸のプラス方向にする
SetLightDirectionHandle( LightHandle, VGet( 1.0f, 0.0f, 0.0f ) ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 600.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ポイントタイプのライトを作成した後、ライトの位置をモデルの上側に移動してから モデルを描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int LightHandle, ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// ライトハンドルのライトの効果がわかり易いように標準ライトを無効化
SetLightEnable( FALSE ) ;
// ポイントタイプのライトハンドルを作成
LightHandle = CreatePointLightHandle(
VGet( 320.0f, 1000.0f, 600.0f ),
2000.0f,
0.0f,
0.002f,
0.0f ) ;
// ライトハンドルの位置をモデルの上側に移動
SetLightPositionHandle( LightHandle, VGet( 320.0f, 1000.0f, 600.0f ) ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 600.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル スポットライトを作成して、そのライトの情報を画面に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
char *TypeName ;
COLOR_F Color ;
VECTOR Vector ;
float Range, Atten0, Atten1, Atten2 ;
float InAngle, OutAngle ;
int LightHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// スポットタイプのライトの作成
LightHandle = CreateSpotLightHandle(
VGet( 320.0f, 1000.0f, 600.0f ),
VGet( 0.0f, -1.0f, 0.0f ),
PHI_F / 2.0f,
PHI_F / 4.0f,
2000.0f,
0.0f,
0.002f,
0.0f ) ;
// 画面に標準ライトのタイプを描画
switch( GetLightTypeHandle( LightHandle ) )
{
case DX_LIGHTTYPE_DIRECTIONAL : TypeName = "Directional" ; break ;
case DX_LIGHTTYPE_POINT : TypeName = "Point" ; break ;
case DX_LIGHTTYPE_SPOT : TypeName = "Spot" ; break ;
}
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "LightType %s", TypeName ) ;
// ライトが有効かどうかを描画
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "Enable %d", GetLightEnableHandle( LightHandle ) ) ;
// ディフューズカラーを描画
Color = GetLightDifColorHandle( LightHandle ) ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "Diffuse Color %f %f %f", Color.r, Color.g, Color.b ) ;
// スペキュラカラーを描画
Color = GetLightSpcColorHandle( LightHandle ) ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "Specular Color %f %f %f", Color.r, Color.g, Color.b ) ;
// アンビエントカラーを描画
Color = GetLightAmbColorHandle() ;
DrawFormatString( 0, 64, GetColor( 255,255,255 ), "Ambient Color %f %f %f", Color.r, Color.g, Color.b ) ;
// 向きを描画
Vector = GetLightDirectionHandle( LightHandle ) ;
DrawFormatString( 0, 80, GetColor( 255,255,255 ), "Direction %f %f %f", Vector.x, Vector.y, Vector.z ) ;
// 位置を描画
Vector = GetLightPositionHandle( LightHandle ) ;
DrawFormatString( 0, 96, GetColor( 255,255,255 ), "Position %f %f %f", Vector.x, Vector.y, Vector.z ) ;
// 有効距離と距離減衰パラメータを描画する
GetLightRangeAttenHandle( LightHandle, &Range, &Atten0, &Atten1, &Atten2 ) ;
DrawFormatString( 0, 112, GetColor( 255,255,255 ), "Range %f", Range ) ;
DrawFormatString( 0, 128, GetColor( 255,255,255 ), "Attenuation0 %f", Atten0 ) ;
DrawFormatString( 0, 144, GetColor( 255,255,255 ), "Attenuation1 %f", Atten1 ) ;
DrawFormatString( 0, 160, GetColor( 255,255,255 ), "Attenuation2 %f", Atten2 ) ;
// 照射角度パラメータを描画する
GetLightAngleHandle( LightHandle, &OutAngle, &InAngle ) ;
DrawFormatString( 0, 176, GetColor( 255,255,255 ), "In Angle %f", InAngle ) ;
DrawFormatString( 0, 192, GetColor( 255,255,255 ), "Out Angle %f", OutAngle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル GetLightTypeHandle関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル GetLightTypeHandle関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル GetLightTypeHandle関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル GetLightTypeHandle関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル GetLightTypeHandle関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル GetLightTypeHandle関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル GetLightTypeHandle関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル GetLightTypeHandle関数 のサンプルを参照してください。 | ||||||||||||||
| 算術演算関数 | ||||||||||||||
| ||||||||||||||
|
サンプル VECTOR 構造体 Vect に値を代入します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
VECTOR Vect ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Vect に値( x=100.0f y=200.0f z=400.0f )を代入
Vect = VGet( 100.0f, 200.0f, 400.0f ) ;
// Vect の内容を画面に表示
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Vect x=%f y=%f z=%f", Vect.x, Vect.y, Vect.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル VECTOR 構造体 Vect1 と Vect2 を加算して、結果を Vect1 に代入します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
VECTOR Vect1, Vect2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Vect1 と Vect2 に値を代入
Vect1 = VGet( 100.0f, 200.0f, 500.0f ) ;
Vect2 = VGet( 30.0f, 100.0f, 80.0f ) ;
// Vect1 と Vect2 を加算して結果を Vect1 に代入
Vect1 = VAdd( Vect1, Vect2 ) ;
// Vect1 の内容を画面に表示
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Vect1 x=%f y=%f z=%f", Vect1.x, Vect1.y, Vect1.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル VECTOR 構造体 Vect1 から Vect2 を減算して、結果を Vect1 に代入します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
VECTOR Vect1, Vect2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Vect1 と Vect2 に値を代入
Vect1 = VGet( 100.0f, 200.0f, 500.0f ) ;
Vect2 = VGet( 30.0f, 100.0f, 80.0f ) ;
// Vect1 から Vect2 を減算して結果を Vect1 に代入
Vect1 = VSub( Vect1, Vect2 ) ;
// Vect1 の内容を画面に表示
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Vect1 x=%f y=%f z=%f", Vect1.x, Vect1.y, Vect1.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル VECTOR 構造体 Vect1 と Vect2 の内積を画面に表示します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
VECTOR Vect1, Vect2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Vect1 と Vect2 に値を代入
Vect1 = VGet( 100.0f, 200.0f, 500.0f ) ;
Vect2 = VGet( 30.0f, 100.0f, 80.0f ) ;
// Vect1 と Vect2 の内積を画面に表示
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Dot %f", VDot( Vect1, Vect2 ) ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル VECTOR 構造体 Vect1 と Vect2 の外積を画面に表示します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
VECTOR Vect1, Vect2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Vect1 と Vect2 に値を代入
Vect1 = VGet( 100.0f, 200.0f, 500.0f ) ;
Vect2 = VGet( 30.0f, 100.0f, 80.0f ) ;
// Vect1 と Vect2 の外戚を Vect1 に代入
Vect1 = VCross( Vect1, Vect2 ) ;
// Vect1 の内容を画面に表示
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Vect1 x=%f y=%f z=%f", Vect1.x, Vect1.y, Vect1.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル VECTOR 構造体 Vect の内容を 8.0f 倍して、その結果を画面に表示します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
VECTOR Vect ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Vect に値を代入
Vect = VGet( 100.0f, 200.0f, 500.0f ) ;
// Vect を 8.0f 倍して、その結果を Vect に代入
Vect = VScale( Vect, 8.0f ) ;
// Vect の内容を画面に表示
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Vect x=%f y=%f z=%f", Vect.x, Vect.y, Vect.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル VECTOR 構造体 Vect のサイズを画面に表示します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
VECTOR Vect ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Vect に値を代入
Vect = VGet( 100.0f, 200.0f, 500.0f ) ;
// Vect のサイズを画面に表示
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Size %f", VSize( Vect ) ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル VECTOR 構造体 Vect のサイズの二乗を画面に表示します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
VECTOR Vect ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Vect に値を代入
Vect = VGet( 100.0f, 200.0f, 500.0f ) ;
// Vect のサイズの二乗を画面に表示
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Size %f", VSquareSize( Vect ) ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル VECTOR 構造体 Vect を正規化した値を画面に表示します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
VECTOR Vect ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Vect に値を代入
Vect = VGet( 100.0f, 200.0f, 500.0f ) ;
// Vect の値を正規化して、その結果を Vect に代入する
Vect = VNorm( Vect ) ;
// Vect の値を画面に表示
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Vect x=%f y=%f z=%f", Vect.x, Vect.y, Vect.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル VECTOR 構造体 Vect をスケーリング行列を使用して 0.5f 倍します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
VECTOR Vect ;
MATRIX Matrix ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Vect に値を代入
Vect = VGet( 100.0f, 200.0f, 500.0f ) ;
// 0.5倍スケーリングを行う行列を作成
Matrix = MGetScale( VGet( 0.5f, 0.5f, 0.5f ) ) ;
// 0.5倍スケーリングを行う行列を使用してベクトルのサイズを0.5倍した結果を Vect に代入する
Vect = VTransform( Vect, Matrix ) ;
// Vect の値を画面に表示
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Vect x=%f y=%f z=%f", Vect.x, Vect.y, Vect.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル VECTOR 構造体 Vect をスケーリング行列を使用して 0.5f 倍します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
VECTOR Vect ;
MATRIX Matrix ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Vect に値を代入
Vect = VGet( 100.0f, 200.0f, 500.0f ) ;
// 0.5倍スケーリングを行う行列を作成
Matrix = MGetScale( VGet( 0.5f, 0.5f, 0.5f ) ) ;
// 0.5倍スケーリングを行う行列を使用してベクトルのサイズを0.5倍した結果を Vect に代入する
Vect = VTransformSR( Vect, Matrix ) ;
// Vect の値を画面に表示
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Vect x=%f y=%f z=%f", Vect.x, Vect.y, Vect.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 単位行列を取得して画面に表示します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MATRIX Matrix ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 単位行列を Matrix に代入
Matrix = MGetIdent() ;
// Matrix の値を画面に表示
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix.m[0][0], Matrix.m[0][1], Matrix.m[0][2], Matrix.m[0][3] ) ;
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix.m[1][0], Matrix.m[1][1], Matrix.m[1][2], Matrix.m[1][3] ) ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix.m[2][0], Matrix.m[2][1], Matrix.m[2][2], Matrix.m[2][3] ) ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix.m[3][0], Matrix.m[3][1], Matrix.m[3][2], Matrix.m[3][3] ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 拡大行列を取得してベクトルの拡大変換を行います。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MATRIX Matrix ;
VECTOR Vect1, Vect2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 適当な値を Vect1 に代入
Vect1 = VGet( 100.0f, 8.0f, 56.0f ) ;
// 拡大行列を Matrix に代入
Matrix = MGetScale( VGet( 2.0f, 5.0f, 8.0f ) ) ;
// Vect1 を Matrix を使用して変換した値を Vect2 に代入
Vect2 = VTransform( Vect1, Matrix ) ;
// Matrix の値を画面に表示
DrawString( 0, 0, "拡大行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix.m[0][0], Matrix.m[0][1], Matrix.m[0][2], Matrix.m[0][3] ) ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix.m[1][0], Matrix.m[1][1], Matrix.m[1][2], Matrix.m[1][3] ) ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix.m[2][0], Matrix.m[2][1], Matrix.m[2][2], Matrix.m[2][3] ) ;
DrawFormatString( 0, 64, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix.m[3][0], Matrix.m[3][1], Matrix.m[3][2], Matrix.m[3][3] ) ;
// 変換元のベクトル値 Vect1 を画面に表示
DrawString( 0, 96, "変換前のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 112, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect1.x, Vect1.y, Vect1.z ) ;
// 変換後のベクトル値 Vect2 を画面に表示
DrawString( 0, 144, "変換後のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 160, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect2.x, Vect2.y, Vect2.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 平行移動行列を使用してベクトルの平行移動変換を行います。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MATRIX Matrix ;
VECTOR Vect1, Vect2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 適当な値を Vect1 に代入
Vect1 = VGet( 100.0f, 8.0f, 56.0f ) ;
// 平行移動行列を Matrix に代入
Matrix = MGetTranslate( VGet( 100.0f, 80.0f, 85.0f ) ) ;
// Vect1 を Matrix を使用して変換した値を Vect2 に代入
Vect2 = VTransform( Vect1, Matrix ) ;
// Matrix の値を画面に表示
DrawString( 0, 0, "平行移動行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix.m[0][0], Matrix.m[0][1], Matrix.m[0][2], Matrix.m[0][3] ) ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix.m[1][0], Matrix.m[1][1], Matrix.m[1][2], Matrix.m[1][3] ) ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix.m[2][0], Matrix.m[2][1], Matrix.m[2][2], Matrix.m[2][3] ) ;
DrawFormatString( 0, 64, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix.m[3][0], Matrix.m[3][1], Matrix.m[3][2], Matrix.m[3][3] ) ;
// 変換元のベクトル値 Vect1 を画面に表示
DrawString( 0, 96, "変換前のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 112, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect1.x, Vect1.y, Vect1.z ) ;
// 変換後のベクトル値 Vect2 を画面に表示
DrawString( 0, 144, "変換後のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 160, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect2.x, Vect2.y, Vect2.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル X軸回転行列を使用してベクトルのX軸回転を行います。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MATRIX Matrix ;
VECTOR Vect1, Vect2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 適当な値を Vect1 に代入
Vect1 = VGet( 100.0f, 8.0f, 56.0f ) ;
// X軸回転行列を Matrix に代入( 45度回転する行列 )
Matrix = MGetRotX( PHI_F / 4.0f ) ;
// Vect1 を Matrix を使用して変換した値を Vect2 に代入
Vect2 = VTransform( Vect1, Matrix ) ;
// Matrix の値を画面に表示
DrawString( 0, 0, "X軸回転行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix.m[0][0], Matrix.m[0][1], Matrix.m[0][2], Matrix.m[0][3] ) ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix.m[1][0], Matrix.m[1][1], Matrix.m[1][2], Matrix.m[1][3] ) ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix.m[2][0], Matrix.m[2][1], Matrix.m[2][2], Matrix.m[2][3] ) ;
DrawFormatString( 0, 64, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix.m[3][0], Matrix.m[3][1], Matrix.m[3][2], Matrix.m[3][3] ) ;
// 変換元のベクトル値 Vect1 を画面に表示
DrawString( 0, 96, "変換前のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 112, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect1.x, Vect1.y, Vect1.z ) ;
// 変換後のベクトル値 Vect2 を画面に表示
DrawString( 0, 144, "変換後のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 160, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect2.x, Vect2.y, Vect2.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル Y軸回転行列を使用してベクトルのY軸回転を行います。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MATRIX Matrix ;
VECTOR Vect1, Vect2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 適当な値を Vect1 に代入
Vect1 = VGet( 100.0f, 8.0f, 56.0f ) ;
// Y軸回転行列を Matrix に代入( 45度回転する行列 )
Matrix = MGetRotY( PHI_F / 4.0f ) ;
// Vect1 を Matrix を使用して変換した値を Vect2 に代入
Vect2 = VTransform( Vect1, Matrix ) ;
// Matrix の値を画面に表示
DrawString( 0, 0, "Y軸回転行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix.m[0][0], Matrix.m[0][1], Matrix.m[0][2], Matrix.m[0][3] ) ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix.m[1][0], Matrix.m[1][1], Matrix.m[1][2], Matrix.m[1][3] ) ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix.m[2][0], Matrix.m[2][1], Matrix.m[2][2], Matrix.m[2][3] ) ;
DrawFormatString( 0, 64, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix.m[3][0], Matrix.m[3][1], Matrix.m[3][2], Matrix.m[3][3] ) ;
// 変換元のベクトル値 Vect1 を画面に表示
DrawString( 0, 96, "変換前のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 112, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect1.x, Vect1.y, Vect1.z ) ;
// 変換後のベクトル値 Vect2 を画面に表示
DrawString( 0, 144, "変換後のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 160, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect2.x, Vect2.y, Vect2.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル Z軸回転行列を使用してベクトルのZ軸回転を行います。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MATRIX Matrix ;
VECTOR Vect1, Vect2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 適当な値を Vect1 に代入
Vect1 = VGet( 100.0f, 8.0f, 56.0f ) ;
// Z軸回転行列を Matrix に代入( 45度回転する行列 )
Matrix = MGetRotZ( PHI_F / 4.0f ) ;
// Vect1 を Matrix を使用して変換した値を Vect2 に代入
Vect2 = VTransform( Vect1, Matrix ) ;
// Matrix の値を画面に表示
DrawString( 0, 0, "Z軸回転行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix.m[0][0], Matrix.m[0][1], Matrix.m[0][2], Matrix.m[0][3] ) ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix.m[1][0], Matrix.m[1][1], Matrix.m[1][2], Matrix.m[1][3] ) ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix.m[2][0], Matrix.m[2][1], Matrix.m[2][2], Matrix.m[2][3] ) ;
DrawFormatString( 0, 64, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix.m[3][0], Matrix.m[3][1], Matrix.m[3][2], Matrix.m[3][3] ) ;
// 変換元のベクトル値 Vect1 を画面に表示
DrawString( 0, 96, "変換前のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 112, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect1.x, Vect1.y, Vect1.z ) ;
// 変換後のベクトル値 Vect2 を画面に表示
DrawString( 0, 144, "変換後のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 160, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect2.x, Vect2.y, Vect2.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル MGetRotAxis 関数を使用して敢えてY軸回転行列を作成します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MATRIX Matrix ;
VECTOR Vect1, Vect2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 適当な値を Vect1 に代入
Vect1 = VGet( 100.0f, 8.0f, 56.0f ) ;
// MGetRotAxis を使用して敢えてY軸回転行列を Matrix に代入( 45度回転する行列 )
Matrix = MGetRotAxis( VGet( 0.0f, 1.0f, 0.0f ), PHI_F / 4.0f ) ;
// Vect1 を Matrix を使用して変換した値を Vect2 に代入
Vect2 = VTransform( Vect1, Matrix ) ;
// Matrix の値を画面に表示
DrawString( 0, 0, "Y軸回転行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix.m[0][0], Matrix.m[0][1], Matrix.m[0][2], Matrix.m[0][3] ) ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix.m[1][0], Matrix.m[1][1], Matrix.m[1][2], Matrix.m[1][3] ) ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix.m[2][0], Matrix.m[2][1], Matrix.m[2][2], Matrix.m[2][3] ) ;
DrawFormatString( 0, 64, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix.m[3][0], Matrix.m[3][1], Matrix.m[3][2], Matrix.m[3][3] ) ;
// 変換元のベクトル値 Vect1 を画面に表示
DrawString( 0, 96, "変換前のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 112, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect1.x, Vect1.y, Vect1.z ) ;
// 変換後のベクトル値 Vect2 を画面に表示
DrawString( 0, 144, "変換後のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 160, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect2.x, Vect2.y, Vect2.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル X軸のプラスの方向をY軸のマイナスの方向に回転する行列を取得する。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MATRIX Matrix ;
VECTOR Vect1, Vect2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// X軸のプラスの方向をY軸のマイナスの方向に回転する行列を取得する
Matrix = MGetRotVec2( VGet( 1.0f, 0.0f, 0.0f ), VGet( 0.0f, -1.0f, 0.0f ) ) ;
// X軸に対してプラスの値を Vect1 に代入
Vect1 = VGet( 80.0f, 0.0f, 0.0f ) ;
// Vect1 を Matrix を使用して変換した値を Vect2 に代入
Vect2 = VTransform( Vect1, Matrix ) ;
// Matrix の値を画面に表示
DrawString( 0, 0, "回転行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix.m[0][0], Matrix.m[0][1], Matrix.m[0][2], Matrix.m[0][3] ) ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix.m[1][0], Matrix.m[1][1], Matrix.m[1][2], Matrix.m[1][3] ) ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix.m[2][0], Matrix.m[2][1], Matrix.m[2][2], Matrix.m[2][3] ) ;
DrawFormatString( 0, 64, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix.m[3][0], Matrix.m[3][1], Matrix.m[3][2], Matrix.m[3][3] ) ;
// 変換元のベクトル値 Vect1 を画面に表示
DrawString( 0, 96, "変換前のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 112, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect1.x, Vect1.y, Vect1.z ) ;
// 変換後のベクトル値 Vect2 を画面に表示
DrawString( 0, 144, "変換後のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 160, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect2.x, Vect2.y, Vect2.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 基本軸上のYのプラス値をX軸 基本軸上のZのプラス値をY軸 基本軸上のXのマイナス値をZ軸とし、 且つ基本軸上の x=100.0f y=0.0f z=200.0f を原点とする 3軸上のベクトルを基本軸上のベクトルに変換する行列を取得する
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MATRIX Matrix ;
VECTOR Vect1, Vect2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 基本軸上のYのプラス値をX軸
// 基本軸上のZのプラス値をY軸
// 基本軸上のXのマイナス値をZ軸とし、
// 且つ基本軸上の x=100.0f y=0.0f z=200.0f を原点とする
// 3軸上のベクトルを基本軸上のベクトルに変換する行列の取得
Matrix = MGetAxis1(
VGet( 0.0f, 1.0f, 0.0f ),
VGet( 0.0f, 0.0f, 1.0f ),
VGet( -1.0f, 0.0f, 0.0f ),
VGet( 100.0f, 0.0f, 200.0f ) ) ;
// 上記軸上のX軸とY軸に対してプラスのベクトル Vect1 に代入
Vect1 = VGet( 80.0f, 50.0f, 0.0f ) ;
// Vect1 を Matrix を使用して変換した値を Vect2 に代入
Vect2 = VTransform( Vect1, Matrix ) ;
// Matrix の値を画面に表示
DrawString( 0, 0, "変換行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix.m[0][0], Matrix.m[0][1], Matrix.m[0][2], Matrix.m[0][3] ) ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix.m[1][0], Matrix.m[1][1], Matrix.m[1][2], Matrix.m[1][3] ) ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix.m[2][0], Matrix.m[2][1], Matrix.m[2][2], Matrix.m[2][3] ) ;
DrawFormatString( 0, 64, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix.m[3][0], Matrix.m[3][1], Matrix.m[3][2], Matrix.m[3][3] ) ;
// 変換元のベクトル値 Vect1 を画面に表示
DrawString( 0, 96, "変換前のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 112, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect1.x, Vect1.y, Vect1.z ) ;
// 変換後のベクトル値 Vect2 を画面に表示
DrawString( 0, 144, "変換後のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 160, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect2.x, Vect2.y, Vect2.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 基本軸上のベクトルを 基本軸上のYのプラス値をX軸 基本軸上のZのプラス値をY軸 基本軸上のXのマイナス値をZ軸とし、 且つ基本軸上の x=100.0f y=0.0f z=200.0f を原点とする 3軸上のベクトルに変換する行列を取得する
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MATRIX Matrix ;
VECTOR Vect1, Vect2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 基本軸上のベクトルを
// 基本軸上のYのプラス値をX軸
// 基本軸上のZのプラス値をY軸
// 基本軸上のXのマイナス値をZ軸とし、
// 且つ基本軸上の x=100.0f y=0.0f z=200.0f を原点とする
// 3軸上のベクトルに変換する行列の取得
Matrix = MGetAxis2(
VGet( 0.0f, 1.0f, 0.0f ),
VGet( 0.0f, 0.0f, 1.0f ),
VGet( -1.0f, 0.0f, 0.0f ),
VGet( 100.0f, 0.0f, 200.0f ) ) ;
// 任意の3軸上の原点に位置する基本軸上のベクトルを Vect に代入
Vect1 = VGet( 100.0f, 0.0f, 200.0f ) ;
// Vect1 を Matrix を使用して変換した値を Vect2 に代入
Vect2 = VTransform( Vect1, Matrix ) ;
// Matrix の値を画面に表示
DrawString( 0, 0, "変換行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix.m[0][0], Matrix.m[0][1], Matrix.m[0][2], Matrix.m[0][3] ) ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix.m[1][0], Matrix.m[1][1], Matrix.m[1][2], Matrix.m[1][3] ) ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix.m[2][0], Matrix.m[2][1], Matrix.m[2][2], Matrix.m[2][3] ) ;
DrawFormatString( 0, 64, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix.m[3][0], Matrix.m[3][1], Matrix.m[3][2], Matrix.m[3][3] ) ;
// 変換元のベクトル値 Vect1 を画面に表示
DrawString( 0, 96, "変換前のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 112, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect1.x, Vect1.y, Vect1.z ) ;
// 変換後のベクトル値 Vect2 を画面に表示
DrawString( 0, 144, "変換後のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 160, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect2.x, Vect2.y, Vect2.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ベクトルを0.8倍する行列と0.2倍する行列を足して、その行列を使用して ベクトルを変換します、0.8倍と0.2倍を足すと1.0倍なので、ベクトルは 変換前と同じ値になります。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MATRIX Matrix, Matrix1, Matrix2 ;
VECTOR Vect1, Vect2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 0.8倍に拡大する行列と0.2倍に拡大する行列を Matrix1 と Matrix2 に代入
Matrix1 = MGetScale( VGet( 0.8f, 0.8f, 0.8f ) ) ;
Matrix2 = MGetScale( VGet( 0.2f, 0.2f, 0.2f ) ) ;
// 二つの行列を足したものを Matrix に代入
Matrix = MAdd( Matrix1, Matrix2 ) ;
// 適当な値を Vect1 に代入
Vect1 = VGet( 100.0f, 0.0f, 200.0f ) ;
// Vect1 を Matrix3 を使用して変換した値を Vect2 に代入
Vect2 = VTransform( Vect1, Matrix ) ;
// Matrix1 の値を画面に表示
DrawString( 0, 0, "0.8倍行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix1.m[0][0], Matrix1.m[0][1], Matrix1.m[0][2], Matrix1.m[0][3] ) ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix1.m[1][0], Matrix1.m[1][1], Matrix1.m[1][2], Matrix1.m[1][3] ) ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix1.m[2][0], Matrix1.m[2][1], Matrix1.m[2][2], Matrix1.m[2][3] ) ;
DrawFormatString( 0, 64, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix1.m[3][0], Matrix1.m[3][1], Matrix1.m[3][2], Matrix1.m[3][3] ) ;
// Matrix2 の値を画面に表示
DrawString( 0, 96, "0.2倍行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 112, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix2.m[0][0], Matrix2.m[0][1], Matrix2.m[0][2], Matrix2.m[0][3] ) ;
DrawFormatString( 0, 128, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix2.m[1][0], Matrix2.m[1][1], Matrix2.m[1][2], Matrix2.m[1][3] ) ;
DrawFormatString( 0, 144, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix2.m[2][0], Matrix2.m[2][1], Matrix2.m[2][2], Matrix2.m[2][3] ) ;
DrawFormatString( 0, 160, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix2.m[3][0], Matrix2.m[3][1], Matrix2.m[3][2], Matrix2.m[3][3] ) ;
// Matrix の値を画面に表示
DrawString( 0, 192, "加算後の行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 208, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix.m[0][0], Matrix.m[0][1], Matrix.m[0][2], Matrix.m[0][3] ) ;
DrawFormatString( 0, 224, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix.m[1][0], Matrix.m[1][1], Matrix.m[1][2], Matrix.m[1][3] ) ;
DrawFormatString( 0, 240, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix.m[2][0], Matrix.m[2][1], Matrix.m[2][2], Matrix.m[2][3] ) ;
DrawFormatString( 0, 256, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix.m[3][0], Matrix.m[3][1], Matrix.m[3][2], Matrix.m[3][3] ) ;
// 変換元のベクトル値 Vect1 を画面に表示
DrawString( 0, 288, "変換前のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 304, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect1.x, Vect1.y, Vect1.z ) ;
// 変換後のベクトル値 Vect2 を画面に表示
DrawString( 0, 336, "変換後のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 352, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect2.x, Vect2.y, Vect2.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ベクトルをY軸回転90度する行列とY軸回転−90度する2倍に拡大する行列を乗算して ベクトルに対してY軸回転行列→2倍拡大行列の順で VTransform を使用した場合と同じ効果がある行列を作成します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MATRIX Matrix, Matrix1, Matrix2 ;
VECTOR Vect1, Vect2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Y軸回転90度する行列とY軸回転−90度する行列を作成
Matrix1 = MGetRotY( PHI_F / 2.0f ) ;
Matrix2 = MGetRotY( -PHI_F / 2.0f ) ;
// 二つの行列を0.5倍して加算したものを Matrix に代入
Matrix = MAdd( MScale( Matrix1, 0.5f ), MScale( Matrix2, 0.5f ) ) ;
// 適当な値を Vect1 に代入
Vect1 = VGet( 200.0f, 0.0f, 0.0f ) ;
// Vect1 を Matrix3 を使用して変換した値を Vect2 に代入
Vect2 = VTransform( Vect1, Matrix ) ;
// Matrix1 の値を画面に表示
DrawString( 0, 0, "Y軸90度回転行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix1.m[0][0], Matrix1.m[0][1], Matrix1.m[0][2], Matrix1.m[0][3] ) ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix1.m[1][0], Matrix1.m[1][1], Matrix1.m[1][2], Matrix1.m[1][3] ) ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix1.m[2][0], Matrix1.m[2][1], Matrix1.m[2][2], Matrix1.m[2][3] ) ;
DrawFormatString( 0, 64, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix1.m[3][0], Matrix1.m[3][1], Matrix1.m[3][2], Matrix1.m[3][3] ) ;
// Matrix2 の値を画面に表示
DrawString( 0, 96, "Y軸−90度回転行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 112, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix2.m[0][0], Matrix2.m[0][1], Matrix2.m[0][2], Matrix2.m[0][3] ) ;
DrawFormatString( 0, 128, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix2.m[1][0], Matrix2.m[1][1], Matrix2.m[1][2], Matrix2.m[1][3] ) ;
DrawFormatString( 0, 144, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix2.m[2][0], Matrix2.m[2][1], Matrix2.m[2][2], Matrix2.m[2][3] ) ;
DrawFormatString( 0, 160, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix2.m[3][0], Matrix2.m[3][1], Matrix2.m[3][2], Matrix2.m[3][3] ) ;
// Matrix の値を画面に表示
DrawString( 0, 192, "乗算後の行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 208, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix.m[0][0], Matrix.m[0][1], Matrix.m[0][2], Matrix.m[0][3] ) ;
DrawFormatString( 0, 224, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix.m[1][0], Matrix.m[1][1], Matrix.m[1][2], Matrix.m[1][3] ) ;
DrawFormatString( 0, 240, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix.m[2][0], Matrix.m[2][1], Matrix.m[2][2], Matrix.m[2][3] ) ;
DrawFormatString( 0, 256, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix.m[3][0], Matrix.m[3][1], Matrix.m[3][2], Matrix.m[3][3] ) ;
// 変換元のベクトル値 Vect1 を画面に表示
DrawString( 0, 288, "変換前のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 304, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect1.x, Vect1.y, Vect1.z ) ;
// 変換後のベクトル値 Vect2 を画面に表示
DrawString( 0, 336, "変換後のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 352, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect2.x, Vect2.y, Vect2.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ベクトルをY軸回転90度する行列とX軸回転90度する行列をそれぞれ0.5倍して 加算したものを作ります。 この行列はY軸回転90度する行列を使用して VTransform したベクトルと X軸回転90度する行列を使用して VTransform したベクトルをそれぞれ0.5倍して 加算したものと同じ結果が出力される行列となります。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MATRIX Matrix, Matrix1, Matrix2 ;
VECTOR Vect1, Vect2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Y軸回転90度する行列とX軸回転90度する行列を作成
Matrix1 = MGetRotY( PHI_F / 2.0f ) ;
Matrix2 = MGetRotX( PHI_F / 2.0f ) ;
// 二つの行列を0.5倍して加算したものを Matrix に代入
Matrix = MAdd( MScale( Matrix1, 0.5f ), MScale( Matrix2, 0.5f ) ) ;
// 適当な値を Vect1 に代入
Vect1 = VGet( 200.0f, 0.0f, 0.0f ) ;
// Vect1 を Matrix3 を使用して変換した値を Vect2 に代入
Vect2 = VTransform( Vect1, Matrix ) ;
// Matrix1 の値を画面に表示
DrawString( 0, 0, "Y軸90度回転行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix1.m[0][0], Matrix1.m[0][1], Matrix1.m[0][2], Matrix1.m[0][3] ) ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix1.m[1][0], Matrix1.m[1][1], Matrix1.m[1][2], Matrix1.m[1][3] ) ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix1.m[2][0], Matrix1.m[2][1], Matrix1.m[2][2], Matrix1.m[2][3] ) ;
DrawFormatString( 0, 64, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix1.m[3][0], Matrix1.m[3][1], Matrix1.m[3][2], Matrix1.m[3][3] ) ;
// Matrix2 の値を画面に表示
DrawString( 0, 96, "X軸90度回転行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 112, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix2.m[0][0], Matrix2.m[0][1], Matrix2.m[0][2], Matrix2.m[0][3] ) ;
DrawFormatString( 0, 128, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix2.m[1][0], Matrix2.m[1][1], Matrix2.m[1][2], Matrix2.m[1][3] ) ;
DrawFormatString( 0, 144, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix2.m[2][0], Matrix2.m[2][1], Matrix2.m[2][2], Matrix2.m[2][3] ) ;
DrawFormatString( 0, 160, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix2.m[3][0], Matrix2.m[3][1], Matrix2.m[3][2], Matrix2.m[3][3] ) ;
// Matrix の値を画面に表示
DrawString( 0, 192, "乗算後の行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 208, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix.m[0][0], Matrix.m[0][1], Matrix.m[0][2], Matrix.m[0][3] ) ;
DrawFormatString( 0, 224, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix.m[1][0], Matrix.m[1][1], Matrix.m[1][2], Matrix.m[1][3] ) ;
DrawFormatString( 0, 240, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix.m[2][0], Matrix.m[2][1], Matrix.m[2][2], Matrix.m[2][3] ) ;
DrawFormatString( 0, 256, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix.m[3][0], Matrix.m[3][1], Matrix.m[3][2], Matrix.m[3][3] ) ;
// 変換元のベクトル値 Vect1 を画面に表示
DrawString( 0, 288, "変換前のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 304, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect1.x, Vect1.y, Vect1.z ) ;
// 変換後のベクトル値 Vect2 を画面に表示
DrawString( 0, 336, "変換後のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 352, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect2.x, Vect2.y, Vect2.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ベクトルをY軸回転90度する行列を転置した行列を使用してベクトルを回転します。 回転行列を転置した行列は逆回転( Y軸回転−90度 )する行列となります。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MATRIX Matrix, Matrix2 ;
VECTOR Vect1, Vect2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// Y軸回転90度する行列を Matrix2 に代入
Matrix2 = MGetRotY( PHI_F / 2.0f ) ;
// Matrix2 を転置した行列を Matrix に代入
Matrix = MTranspose( Matrix2 ) ;
// 適当な値を Vect1 に代入
Vect1 = VGet( 200.0f, 0.0f, 0.0f ) ;
// Vect1 を Matrix を使用して変換した値を Vect2 に代入
Vect2 = VTransform( Vect1, Matrix ) ;
// Matrix2 の値を画面に表示
DrawString( 0, 0, "Y軸90度回転行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix2.m[0][0], Matrix2.m[0][1], Matrix2.m[0][2], Matrix2.m[0][3] ) ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix2.m[1][0], Matrix2.m[1][1], Matrix2.m[1][2], Matrix2.m[1][3] ) ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix2.m[2][0], Matrix2.m[2][1], Matrix2.m[2][2], Matrix2.m[2][3] ) ;
DrawFormatString( 0, 64, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix2.m[3][0], Matrix2.m[3][1], Matrix2.m[3][2], Matrix2.m[3][3] ) ;
// Matrix の値を画面に表示
DrawString( 0, 192, "転置行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 208, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix.m[0][0], Matrix.m[0][1], Matrix.m[0][2], Matrix.m[0][3] ) ;
DrawFormatString( 0, 224, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix.m[1][0], Matrix.m[1][1], Matrix.m[1][2], Matrix.m[1][3] ) ;
DrawFormatString( 0, 240, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix.m[2][0], Matrix.m[2][1], Matrix.m[2][2], Matrix.m[2][3] ) ;
DrawFormatString( 0, 256, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix.m[3][0], Matrix.m[3][1], Matrix.m[3][2], Matrix.m[3][3] ) ;
// 変換元のベクトル値 Vect1 を画面に表示
DrawString( 0, 288, "変換前のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 304, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect1.x, Vect1.y, Vect1.z ) ;
// 変換後のベクトル値 Vect2 を画面に表示
DrawString( 0, 336, "変換後のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 352, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect2.x, Vect2.y, Vect2.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 平行移動する行列とその逆行列を用意して、適当な値を持ったベクトルが 平行移動行列→その逆行列 の順で VTransform すれば元の値に戻るかを試します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MATRIX Matrix, Matrix2 ;
VECTOR Vect1, Vect2, Vect3 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 平行移動する行列を Matrix2 に代入
Matrix2 = MGetTranslate( VGet( 200.0f, 100.0f, 80.0f ) ) ;
// Matrix2 の逆行列を Matrix に代入
Matrix = MInverse( Matrix2 ) ;
// 適当な値を Vect1 に代入
Vect1 = VGet( 200.0f, 0.0f, 0.0f ) ;
// Vect1 を Matrix2 を使用して変換した値を Vect2 に代入
Vect2 = VTransform( Vect1, Matrix2 ) ;
// Vect2 を Matrix2 の逆行列である Matrix で変換したものを Vect3 に代入
Vect3 = VTransform( Vect2, Matrix ) ;
// Matrix2 の値を画面に表示
DrawString( 0, 0, "平行移動行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix2.m[0][0], Matrix2.m[0][1], Matrix2.m[0][2], Matrix2.m[0][3] ) ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix2.m[1][0], Matrix2.m[1][1], Matrix2.m[1][2], Matrix2.m[1][3] ) ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix2.m[2][0], Matrix2.m[2][1], Matrix2.m[2][2], Matrix2.m[2][3] ) ;
DrawFormatString( 0, 64, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix2.m[3][0], Matrix2.m[3][1], Matrix2.m[3][2], Matrix2.m[3][3] ) ;
// Matrix の値を画面に表示
DrawString( 0, 192, "逆行列", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 208, GetColor( 255,255,255 ), "m00 %f m01 %f m02 %f m03 %f",
Matrix.m[0][0], Matrix.m[0][1], Matrix.m[0][2], Matrix.m[0][3] ) ;
DrawFormatString( 0, 224, GetColor( 255,255,255 ), "m10 %f m11 %f m12 %f m13 %f",
Matrix.m[1][0], Matrix.m[1][1], Matrix.m[1][2], Matrix.m[1][3] ) ;
DrawFormatString( 0, 240, GetColor( 255,255,255 ), "m20 %f m21 %f m22 %f m23 %f",
Matrix.m[2][0], Matrix.m[2][1], Matrix.m[2][2], Matrix.m[2][3] ) ;
DrawFormatString( 0, 256, GetColor( 255,255,255 ), "m30 %f m31 %f m32 %f m33 %f",
Matrix.m[3][0], Matrix.m[3][1], Matrix.m[3][2], Matrix.m[3][3] ) ;
// 変換元のベクトル値 Vect1 を画面に表示
DrawString( 0, 288, "変換前のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 304, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect1.x, Vect1.y, Vect1.z ) ;
// 変換後のベクトル値 Vect2 を画面に表示
DrawString( 0, 336, "平行移動後のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 352, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect2.x, Vect2.y, Vect2.z ) ;
// 変換後のベクトル値 Vect3 を画面に表示
DrawString( 0, 384, "逆行列乗算後のベクトル", GetColor( 255,255,255 ) ) ;
DrawFormatString( 0, 400, GetColor( 255,255,255 ), "x=%f y=%f z=%f", Vect3.x, Vect3.y, Vect3.z ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| 衝突検出系関数 | ||||||||||||||
| ||||||||||||||
|
サンプル 線分を二つ定義して、片方の線分の終点を左右動かし、二線分の最近点間の距離が 64 以下になった際に 線分の色を赤色にします。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
float xadd, length ;
VECTOR LineA1, LineA2, LineB1, LineB2 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// 二線分の座標をセット
LineA1 = VGet( 0.0f, 0.0f, 0.0f ) ;
LineA2 = VGet( 0.0f, 200.0f, 0.0f ) ;
LineB1 = VGet( 320.0f, 480.0f, 0.0f ) ;
LineB2 = VGet( 320.0f, 240.0f, 0.0f ) ;
// 座標と加算数の初期化
xadd = 8.0f ;
// ウインドウが閉じられるか何かキーが押されるまでループ
while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// 線分の片方の終点を移動
LineA2.x += xadd ;
if( LineA2.x < 0.0f || LineA2.x > 640.0f )
xadd = -xadd ;
// 二線分の最近点どうしの距離を求める
length = Segment_Segment_MinLength( LineA1, LineA2, LineB1, LineB2 ) ;
// 片方の線分の描画
DrawLine( LineB1.x, LineB1.y, LineB2.x, LineB2.y, GetColor( 255,255,255 ) ) ;
// もう一つの線分を距離が 64 以下だったら色を変えて描画
if( length < 64.0f )
{
DrawLine( LineA1.x, LineA1.y, LineA2.x, LineA2.y, GetColor( 255,0,0 ) ) ;
}
else
{
DrawLine( LineA1.x, LineA1.y, LineA2.x, LineA2.y, GetColor( 0,255,0 ) ) ;
}
// 裏画面の内容を表画面に反映させる
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 線分と三角形の座標を定義して、線分の終点を左右動かし、線分と三角形の最近点間の距離が 64 以下になった際に 三角形の色を赤色にします。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
float xadd, length ;
VECTOR Line1, Line2, Tri1, Tri2, Tri3 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// 線分の座標と三角形を形成する3頂点の座標をセット
Line1 = VGet( 0.0f, 0.0f, 0.0f ) ;
Line2 = VGet( 0.0f, 400.0f, 0.0f ) ;
Tri1 = VGet( 320.0f, 200.0f, 0.0f ) ;
Tri2 = VGet( 280.0f, 260.0f, 0.0f ) ;
Tri3 = VGet( 360.0f, 260.0f, 0.0f ) ;
// 座標と加算数の初期化
xadd = 8.0f ;
// ウインドウが閉じられるか何かキーが押されるまでループ
while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// 線分の終点を移動
Line2.x += xadd ;
if( Line2.x < 0.0f || Line2.x > 640.0f )
xadd = -xadd ;
// 線分と三角形の最近点間の距離を求める
length = Segment_Triangle_MinLength( Line1, Line2, Tri1, Tri2, Tri3 ) ;
// 線分の描画
DrawLine( Line1.x, Line1.y, Line2.x, Line2.y, GetColor( 255,255,255 ) ) ;
// 三角形との距離が 64 以下だったら色を変えて描画
if( length < 64.0f )
{
DrawTriangle( Tri1.x, Tri1.y, Tri2.x, Tri2.y, Tri3.x, Tri3.y, GetColor( 255,0,0 ), TRUE ) ;
}
else
{
DrawTriangle( Tri1.x, Tri1.y, Tri2.x, Tri2.y, Tri3.x, Tri3.y, GetColor( 0,255,0 ), TRUE ) ;
}
// 裏画面の内容を表画面に反映させる
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 線分と点の座標を定義して、点の座標を上下に動かし、線分と点の最近点間の距離が 64 以下になった際に 線分の色を赤色にします。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
float yadd, length ;
VECTOR Line1, Line2, Point ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// 線分の座標と点の座標をセット
Line1 = VGet( 0.0f, 0.0f, 0.0f ) ;
Line2 = VGet( 640.0f, 480.0f, 0.0f ) ;
Point = VGet( 320.0f, 0.0f, 0.0f ) ;
// 座標と加算数の初期化
yadd = 4.0f ;
// ウインドウが閉じられるか何かキーが押されるまでループ
while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// 点の座標を移動
Point.y += yadd ;
if( Point.y < 0.0f || Point.y > 480.0f )
yadd = -yadd ;
// 線分と点が最も近づく座標間の距離を求める
length = Segment_Point_MinLength( Line1, Line2, Point ) ;
// 点の描画
DrawPixel( Point.x, Point.y, GetColor( 255,255,255 ) ) ;
// 点との距離が 64 以下だったら色を変えて描画
if( length < 64.0f )
{
DrawLine( Line1.x, Line1.y, Line2.x, Line2.y, GetColor( 255,0,0 ) ) ;
}
else
{
DrawLine( Line1.x, Line1.y, Line2.x, Line2.y, GetColor( 0,255,0 ) ) ;
}
// 裏画面の内容を表画面に反映させる
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル 線分と三角形の座標を定義して、線分の終点を上下に動かしながら線分と三角形の当たり判定を行い 三角形と接触した場合は線分の始点と接触点とを結ぶ線を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
float yadd ;
HITRESULT_LINE Result ;
VECTOR Line1, Line2, Tri1, Tri2, Tri3 ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// 線分の座標と三角形の座標をセット
Line1 = VGet( 0.0f, 240.0f, 0.0f ) ;
Line2 = VGet( 640.0f, 240.0f, 0.0f ) ;
Tri1 = VGet( 320.0f, 128.0f, 0.0f ) ;
Tri2 = VGet( 320.0f, 240.0f, 200.0f ) ;
Tri3 = VGet( 320.0f, 240.0f, -200.0f ) ;
// 座標と加算数の初期化
yadd = 4.0f ;
// ウインドウが閉じられるか何かキーが押されるまでループ
while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// 線の終点座標を移動
Line2.y += yadd ;
if( Line2.y < 0.0f || Line2.y > 480.0f )
yadd = -yadd ;
// 線分と点が最も近づく座標間の距離を求める
Result = HitCheck_Line_Triangle( Line1, Line2, Tri1, Tri2, Tri3 ) ;
// 三角形を真横から見たときにできる線を描画
DrawLine( Tri1.x, Tri1.y, Tri2.x, Tri2.y, GetColor( 255,255,255 ) ) ;
// 三角形と接触していたら始点と接触点を結ぶ線を
// そうでない場合は始点と終点を結ぶ線を描画する
if( Result.HitFlag == 1 )
{
DrawLine( Line1.x, Line1.y, Result.Position.x, Result.Position.y, GetColor( 255,0,0 ) ) ;
}
else
{
DrawLine( Line1.x, Line1.y, Line2.x, Line2.y, GetColor( 0,255,0 ) ) ;
}
// 裏画面の内容を表画面に反映させる
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| モデルの読み込み・複製関係の関数 | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x を読み込んで画面に表示します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x を読み込んだあと、同じデータを使用するモデルハンドルを3つ作成し、 それぞれ座標をずらして描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle[ 4 ] ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle[ 0 ] = MV1LoadModel( "DxChara.x" ) ;
// 同じデータを使用するモデルハンドルを3つ作成する
ModelHandle[ 1 ] = MV1DuplicateModel( ModelHandle[ 0 ] ) ;
ModelHandle[ 2 ] = MV1DuplicateModel( ModelHandle[ 0 ] ) ;
ModelHandle[ 3 ] = MV1DuplicateModel( ModelHandle[ 0 ] ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle[ 0 ], VGet( -200.0f, -300.0f, 600.0f ) ) ;
MV1SetPosition( ModelHandle[ 1 ], VGet( 150.0f, -300.0f, 600.0f ) ) ;
MV1SetPosition( ModelHandle[ 2 ], VGet( 500.0f, -300.0f, 600.0f ) ) ;
MV1SetPosition( ModelHandle[ 3 ], VGet( 850.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle[ 0 ] ) ;
MV1DrawModel( ModelHandle[ 1 ] ) ;
MV1DrawModel( ModelHandle[ 2 ] ) ;
MV1DrawModel( ModelHandle[ 3 ] ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル DxChara.x を MV1LoadModel で読み込んだ後、ひたすら MV1DuplicateModel でモデルを作成 → 描画 → MV1DeleteModel で削除を繰り返します。 ( サンプルでは MV1DeleteModel を使うために無意味に作成と削除を繰り返していますが、移動して描画する度に削除と作成をしなければいけないわけではありません )
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle, DupModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 何かボタンが押されるかウインドウが閉じられるまでループ
while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// 読み込んだデータと同じデータを使用するモデルハンドルを作成する
DupModelHandle = MV1DuplicateModel( ModelHandle ) ;
// 画面に映るランダムな位置に3Dモデルを移動
MV1SetPosition( DupModelHandle, VGet( ( float )GetRand( 640 ), ( float )-GetRand( 300 ), GetRand( 300 ) + 300.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( DupModelHandle ) ;
// 3Dモデルの削除
MV1DeleteModel( DupModelHandle ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| モデル描画関係 | ||||||||||||||
| ||||||||||||||
|
サンプル MV1LoadModel のサンプルを参考にして下さい。 | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x を読み込んで、2番目のフレームのみ画面に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルの2番目のフレームを描画
MV1DrawFrame( ModelHandle, 2 ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x を読み込んで、0番目のメッシュを画面に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルの0番目のメッシュを描画
MV1DrawMesh( ModelHandle, 0 ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| モデル基本制御関係 | ||||||||||||||
| ||||||||||||||
|
サンプル MV1LoadModel のサンプルを参考にして下さい。 | ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x を読み込んで、x軸方向に2倍に拡大して描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルのスケールをx軸方向に2倍にする
MV1SetScale( ModelHandle, VGet( 2.0f, 1.0f, 1.0f ) ) ;
// 3Dモデルを描画
MV1DrawModel( ModelHandle ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x を読み込んで、y軸を回転軸として90度回転して描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3DモデルのY軸の回転値を90度にセットする
MV1SetRotationXYZ( ModelHandle, VGet( 0.0f, 90.0f * PHI_F / 180.0f, 0.0f ) ) ;
// 3Dモデルを描画
MV1DrawModel( ModelHandle ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x を読み込んで、モデルのz軸の方向を画面左上の方に向けて描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 0.0f, 600.0f ) ) ;
// 3DモデルのZ軸を画面左上方向に向ける
// ( DxChara.x はZ軸のマイナス方向に向いているので右下方向に傾きます )
MV1SetRotationZYAxis( ModelHandle, VGet( -0.5f, 0.5f, 0.0f ), VGet( 0.5f, 0.5f, 0.0f ), 0.0f ) ;
// 3Dモデルを描画
MV1DrawModel( ModelHandle ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x を読み込んで、拡大率を2倍にしてから座標をカメラの写る位置に移動するということを行列を使用して設定した後に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 2倍に拡大した後画面に映る位置に3Dモデルを移動する行列のセット
MV1SetMatrix( ModelHandle, MMult( MGetScale( VGet( 2.0f, 2.0f, 2.0f ) ), MGetTranslate( VGet( 320.0f, -600.0f, 600.0f ) ) ) ) ;
// 3Dモデルを描画
MV1DrawModel( ModelHandle ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x を読み込んで複製した後、最初に読み込んだモデルハンドルの方に座標位置変更や拡大率の設定を行い、 その結果の行列を複製したモデルに設定して描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle, SubModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// ModelHandle と同じモデルを使用するモデルの作成
SubModelHandle = MV1DuplicateModel( ModelHandle ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 0.0f, 600.0f ) ) ;
// 3Dモデルの拡大率を0.5倍にする
MV1SetScale( ModelHandle, VGet( 0.5f, 0.5f, 0.5f ) ) ;
// ModelHandle に設定した座標変換パラメータの結果の行列を SubModelHandle の座標変換行列として設定する
MV1SetMatrix( SubModelHandle, MV1GetMatrix( ModelHandle ) ) ;
// SubModelHandle の方の3Dモデルを描画
MV1DrawModel( SubModelHandle ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x を GetNowCount が返す値が奇数秒の時だけ描画する。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 何かキーが押されるかウインドウが閉じられるまでループする
while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 )
{
// 画面をクリアする
ClearDrawScreen() ;
// 3Dモデルをカウンタが奇数秒の時は描画して、偶数表のときは描画しないようにする
if( GetNowCount() % 2000 < 1000 )
{
MV1SetVisible( ModelHandle, TRUE ) ;
}
else
{
MV1SetVisible( ModelHandle, FALSE ) ;
}
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x のディフューズカラーの緑成分と青成分を0%にして描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルのディフューズカラーの緑成分と青成分を0%にする
MV1SetDifColorScale( ModelHandle, GetColorF( 1.0f, 0.0f, 0.0f, 1.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x のスペキュラカラーの緑成分と青成分を0%にして描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルのスペキュラカラーの緑成分と青成分を0%にする
MV1SetSpcColorScale( ModelHandle, GetColorF( 1.0f, 0.0f, 0.0f, 1.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x のエミッシブカラーの緑成分と青成分を0%にして描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルのエミッシブカラーの緑成分と青成分を0%にする
MV1SetEmiColorScale( ModelHandle, GetColorF( 1.0f, 0.0f, 0.0f, 1.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x のアンビエントカラーの緑成分と青成分を0%にして描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルのアンビエントカラーの緑成分と青成分を0%にする
MV1SetAmbColorScale( ModelHandle, GetColorF( 1.0f, 0.0f, 0.0f, 1.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x の不透明度を上下キーで操作できるようにした上で、 画面上に MV1GetSemiTransState 関数の戻り値を表示して半透明要素があるかどうかを確認できるようにしています。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
float OpacityRate ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 不透明度を初期化
OpacityRate = 1.0f ;
// ESCキーが押されるかウインドウが閉じられるまでループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// 画面のクリア
ClearDrawScreen() ;
// 上キーが押されたら不透明度を上げる
if( CheckHitKey( KEY_INPUT_UP ) )
{
OpacityRate += 0.05f ;
if( OpacityRate > 1.0f )
{
OpacityRate = 1.0f ;
}
}
// 下キーが押されたら不透明度を下げる
if( CheckHitKey( KEY_INPUT_DOWN ) )
{
OpacityRate -= 0.05f ;
if( OpacityRate < 0.0f )
{
OpacityRate = 0.0f ;
}
}
// 3Dモデルの不透明度を設定する
MV1SetOpacityRate( ModelHandle, OpacityRate ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// 現在の不透明度と、MV1GetSemiTransState の戻り値を描画する
DrawFormatString( 0, 0, GetColor( 255,255,255 ),
"ESC Key:Exit OpacityRate:%f SemiTransState:%d",
OpacityRate, MV1GetSemiTransState( ModelHandle ) ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x の不透明度を50%にして描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 透明で描画されているということが分かるように画面全体を赤で塗りつぶす
DrawBox( 0, 0, 640, 480, GetColor( 255,0,0 ), TRUE ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルの不透明度を50%にする
MV1SetOpacityRate( ModelHandle, 0.5f ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル MV1SetMeshUseVertDifColor関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| アニメーション関係 | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x に含まれる0番目のアニメーションをループ再生します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle, AttachIndex ;
float TotalTime, PlayTime ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルの0番目のアニメーションをアタッチする
AttachIndex = MV1AttachAnim( ModelHandle, 0, -1, FALSE ) ;
// アタッチしたアニメーションの総再生時間を取得する
TotalTime = MV1GetAttachAnimTotalTime( ModelHandle, AttachIndex ) ;
// 再生時間の初期化
PlayTime = 0.0f ;
// 何かキーが押されるかウインドウが閉じられるまでループ
while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// 再生時間を進める
PlayTime += 100.0f ;
// 再生時間がアニメーションの総再生時間に達したら再生時間を0に戻す
if( PlayTime >= TotalTime )
{
PlayTime = 0.0f ;
}
// 再生時間をセットする
MV1SetAttachAnimTime( ModelHandle, AttachIndex, PlayTime ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x に含まれる0番目のアニメーションと1番のアニメーションを交互に再生します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle, AttachIndex, PlayAnim ;
float TotalTime, PlayTime ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルの0番目のアニメーションをアタッチする
AttachIndex = MV1AttachAnim( ModelHandle, 0, -1, FALSE ) ;
// アタッチしたアニメーションの総再生時間を取得する
TotalTime = MV1GetAttachAnimTotalTime( ModelHandle, AttachIndex ) ;
// 再生時間の初期化
PlayTime = 0.0f ;
// 再生しているアニメーションを0番にする
PlayAnim = 0 ;
// アニメーション0の再生が終わるか、何かキーが押されるかウインドウが閉じられるまでループ
while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// 再生時間を進める
PlayTime += 100.0f ;
// 再生時間がアニメーションの総再生時間に達したら次のアニメーションにする
if( PlayTime >= TotalTime )
{
// 再生しているアニメーションを、今までが0番だったら1番に、1番だったら0番にする
if( PlayAnim == 0 )
{
PlayAnim = 1 ;
}
else
{
PlayAnim = 0 ;
}
// 今までアタッチしていたアニメーションのデタッチ
MV1DetachAnim( ModelHandle, AttachIndex ) ;
// 3Dモデルの PlayAnim 番目のアニメーションをアタッチする
AttachIndex = MV1AttachAnim( ModelHandle, PlayAnim, -1, FALSE ) ;
// アタッチしたアニメーションの総再生時間を取得する
TotalTime = MV1GetAttachAnimTotalTime( ModelHandle, AttachIndex ) ;
// 再生時間の初期化
PlayTime = 0.0f ;
}
// 再生時間をセットする
MV1SetAttachAnimTime( ModelHandle, AttachIndex, PlayTime ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x に含まれる0番目のアニメーションの再生時間 10000.0f の状態を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle, AttachIndex ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルの0番目のアニメーションをアタッチする
AttachIndex = MV1AttachAnim( ModelHandle, 0, -1, FALSE ) ;
// アタッチしたアニメーションの再生時間を 10000.0f にする
MV1SetAttachAnimTime( ModelHandle, AttachIndex, 10000.0f ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x に含まれる0番目のアニメーションの総時間を画面左上に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle, AttachIndex ;
float TotalTime ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 3Dモデルの0番目のアニメーションをアタッチする
AttachIndex = MV1AttachAnim( ModelHandle, 0, -1, FALSE ) ;
// アニメーション0番の総時間を画面に描画
TotalTime = MV1GetAttachAnimTotalTime( ModelHandle, AttachIndex ) ;
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "%f", TotalTime ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x に含まれる直立しているアニメーションから右手を前に出しているアニメーションへ徐々に移行します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle, AttachIndex1, AttachIndex2 ;
float Rate ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 画面が切り替わるのをちょっと待つ
WaitTimer( 1000 ) ;
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルの立っているアニメーション( 4番目のアニメーション )をアタッチする
AttachIndex1 = MV1AttachAnim( ModelHandle, 4, -1, FALSE ) ;
// 3Dモデルの手を前に出しているアニメーション( 5番目のアニメーション )をアタッチする
AttachIndex2 = MV1AttachAnim( ModelHandle, 5, -1, FALSE ) ;
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// 4番目のアニメーションから5番目のアニメーションに徐々に移行する
for( Rate = 0.0f ; Rate < 1.0f ; Rate += 0.01f )
{
// 画面をクリア
ClearDrawScreen() ;
// 立っているアニメーションのブレンド率をセット
MV1SetAttachAnimBlendRate( ModelHandle, AttachIndex1, 1.0f - Rate ) ;
// 手を前に出しているアニメーションのブレンド率をセット
MV1SetAttachAnimBlendRate( ModelHandle, AttachIndex2, Rate ) ;
// モデルの描画
MV1DrawModel( ModelHandle ) ;
// 裏画面の内容を表画面に反映する
ScreenFlip() ;
}
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル ありません | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x に含まれるアニメーションの一覧を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle, AnimNum, i ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// モデルに含まれるアニメーションの数を取得する
AnimNum = MV1GetAnimNum( ModelHandle ) ;
// アニメーションの一覧を描画する
for( i = 0 ; i < AnimNum ; i ++ )
{
// 左から順に、アニメーション番号、アニメーション名、アニメーションの総時間を描画する
DrawFormatString( 0, i * 16, GetColor( 255,255,255 ),
"No:%d Name:%s Time:%f",
i,
MV1GetAnimName( ModelHandle, i ),
MV1GetAnimTotalTime( ModelHandle, i ) ) ;
}
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル MV1GetAnimNum関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x に含まれる Animation_2 という名前のアニメーションを再生します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle, AnimIndex, AttachIndex ;
float TotalTime, PlayTime ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// Animation_2 という名前のアニメーションの番号を取得する
AnimIndex = MV1GetAnimIndex( ModelHandle, "Animation_2" ) ;
// 取得したアニメーション番号のアニメーションをアタッチする
AttachIndex = MV1AttachAnim( ModelHandle, AnimIndex, -1, FALSE ) ;
// アタッチしたアニメーションの総再生時間を取得する
TotalTime = MV1GetAttachAnimTotalTime( ModelHandle, AttachIndex ) ;
// 再生時間の初期化
PlayTime = 0.0f ;
// 何かキーが押されるかウインドウが閉じられるまでループ
while( ProcessMessage() == 0 && CheckHitKeyAll() == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// 再生時間を進める
PlayTime += 100.0f ;
// 再生時間がアニメーションの総再生時間に達したら再生時間を0に戻す
if( PlayTime >= TotalTime )
{
PlayTime = 0.0f ;
}
// 再生時間をセットする
MV1SetAttachAnimTime( ModelHandle, AttachIndex, PlayTime ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル MV1GetAnimNum関数 のサンプルを参照してください。 | ||||||||||||||
| マテリアル関係 | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x に含まれるアニメーションの情報を一つづつ描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle, MaterialNum, i ;
COLOR_F Color ;
char *Name ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// モデルに含まれるマテリアルの数を取得する
MaterialNum = MV1GetMaterialNum( ModelHandle ) ;
// マテリアルの情報を一つづつ描画する
for( i = 0 ; i < MaterialNum ; i ++ )
{
// 画面をクリア
ClearDrawScreen() ;
// マテリアルの名前を描画
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Name %s", MV1GetMaterialName( ModelHandle, i ) ) ;
// マテリアルのディフューズカラーを描画
Color = MV1GetMaterialDifColor( ModelHandle, i ) ;
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "Diffuse Color R:%f G:%f B:%f A:%f", Color.r, Color.g, Color.b, Color.a ) ;
// マテリアルのスペキュラカラーを描画
Color = MV1GetMaterialSpcColor( ModelHandle, i ) ;
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "Specular Color R:%f G:%f B:%f A:%f", Color.r, Color.g, Color.b, Color.a ) ;
// マテリアルのエミッシブカラーを描画
Color = MV1GetMaterialEmiColor( ModelHandle, i ) ;
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "Emissive Color R:%f G:%f B:%f A:%f", Color.r, Color.g, Color.b, Color.a ) ;
// マテリアルのアンビエントカラーを描画
Color = MV1GetMaterialAmbColor( ModelHandle, i ) ;
DrawFormatString( 0, 64, GetColor( 255,255,255 ), "Ambient Color R:%f G:%f B:%f A:%f", Color.r, Color.g, Color.b, Color.a ) ;
// マテリアルのスペキュラの強さ描画
DrawFormatString( 0, 80, GetColor( 255,255,255 ), "Specular Power %f", MV1GetMaterialSpcPower( ModelHandle, i ) ) ;
// 描画ブレンドモードの描画
switch( MV1GetMaterialDrawBlendMode( ModelHandle, i ) )
{
case DX_BLENDMODE_NOBLEND : Name = "DX_BLENDMODE_NOBLEND" ; break ;
case DX_BLENDMODE_ALPHA : Name = "DX_BLENDMODE_ALPHA" ; break ;
case DX_BLENDMODE_ADD : Name = "DX_BLENDMODE_ADD" ; break ;
case DX_BLENDMODE_SUB : Name = "DX_BLENDMODE_SUB" ; break ;
case DX_BLENDMODE_INVSRC : Name = "DX_BLENDMODE_INVSRC" ; break ;
case DX_BLENDMODE_MULA : Name = "DX_BLENDMODE_MULA" ; break ;
}
DrawFormatString( 0, 96, GetColor( 255,255,255 ), "Draw Blend Mode %s", Name ) ;
// 描画ブレンドパラメータの描画
DrawFormatString( 0, 112, GetColor( 255,255,255 ), "Draw Blend Param %d", MV1GetMaterialDrawBlendParam( ModelHandle, i ) ) ;
// キー入力待ち
WaitKey() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル MV1GetMaterialNum関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x に含まれる0番目のマテリアルのディフューズカラーを真っ赤にしてモデルを描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルに含まれる0番目のマテリアルのディフューズカラーを真っ赤にします
MV1SetMaterialDifColor( ModelHandle, 0, GetColorF( 1.0f, 0.0f, 0.0f, 1.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル MV1GetMaterialNum関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x に含まれる0番目のマテリアルのスペキュラカラーを緑色にしてモデルを描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルに含まれる0番目のマテリアルのスペキュラカラーを緑にします
MV1SetMaterialSpcColor( ModelHandle, 0, GetColorF( 0.0f, 1.0f, 0.0f, 1.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル MV1GetMaterialNum関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x に含まれる0番目のマテリアルのエミッシブカラーを暗い黄色にしてモデルを描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルに含まれる0番目のマテリアルのエミッシブカラーを暗い黄色にします
MV1SetMaterialEmiColor( ModelHandle, 0, GetColorF( 0.2f, 0.2f, 0.0f, 1.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル MV1GetMaterialNum関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x に含まれる0番目のマテリアルのアンビエントカラーを紫色にしてモデルを描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルに含まれる0番目のマテリアルのアンビエントカラーを紫色にします
MV1SetMaterialAmbColor( ModelHandle, 0, GetColorF( 1.0f, 0.0f, 1.0f, 1.0f ) ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル MV1GetMaterialNum関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x に含まれる0番目のマテリアルのスペキュラの強さを変更します。 ( 変化がわかりにくいので、スペキュラカラーも明るくしています )
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルに含まれる0番目のマテリアルのスペキュラカラーを明るくします
MV1SetMaterialSpcColor( ModelHandle, 0, GetColorF( 0.457f, 0.687f, 0.948f, 0.f ) ) ;
// 3Dモデルに含まれる0番目のマテリアルのスペキュラの強さを 0.1f にします
MV1SetMaterialSpcPower( ModelHandle, 0, 19.0f ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル MV1GetMaterialNum関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x に含まれる4番目のマテリアルにディフューズテクスチャとして使用されている テクスチャの番号を取得して、そのテクスチャのグラフィックハンドルを取得して画面に描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
int TexIndex ;
int GrHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// マテリアル番号4で使用されているテクスチャの番号を取得する
TexIndex = MV1GetMaterialDifMapTexture( ModelHandle, 4 ) ;
// モデルで使用されているテクスチャのグラフィックハンドルを取得する
GrHandle = MV1GetTextureGraphHandle( ModelHandle, TexIndex ) ;
// 取得したグラフィックハンドルを画面に描画する
DrawGraph( 0, 0, GrHandle, TRUE ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル マテリアルで使用されているテクスチャを画面に描画するサンプルが MV1GetMaterialDifMapTexture 関数 にあります。 | ||||||||||||||
| ||||||||||||||
|
サンプル マテリアルで使用されているテクスチャを画面に描画するサンプルが MV1GetMaterialDifMapTexture 関数 にあります。 | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x に含まれる1番目のマテリアルの描画ブレンドモードを加算ブレンド( DX_BLENDMODE_ADD )に変更します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// ブレンドモードが変更されたことがわかるように画面全体を青色で塗りつぶす
DrawBox( 0, 0, 640, 480, GetColor( 0,0,255 ), TRUE ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルに含まれる1番目のマテリアルの描画ブレンドモードを DX_BLENDMODE_ADD に変更する
MV1SetMaterialDrawBlendMode( ModelHandle, 1, DX_BLENDMODE_ADD ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル MV1GetMaterialNum関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x に含まれる1番目のマテリアルの描画ブレンドモードを加算ブレンド( DX_BLENDMODE_ADD )に変更して、 ブレンドパラメータを128にして描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// ブレンドモードが変更されたことがわかるように画面全体を青色で塗りつぶす
DrawBox( 0, 0, 640, 480, GetColor( 0,0,255 ), TRUE ) ;
// 画面に映る位置に3Dモデルを移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ;
// 3Dモデルに含まれる0番目のマテリアルの描画ブレンドモードを DX_BLENDMODE_ADD に変更する
MV1SetMaterialDrawBlendMode( ModelHandle, 1, DX_BLENDMODE_ADD ) ;
// マテリアルのブレンドパラメータを 128 に変更する
MV1SetMaterialDrawBlendParam( ModelHandle, 1, 128 ) ;
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル MV1GetMaterialNum関数 のサンプルを参照してください。 | ||||||||||||||
| テクスチャ関係 | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル SimpleModel.mqo で使用されているテクスチャの情報を一つづつ描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
int i, TextureNum ;
int Width, Height, GrHandle ;
const char *String ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ;
// モデルに含まれるテクスチャの総数を取得する
TextureNum = MV1GetTextureNum( ModelHandle ) ;
// テクスチャの数だけ繰り返し
for( i = 0 ; i < TextureNum ; i ++ )
{
// 画面をクリアする
ClearDrawScreen() ;
// テクスチャのグラフィックハンドルを取得する
GrHandle = MV1GetTextureGraphHandle( ModelHandle, i ) ;
// テクスチャの名前を描画する
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Name %s", MV1GetTextureName( ModelHandle, i ) ) ;
// テクスチャの大きさを描画する
GetGraphSize( GrHandle, &Width, &Height ) ;
DrawFormatString( 0, 16, GetColor( 255,255,255 ), "Size %dx%d", Width, Height ) ;
// テクスチャのU値のアドレスモードを描画する
switch( MV1GetTextureAddressModeU( ModelHandle, i ) )
{
case DX_TEXADDRESS_WRAP : String = "DX_TEXADDRESS_WRAP" ; break ;
case DX_TEXADDRESS_MIRROR : String = "DX_TEXADDRESS_MIRROR" ; break ;
case DX_TEXADDRESS_CLAMP : String = "DX_TEXADDRESS_CLAMP" ; break ;
}
DrawFormatString( 0, 32, GetColor( 255,255,255 ), "Address Mode U %s", String ) ;
// テクスチャのV値のアドレスモードを描画する
switch( MV1GetTextureAddressModeV( ModelHandle, i ) )
{
case DX_TEXADDRESS_WRAP : String = "DX_TEXADDRESS_WRAP" ; break ;
case DX_TEXADDRESS_MIRROR : String = "DX_TEXADDRESS_MIRROR" ; break ;
case DX_TEXADDRESS_CLAMP : String = "DX_TEXADDRESS_CLAMP" ; break ;
}
DrawFormatString( 0, 48, GetColor( 255,255,255 ), "Address Mode V %s", String ) ;
// テクスチャのフィルタリングモードを描画する
switch( MV1GetTextureSampleFilterMode( ModelHandle, i ) )
{
case DX_DRAWMODE_NEAREST : String = "DX_DRAWMODE_NEAREST" ; break ;
case DX_DRAWMODE_BILINEAR : String = "DX_DRAWMODE_BILINEAR" ; break ;
case DX_DRAWMODE_ANISOTROPIC : String = "DX_DRAWMODE_ANISOTROPIC" ; break ;
}
DrawFormatString( 0, 64, GetColor( 255,255,255 ), "Sample Filter Mode %s", String ) ;
// テクスチャを描画する
DrawGraph( 0, 80, GrHandle, TRUE ) ;
// キー入力待ち
WaitKey() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル MV1GetTextureNum関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル DxChara.x で使用されている目のテクスチャを緑色の目の画像に変更します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
int GrHandle ;
int TexIndex ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 緑色の目の画像の読みこみ
GrHandle = LoadGraph( "DxCharaEye2.tga" ) ;
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// モデルを画面に映る位置に移動
MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 400.0f ) ) ;
// 目の部分のマテリアルで使用されているテクスチャの番号を取得
TexIndex = MV1GetMaterialDifMapTexture( ModelHandle, 4 ) ;
// テクスチャで使用するグラフィックハンドルを変更する
MV1SetTextureGraphHandle( ModelHandle, TexIndex, GrHandle, FALSE ) ;
// モデルを描画する
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル MV1GetTextureNum関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル AddressTest.mqo で使用されているテクスチャのアドレスモードを、横方向は DX_TEXADDRESS_MIRROR に 縦方向は DX_TEXADDRESS_CLAMP にして描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "AddressTest.mqo" ) ;
// モデルを画面に映る位置に移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 400.0f ) ) ;
// テクスチャ0番のアドレスモードを横方向は DX_TEXADDRESS_MIRROR に、
// 縦方向は DX_TEXADDRESS_CLAMP に変更する
MV1SetTextureAddressMode( ModelHandle, 0, DX_TEXADDRESS_MIRROR, DX_TEXADDRESS_CLAMP ) ;
// モデルを描画する
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
| ||||||||||||||
|
サンプル MV1GetTextureNum関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル MV1GetTextureNum関数 のサンプルを参照してください。 | ||||||||||||||
| ||||||||||||||
|
サンプル モデルファイル FilterTest.mqo で使用されているテクスチャのフィルタリングモードを DX_DRAWMODE_NEAREST にして描画します。 ドットとドットの間がくっきり分かれた見た目になります。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "FilterTest.mqo" ) ;
// モデルを画面に映る位置に移動
MV1SetPosition( ModelHandle, VGet( 320.0f, 240.0f, 400.0f ) ) ;
// テクスチャ0番のフィルタリングモードを DX_DRAWMODE_NEAREST に変更
MV1SetTextureSampleFilterMode( ModelHandle, 0, DX_DRAWMODE_NEAREST ) ;
// モデルを描画する
MV1DrawModel( ModelHandle ) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
| ||||||||||||||
|