mathc
1.0.0
MATHC 是 2D 和 3D 程式設計的簡單數學函式庫。
您可以協助開發 MAHC 測試庫、發送範圍內的數學函數、報告錯誤並提供回饋。
如今我在圖書館的工作很少,但我總是樂於接受建議和貢獻。
從版本 2 開始,MATHC 的開發使用日曆版本控制,每個穩定版本都有一個標籤YYYY.MM.DD.MICRO
。如果某個版本破壞了向後相容性,則會在發行說明中提及。
MATHC 可以使用這些預處理器進行設定:
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
。
緩動函數是 easings.net 中提供的函數的實現,對於動畫特別有用。
緩動函數採用0.0-1.0
範圍內的值,通常會傳回同一範圍內的值。
建立「檢視」視圖矩陣,對於 3D 程式設計很有用:
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 費利佩·費雷拉·達席爾瓦
本軟體以「現況」提供,沒有任何明示或暗示的保證。在任何情況下,作者均不對因使用本軟體而造成的任何損害負責。
任何人均有權為任何目的(包括商業應用)使用本軟體,並自由地修改和重新分發本軟體,但須遵守以下限制: