MATHC — это простая математическая библиотека для 2D- и 3D-программирования.
Вы можете помочь в разработке MATHC, тестируя библиотеку, отправляя математические функции, сообщая об ошибках и оставляя отзывы.
Сейчас я мало работаю над библиотекой, но всегда открыт для предложений и вкладов.
Начиная с версии 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 );
Copyright © 2018 Фелипе Феррейра да Силва
Это программное обеспечение предоставляется «как есть», без каких-либо явных или подразумеваемых гарантий. Ни при каких обстоятельствах авторы не несут ответственности за любой ущерб, возникший в результате использования данного программного обеспечения.
Каждому предоставляется разрешение использовать это программное обеспечение для любых целей, включая коммерческие приложения, а также изменять его и свободно распространять с учетом следующих ограничений: