MATHC は、2D および 3D プログラミング用のシンプルな数学ライブラリです。
ライブラリのテスト、スコープ内の数学関数の送信、エラーの報告、フィードバックの提供など、MATHC の開発を支援できます。
最近はライブラリにほとんど取り組んでいませんが、提案や貢献はいつでも歓迎しています。
バージョン 2 以降、MATHC の開発では、安定リリースごとにタグYYYY.MM.DD.MICRO
を使用したカレンダー バージョン管理が使用されます。リリースで下位互換性が失われる場合は、リリース ノートに記載されています。
MAHC は、次のプリプロセッサを使用して構成できます。
MATHC_NO_INT
: mint_t
を使用した実装を無効にします。MATHC_USE_INT8
: mint_t
int8_t
として定義します。MATHC_USE_INT16
: mint_t
int16_t
として定義します。MATHC_USE_INT32
: mint_t
int32_t
として定義します。これがデフォルトです。MATHC_USE_INT64
: mint_t
int64_t
として定義します。MATHC_INT_TYPE
: mint_t
のカスタム タイプを設定します。MATHC_NO_FLOATING_POINT
: mfloat_t
を使用した実装を無効にします。MATHC_USE_SINGLE_FLOATING_POINT
: mfloat_t
float
として定義します。これがデフォルトです。MATHC_USE_DOUBLE_FLOATING_POINT
: mfloat_t
double
として定義します。MATHC_FLOATING_POINT_TYPE
: mfloat_t
のカスタム タイプを設定します。MATHC_USE_UNIONS
: 構造体内の匿名共用体を定義します。MATHC_NO_POINTER_STRUCT_FUNCTIONS
: 構造体へのポインターを受け取る関数を定義しません。MATHC_NO_STRUCT_FUNCTIONS
: 構造体を値として受け取る関数を定義しないでください。MATHC_NO_EASING_FUNCTIONS
: イージング関数を定義しません。これらのプリプロセッサを定義するには、コンパイラのオプション-D
を使用するか、コンパイラのオプション-include
を使用して、内部に構成プリプロセッサを含む構成ヘッダーを含めます。
mint_t
int16_t
、 mfloat_t
GLfloat
にし、倍の浮動小数点精度の標準数学関数を使用する構成ヘッダーの例:
#include
#define MATHC_USE_INT16
#define MATHC_FLOATING_POINT_TYPE GLfloat
#define MATHC_USE_DOUBLE_FLOATING_POINT
デフォルトでは、ベクトル、四元数、行列はmint_t
の配列、 mfloat_t
の配列、または構造体として宣言できます。
デフォルトでは、MATHC には、 mint_t
の配列、 mfloat_t
の配列、値としての構造体、または構造体へのポインターを引数として取る関数があります。構造体を値として受け取る関数には、接頭辞s
が付きます。構造体ポインターを受け取る関数には、接頭辞ps
が付きます。
イージング関数は、eases.net で提供される関数の実装であり、特にアニメーションに役立ちます。
イージング関数は0.0-1.0
範囲内の値を受け取り、通常は同じ範囲内の値を返します。
3D プログラミングに役立つ「look at」ビュー マトリックスの作成:
mfloat_t position [ VEC3_SIZE ];
mfloat_t target [ VEC3_SIZE ];
mfloat_t up [ VEC3_SIZE ];
mfloat_t view [ MAT4_SIZE ];
mat4_look_at ( view ,
vec3 ( position , 0.0 , 0.0 , 10.0 ),
vec3 ( target , 0.0 , 0.0 , 0.0 ),
vec3 ( up , 0.0 , 1.0 , 0.0 ));
透視投影行列の作成:
mfloat_t perspective [ MAT4_SIZE ];
mat4_perspective ( perspective , to_radians ( 60.0 ), 1.0 , 0.1 , 100.0 );
モデル マトリックスの作成:
mfloat_t position [ VEC3_SIZE ];
mfloat_t scaling [ VEC3_SIZE ];
struct {
mfloat_t position [ MAT4_SIZE ];
mfloat_t rotation [ MAT4_SIZE ];
mfloat_t scaling [ MAT4_SIZE ];
mfloat_t model [ MAT4_SIZE ];
} matrices ;
/* Position */
mat4_identity ( matrices . position );
mat4_translation ( matrices . position ,
vec3 ( position , 0.0 , 0.0 , 0.0 ));
/* Rotation */
mat4_identity ( matrices . rotation );
mat4_rotation_x ( matrices . rotation , to_radians ( 30.0 ));
/* Scaling */
mat4_identity ( matrices . scaling );
mat4_translation ( matrices . scaling ,
vec3 ( scaling , 1.0 , 1.0 , 1.0 ));
/* Model matrix */
mat4_multiply ( matrices . model , matrices . scaling , matrices . rotation );
mat4_multiply ( matrices . model , matrices . position , matrices . model );
著作権 © 2018 フェリペ・フェレイラ・ダ・シルバ
このソフトウェアは「現状のまま」提供され、明示的または黙示的な保証はありません。いかなる場合においても、このソフトウェアの使用によって生じた損害について、作者は一切の責任を負いません。
以下の制限に従って、商用アプリケーションを含むあらゆる目的でこのソフトウェアを使用し、自由に変更および再配布することが誰にでも許可されます。