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 费利佩·费雷拉·达席尔瓦
本软件按“原样”提供,没有任何明示或暗示的保证。在任何情况下,作者均不对因使用本软件而造成的任何损害承担责任。
任何人均有权出于任何目的(包括商业应用)使用本软件,并自由地修改和重新分发本软件,但须遵守以下限制: