Интересные проекты: математическая C-библиотека для разработки видеоигр
Проект MATHC — коллекция объектов для разработки 2D- и 3D-игр.
7К открытий7К показов
Сегодня мы рассмотрим проект MATHC. По своей сути, это простая математическая библиотека, которая может быть использована для разработки 2D- и 3D-игр. Она содержит реализации следующих математических объектов на чистом С:
- 2D- и 3D-векторы;
- кватернионы;
- матрицы;
- функции плавности.
Реализация объектов поддерживает как стандарт С99, так и более новые.
Тип float
Каждая структура и функция библиотеки использует тип float
, поскольку в большинстве своём в разработке 2D- и 3D-игр при помощи OpenGL применяется именно этот тип данных.
Передача по значению или по указателю
Для функций, принимающих в качестве параметров структуры, предусмотрено две версии реализации. Первая — когда структура передаётся по значению, вторая — по указателю. Второй вид функций имеет префикс p
перед именем типа (pvector2
, pvector3
, pquaternion
и pmatrix
), а результат записывается в передаваемый аргумент *result
.
Векторы
Все векторы (2D, 3D и кватернионы) имеют вид структур типа struct vec
. Отметим, что компонента z
может быть использована и для 2D-векторов, поскольку она применяется в OpenGL для проверки глубины. Компонента w
используется только для описания кватерниона.
Матрицы
Все матрицы в библиотеке имеют размер 4×4. В MATHC также реализованы функции для настройки матриц модели, мира и проекции. Обычно матрица мира используется для изменения множества вершин на стороне клиента или на графическом процессоре. Если вы хотите изменить вершины на стороне клиента, то используйте функции matrix_multiply_f4()
или pmatrix_multiply_f4()
для изменения массива с 4 float-элементами:
Если вы хотите изменить вершины на стороне GPU, то используйте функции matrix_to_array()
или pmatrix_to_array()
для перевода матрицы в массив с 16 float-элементами:
Функции плавности
Функции плавности полезны для анимации. Библиотечная реализация функций основана на их описании. Функции принимают значения от 0.0f
до 1.0f
и возвращают значения внутри этого же диапазона. Однако в некоторых из функций возвращаемое значение экстраполирует этот диапазон.
Лицензия MATHC
Исходный код проекта подчиняется лицензии ZLIB.
7К открытий7К показов