Lumino (C API)
LNMath.h
1 #pragma once
2 #include "LNCommon.h"
3 #include "LNTypedef.h"
4 
5 #ifdef __cplusplus
6 extern "C" {
7 #endif // __cplusplus
8 
14 LN_MODULE(Math)
15 
16 //==============================================================================
20 LN_STRUCT_CLASS(LNVector2)
21 
28  LN_INSTANCE_API
29  LN_ATTR_CONSTRUCTOR
30  LNResult LNVector2_Set(LNVector2* vec, float x, float y);
31 
37  LN_INSTANCE_API
38  LN_ATTR_PROPERTY
39  LNResult LNVector2_GetLength(const LNVector2* vec, float* outLength);
40 
46  LN_INSTANCE_API
47  LN_ATTR_PROPERTY
48  LNResult LNVector2_GetSquareLength(const LNVector2* vec, float* outLength);
49 
55  LN_STATIC_API
56  LNResult LNVector2_Normalize(const LNVector2* vec, LNVector2* outVec);
57 
62  LN_INSTANCE_API
63  LN_ATTR_OVERLOAD(LNVector2_Normalize)
65 
66  LN_INTERNAL_API LNResult LNVector2_GetLengthD(const LNVector2* vec, double* length);
67  LN_INTERNAL_API LNResult LNVector2_GetSquareLengthD(const LNVector2* vec, double* length);
68 
69 LN_CLASS_END
70 
71 //==============================================================================
75 LN_STRUCT_CLASS(LNVector3)
76 
84  LN_INSTANCE_API
85  LNResult LNVector3_Set(LNVector3* vec, float x, float y, float z);
86 
93  LN_INSTANCE_API
94  LN_ATTR_OVERLOAD(LNVector3_Set)
95  LNResult LNVector3_SetVZ(LNVector3* vec, const LNVector2* vec2, float z);
96 
102  LN_INSTANCE_API
103  LN_ATTR_PROPERTY
104  LNResult LNVector3_GetLength(const LNVector3* vec, float* outLength);
105 
111  LN_INSTANCE_API
112  LN_ATTR_PROPERTY
113  LNResult LNVector3_GetSquareLength(const LNVector3* vec, float* outLength);
114 
120  LN_STATIC_API
121  LNResult LNVector3_Normalize(const LNVector3* vec, LNVector3* outVec);
122 
127  LN_INSTANCE_API
128  LN_ATTR_OVERLOAD(LNVector3_Normalize)
130 
137  LN_STATIC_API
138  LNResult LNVector3_Dot(const LNVector3* vec1, const LNVector3* vec2, float* dot);
139 
146  LN_STATIC_API
147  LNResult LNVector3_Cross(const LNVector3* vec1, const LNVector3* vec2, LNVector3* outVec);
148 
155  LN_STATIC_API
156  LNResult LNVector3_Reflect(const LNVector3* vec, const LNVector3* normal, LNVector3* outVec);
157 
164  LN_STATIC_API
165  LNResult LNVector3_Slide(const LNVector3* vec, const LNVector3* normal, LNVector3* outVec);
166 
174  LN_STATIC_API
175  LNResult LNVector3_Lerp(const LNVector3* vec1, const LNVector3* vec2, float t, LNVector3* outVec);
176 
186  LN_STATIC_API
187  LNResult LNVector3_CatmullRom(const LNVector3* vec1, const LNVector3* vec2, const LNVector3* vec3, const LNVector3* vec4, float t, LNVector3* outVec);
188 
199  LN_STATIC_API
200  LNResult LNVector3_Transform(const LNVector3* vec, const LNMatrix* mat, LNVector4* outVec);
201 
210  LN_STATIC_API
211  LNResult LNVector3_TransformCoord(const LNVector3* vec, const LNMatrix* mat, LNVector3* outVec);
212 
213  LN_INTERNAL_API LNResult LNVector3_GetLengthD(const LNVector3* vec, double* length);
214  LN_INTERNAL_API LNResult LNVector3_GetSquareLengthD(const LNVector3* vec, double* length);
215  LN_INTERNAL_API LNResult LNVector3_DotD(const LNVector3* vec1, const LNVector3* vec2, double* dot);
216  LN_INTERNAL_API LNResult LNVector3_LerpD(const LNVector3* vec1, const LNVector3* vec2, double t, LNVector3* outVec);
217  LN_INTERNAL_API LNResult LNVector3_CatmullRomD(const LNVector3* vec1, const LNVector3* vec2, const LNVector3* vec3, const LNVector3* vec4, double t, LNVector3* outVec);
218 
219 LN_CLASS_END
220 
221 //==============================================================================
225 LN_STRUCT_CLASS(LNVector4)
226 
235  LN_INSTANCE_API
236  LN_ATTR_CONSTRUCTOR
237  LNResult LNVector4_Set(LNVector4* vec, float x, float y, float z, float w);
238 
239 LN_CLASS_END
240 
241 //==============================================================================
245 LN_STRUCT_CLASS(LNMatrix)
246 
251  LN_INSTANCE_API
252  LN_ATTR_PROPERTY
254 
263  LN_INSTANCE_API
264  LNResult LNMatrix_Translate(LNMatrix* mat, float x, float y, float z);
265 
272  LN_INSTANCE_API
274 
281  LN_INSTANCE_API
282  LNResult LNMatrix_RotateX(LNMatrix* mat, float radian);
283 
290  LN_INSTANCE_API
291  LNResult LNMatrix_RotateY(LNMatrix* mat, float radian);
292 
299  LN_INSTANCE_API
300  LNResult LNMatrix_RotateZ(LNMatrix* mat, float radian);
301 
311  LN_INSTANCE_API
312  LNResult LNMatrix_Rotate(LNMatrix* mat, float xRad, float yRad, float zRad, LNRotationOrder rotOrder LN_DEFAULT_ARG(LN_ROTATIONORDER_XYZ));
313 
321  LN_INSTANCE_API
322  LNResult LNMatrix_RotateVec3(LNMatrix* mat, const LNVector3* vec, LNRotationOrder rotOrder LN_DEFAULT_ARG(LN_ROTATIONORDER_XYZ));
323 
332  LN_INSTANCE_API
333  LNResult LNMatrix_RotateAxis(LNMatrix* mat, const LNVector3* axis, float radian);
334 
341  LN_INSTANCE_API
343 
350  LN_INSTANCE_API
351  LNResult LNMatrix_Scale(LNMatrix* mat, float xyz);
352 
361  LN_INSTANCE_API
362  LNResult LNMatrix_ScaleXYZ(LNMatrix* mat, float x, float y, float z);
363 
370  LN_INSTANCE_API
371  LNResult LNMatrix_ScaleVec3(LNMatrix* mat, const LNVector3* scale);
372 
379  LN_STATIC_API
380  LNResult LNMatrix_Multiply(const LNMatrix* mat1, const LNMatrix* mat2, LNMatrix* matOut);
381 
387  LN_STATIC_API
388  LNResult LNMatrix_Inverse(const LNMatrix* mat, LNMatrix* matOut);
389 
395  LN_STATIC_API
396  LNResult LNMatrix_Transpose(const LNMatrix* mat, LNMatrix* matOut);
397 
405  LN_STATIC_API
406  LNResult LNMatrix_ViewTransformLH(const LNVector3* pos, const LNVector3* lookAt, const LNVector3* upDir, LNMatrix* matOut);
407 
415  LN_STATIC_API
416  LNResult LNMatrix_ViewTransformRH(const LNVector3* pos, const LNVector3* lookAt, const LNVector3* upDir, LNMatrix* matOut);
417 
426  LN_STATIC_API
427  LNResult LNMatrix_PerspectiveFovLH(float fovY, float aspect, float nearZ, float farZ, LNMatrix* matOut);
428 
437  LN_STATIC_API
438  LNResult LNMatrix_PerspectiveFovRH(float fovY, float aspect, float nearZ, float farZ, LNMatrix* matOut);
439 
448  LN_STATIC_API
449  LNResult LNMatrix_OrthoLH(float width, float height, float nearZ, float farZ, LNMatrix* matOut);
450 
459  LN_STATIC_API
460  LNResult LNMatrix_OrthoRH(float width, float height, float nearZ, float farZ, LNMatrix* matOut);
461 
467  LN_INSTANCE_API
468  LN_ATTR_PROPERTY
469  LNResult LNMatrix_GetRight(const LNMatrix* mat, LNVector3* outVec);
470 
476  LN_INSTANCE_API
477  LN_ATTR_PROPERTY
478  LNResult LNMatrix_GetUp(const LNMatrix* mat, LNVector3* outVec);
479 
485  LN_INSTANCE_API
486  LN_ATTR_PROPERTY
487  LNResult LNMatrix_GetFront(const LNMatrix* mat, LNVector3* outVec);
488 
494  LN_INSTANCE_API
495  LN_ATTR_PROPERTY
496  LNResult LNMatrix_GetPosition(const LNMatrix* mat, LNVector3* outVec);
497 
503  LN_INSTANCE_API
504  LNResult LNMatrix_GetEulerAngles(const LNMatrix* mat, LNVector3* outVec);
505 
513  LN_INSTANCE_API
514  LNResult LNMatrix_Decompose(const LNMatrix* mat, LNVector3* scale, LNQuaternion* rot, LNVector3* trans);
515 
516  LN_INTERNAL_API LNResult LNMatrix_TranslateD(LNMatrix* mat, double x, double y, double z);
517  LN_INTERNAL_API LNResult LNMatrix_RotateXD(LNMatrix* mat, double radian);
518  LN_INTERNAL_API LNResult LNMatrix_RotateYD(LNMatrix* mat, double radian);
519  LN_INTERNAL_API LNResult LNMatrix_RotateZD(LNMatrix* mat, double radian);
520  LN_INTERNAL_API LNResult LNMatrix_RotateD(LNMatrix* mat, double xRad, double yRad, double zRad, LNRotationOrder rotOrder);
521  LN_INTERNAL_API LNResult LNMatrix_RotateAxisD(LNMatrix* mat, const LNVector3* axis, double radian);
522  LN_INTERNAL_API LNResult LNMatrix_ScaleD(LNMatrix* mat, double xyz);
523  LN_INTERNAL_API LNResult LNMatrix_ScaleXYZD(LNMatrix* mat, double x, double y, double z);
524  LN_INTERNAL_API LNResult LNMatrix_PerspectiveFovLHD(LNMatrix* mat, double fovY, double aspect, double nearZ, double farZ);
525  LN_INTERNAL_API LNResult LNMatrix_PerspectiveFovRHD(LNMatrix* mat, double fovY, double aspect, double nearZ, double farZ);
526  LN_INTERNAL_API LNResult LNMatrix_OrthoLHD(LNMatrix* mat, double width, double height, double nearZ, double farZ);
527  LN_INTERNAL_API LNResult LNMatrix_OrthoRHD(LNMatrix* mat, double width, double height, double nearZ, double farZ);
528 
529 LN_CLASS_END
530 
531 //==============================================================================
535 LN_STRUCT_CLASS(LNQuaternion)
536 
545  LN_INSTANCE_API
546  LN_ATTR_CONSTRUCTOR
547  LNResult LNQuaternion_Set(LNQuaternion* qua, float x, float y, float z, float w);
548 
553  LN_STATIC_API
554  LN_ATTR_PROPERTY
556 
564  LN_STATIC_API
565  LNResult LNQuaternion_RotationAxis(const LNVector3* axis, float r, LNQuaternion* outQua);
566 
572  LN_STATIC_API
574 
582  LN_STATIC_API
583  LNResult LNQuaternion_RotationYawPitchRoll(float yaw, float pitch, float roll, LNQuaternion* outQua);
584 
590  LN_STATIC_API
592 
598  LN_STATIC_API
600 
607  LN_STATIC_API
608  LNResult LNQuaternion_Multiply(const LNQuaternion* qua1, const LNQuaternion* qua2, LNQuaternion* outQua);
609 
617  LN_STATIC_API
618  LNResult LNQuaternion_Slerp(const LNQuaternion* qua1, const LNQuaternion* qua2, float t, LNQuaternion* outQua);
619 
620  LN_INTERNAL_API LNResult LNQuaternion_RotationAxisD(const LNVector3* axis, float r, LNQuaternion* outQua);
621  LN_INTERNAL_API LNResult LNQuaternion_RotationYawPitchRollD(float yaw, float pitch, float roll, LNQuaternion* outQua);
622  LN_INTERNAL_API LNResult LNQuaternion_SlerpD(const LNQuaternion* qua1, const LNQuaternion* qua2, float t, LNQuaternion* outQua);
623 
624 LN_CLASS_END
625 
626 LN_MODULE_END
628 #ifdef __cplusplus
629 } // extern "C" {
630 #endif // __cplusplus
LNResult LNMatrix_RotateVec3(LNMatrix *mat, const LNVector3 *vec, LNRotationOrder rotOrder)
行列を回転します。 (ラジアン単位)
LNResult LNQuaternion_RotationMatrix(const LNMatrix *mat, LNQuaternion *outQua)
回転行列からクォータニオンを作成します。
LNResult LNMatrix_RotateX(LNMatrix *mat, float radian)
X 軸を回転軸にして行列を回転します。 (ラジアン単位)
LNResult LNVector3_Cross(const LNVector3 *vec1, const LNVector3 *vec2, LNVector3 *outVec)
2 つの 3D ベクトルの外積を計算します。
LNResult LNQuaternion_Multiply(const LNQuaternion *qua1, const LNQuaternion *qua2, LNQuaternion *outQua)
2 つのクォータニオンの積を計算します。
LNResult LNQuaternion_Conjugate(const LNQuaternion *qua, LNQuaternion *outQua)
クォータニオンの共役を計算します。
4x4行列
Definition: LNTypedef.h:204
LNResult LNMatrix_GetRight(const LNMatrix *mat, LNVector3 *outVec)
右方向を示す 3D ベクトルを取得します。
LNResult LNQuaternion_RotationAxis(const LNVector3 *axis, float r, LNQuaternion *outQua)
任意の軸を回転軸にして回転するクォータニオンを作成します。
3Dベクトル
Definition: LNTypedef.h:185
LNResult LNVector2_Normalize(const LNVector2 *vec, LNVector2 *outVec)
2D ベクトルを正規化します。
LNResult LNMatrix_Identity(LNMatrix *mat)
4x4 行列のクラスです。
LNResult LNVector2_NormalizeV(LNVector2 *vec)
2D ベクトルを正規化します。
LNResult LNVector3_GetLength(const LNVector3 *vec, float *outLength)
3Dベクトルの長さを取得します。
LNResult LNVector3_Lerp(const LNVector3 *vec1, const LNVector3 *vec2, float t, LNVector3 *outVec)
2 つの 3D ベクトル間を線形補間します。
LNResult LNMatrix_GetUp(const LNMatrix *mat, LNVector3 *outVec)
上方向を示す 3D ベクトルを取得します。
LNResult LNMatrix_Rotate(LNMatrix *mat, float xRad, float yRad, float zRad, LNRotationOrder rotOrder)
行列を回転します。 (ラジアン単位)
クォータニオン
Definition: LNTypedef.h:226
LNResult LNMatrix_ViewTransformLH(const LNVector3 *pos, const LNVector3 *lookAt, const LNVector3 *upDir, LNMatrix *matOut)
左手座標系ビュー行列を作成します。
LNResult LNVector3_Slide(const LNVector3 *vec, const LNVector3 *normal, LNVector3 *outVec)
指定された法線と方向から滑りベクトルを計算します。
LNResult LNVector3_Dot(const LNVector3 *vec1, const LNVector3 *vec2, float *dot)
2 つの 3D ベクトルの内積を計算します。
LNResult LNQuaternion_Set(LNQuaternion *qua, float x, float y, float z, float w)
クォータニオンのクラスです。
LNResult LNVector3_CatmullRom(const LNVector3 *vec1, const LNVector3 *vec2, const LNVector3 *vec3, const LNVector3 *vec4, float t, LNVector3 *outVec)
指定された 3D ベクトルを Catmull-Rom 補間します。
LNResult LNQuaternion_Slerp(const LNQuaternion *qua1, const LNQuaternion *qua2, float t, LNQuaternion *outQua)
2 つのクォータニオンを球面線形補間します。
LNResult LNQuaternion_Identity(LNQuaternion *qua)
単位クォータニオンを作成します。
LNResult LNVector3_Reflect(const LNVector3 *vec, const LNVector3 *normal, LNVector3 *outVec)
指定された法線で反射させたベクトルを計算します。
LNResult LNMatrix_GetPosition(const LNMatrix *mat, LNVector3 *outVec)
位置を示す 3D ベクトルを取得します。
LNResult LNMatrix_GetFront(const LNMatrix *mat, LNVector3 *outVec)
正面方向を示す 3D ベクトルを取得します。
LNResult LNMatrix_Translate(LNMatrix *mat, float x, float y, float z)
行列を平行移動します。
LNResult LNMatrix_PerspectiveFovRH(float fovY, float aspect, float nearZ, float farZ, LNMatrix *matOut)
右手座標系射影行列作成します。
LNResult LNMatrix_TranslateVec3(LNMatrix *mat, const LNVector3 *vec)
行列を平行移動します。
LNResult LNMatrix_RotateZ(LNMatrix *mat, float radian)
Z 軸を回転軸にして行列を回転します。 (ラジアン単位)
LNResult LNQuaternion_Normalize(const LNQuaternion *qua, LNQuaternion *outQua)
クォータニオンを正規化します。
LNResult LNVector3_NormalizeV(LNVector3 *vec)
3D ベクトルを正規化します。
LNResult LNMatrix_OrthoLH(float width, float height, float nearZ, float farZ, LNMatrix *matOut)
左手座標系正射影行列作成します。
LNResult LNMatrix_ScaleXYZ(LNMatrix *mat, float x, float y, float z)
行列をスケーリングします。
LNResult LNMatrix_GetEulerAngles(const LNMatrix *mat, LNVector3 *outVec)
回転行列からオイラー角を計算します。
LNResult LNMatrix_RotateQuaternion(LNMatrix *mat, const LNQuaternion *qua)
クォータニオンを使って行列を回転します。
LNResult LNVector3_SetVZ(LNVector3 *vec, const LNVector2 *vec2, float z)
2D ベクトル と Z値 を指定して、3Dベクトルに値を設定します。
LNResult LNVector3_GetSquareLength(const LNVector3 *vec, float *outLength)
3D ベクトルの長さの2乗を計算する
LNResult LNMatrix_ScaleVec3(LNMatrix *mat, const LNVector3 *scale)
行列をスケーリングします。
LNResult LNMatrix_RotateAxis(LNMatrix *mat, const LNVector3 *axis, float radian)
任意の軸を回転軸にして行列を回転します。 (ラジアン単位)
LNResult LNMatrix_Transpose(const LNMatrix *mat, LNMatrix *matOut)
転置行列を求めます。
LNResult LNVector2_Set(LNVector2 *vec, float x, float y)
2次元のベクトルのクラスです。
LNResult LNVector3_TransformCoord(const LNVector3 *vec, const LNMatrix *mat, LNVector3 *outVec)
指定された行列を使用して座標変換し、結果を w = 1 に射影します。
LNResult LNVector3_Set(LNVector3 *vec, float x, float y, float z)
3 次元ベクトルのクラスです。
2Dベクトル
Definition: LNTypedef.h:177
enum tagLNResult LNResult
結果・エラーコード
LNResult LNMatrix_ViewTransformRH(const LNVector3 *pos, const LNVector3 *lookAt, const LNVector3 *upDir, LNMatrix *matOut)
右手座標系ビュー行列を作成します。
LNResult LNMatrix_OrthoRH(float width, float height, float nearZ, float farZ, LNMatrix *matOut)
右手座標系正射影行列作成します。
enum tagLNRotationOrder LNRotationOrder
回転順序
LNResult LNQuaternion_RotationYawPitchRoll(float yaw, float pitch, float roll, LNQuaternion *outQua)
ヨー、ピッチ、およびロールを指定してクォータニオンを作成します。
LNResult LNMatrix_PerspectiveFovLH(float fovY, float aspect, float nearZ, float farZ, LNMatrix *matOut)
左手座標系射影行列を作成します。
LNResult LNMatrix_Inverse(const LNMatrix *mat, LNMatrix *matOut)
逆行列を求めます。
LNResult LNMatrix_Multiply(const LNMatrix *mat1, const LNMatrix *mat2, LNMatrix *matOut)
行列を乗算します。
LNResult LNVector2_GetSquareLength(const LNVector2 *vec, float *outLength)
2D ベクトルの長さの2乗を取得します。
4Dベクトル
Definition: LNTypedef.h:194
LNResult LNVector2_GetLength(const LNVector2 *vec, float *outLength)
2D ベクトルの長さを取得します。
LNResult LNVector3_Transform(const LNVector3 *vec, const LNMatrix *mat, LNVector4 *outVec)
指定された行列を使用して座標変換します。
LNResult LNMatrix_Scale(LNMatrix *mat, float xyz)
行列をスケーリングします。
LNResult LNMatrix_Decompose(const LNMatrix *mat, LNVector3 *scale, LNQuaternion *rot, LNVector3 *trans)
行列をスケーリング、回転、移動成分に分解します。
LNResult LNMatrix_RotateY(LNMatrix *mat, float radian)
Y 軸を回転軸にして行列を回転します。 (ラジアン単位)
LNResult LNVector4_Set(LNVector4 *vec, float x, float y, float z, float w)
4 次元ベクトルのクラスです。
X → Y → Z.
Definition: LNTypedef.h:238
LNResult LNVector3_Normalize(const LNVector3 *vec, LNVector3 *outVec)
3D ベクトルを正規化します。