
Исходники доступны на GitHub:
https://github.com/gecko0307/dmech
Исходники доступны на GitHub:
https://github.com/gecko0307/dmech
Изменения доступны в репозитории Atrium на GitHub.
Сборка для Windows (2,63 МБ)
Кроме того, вслед за dlib, система сборки проектов Cook также переехала на GitHub. Репозиторий проекта доступен по адресу: http://github.com/gecko0307/cook.
Дуальные числа, поддержка которых не так давно появилась в dlib (dlib.math.dual), обладают замечательным свойством: с их помощью можно реализовать автоматическое дифференцирование функций. Если производить вычисления не над вещественными, а над дуальными числами, то в вещественной части результата получается значение самой функции в заданной точке, а в дуальной – значение ее производной.
При этом если оформить функцию в виде шаблона, она без лишних телодвижений расширяется до множества дуальных чисел. Следующий пример показывает дифференцирование простейшей квадратичной функции:
import std.stdio;
import dlib.math.dual;
T parabola(T)(T x)
{
return x*x;
}
void main()
{
float x = 1.0f;
Dualf eval = parabola(Dualf(x, 1.0f));
float value = eval.re;
float deriv = eval.du;
writeln(deriv);
}
При запуске программа выдаст значение производной – 2 для точки 1. Правильность результата нетрудно проверить, зная формулу производной степенной функции: если f(x) = xn, то f ‘(x) = nxn-1. Следовательно, если f(x) = x2, то f ‘(x) = 2x.
Теперь начинается самое интересное. Попробуем вместо скалярных величин взять векторные и дифференцировать функцию кривой Безье (dlib.geometry.bezier) для двумерного случая:
import dlib.math.dual;
import dlib.math.vector;
import dlib.geometry.bezier;
alias DualVector2f = Vector!(Dualf, 2);
void main()
{
float t = 0.5f;
DualVector2f eval = bezierCurveFunc2D(
DualVector2f(Dualf(0.0f), Dualf(0.0f)),
DualVector2f(Dualf(1.0f), Dualf(1.0f)),
DualVector2f(Dualf(2.0f), Dualf(1.0f)),
DualVector2f(Dualf(3.0f), Dualf(0.0f)),
Dualf(t, 1.0f));
}
Результирующий вектор eval будет содержать в вещественной части точку на кривой, а в дуальной – вектор касательной к кривой в этой точке, который нам остается только нормировать:
Vector2f point = Vector2f(eval.x.re, eval.y.re);
Vector2f tangent = Vector2f(eval.x.du, eval.y.du).normalized;
Таким образом, нехитрая алгебра дуальных чисел позволяет эффективно вычислять производные и векторы касательных, что, несомненно, может найти широкое применение в игровых движках – например, когда необходимо получить вектор скорости объекта, движущегося по некой математически описанной траектории.
Страница проекта:
https://github.com/gecko0307/dlib
Скачать dlib 0.1.2:
https://github.com/gecko0307/dlib/releases/tag/v0.1.2
Чтобы иметь возможность немного отвлекаться от D и при этом делать что-то полезное, я решил начать писать двумерный физический движок на JavaScript и HTML5. Ничего серьезного не планируется — исключительно «just for fun».
https://github.com/gecko0307/jspe
Нововведений по сравнению с последней ревизией SVN практически нет (если не считать функцию генерации тангенс-векторов для полигональных мешей) — релиз просто ознаменовал переезд проекта на GitHub (однако старый репозиторий в обозримом будущем продолжит обновляться параллельно с новым).
Одновременно с этим был зарегистрирован пакет dlib в реестре DUB: http://code.dlang.org/packages/dlib.
Страница проекта:
https://github.com/gecko0307/dlib
Скачать dlib 0.1:
https://github.com/gecko0307/dlib/releases/tag/v0.1
В движке Atrium реализован шейдерный эффект рельефа с использованием карт нормалей (Normal mapping). Представленная демонстрация показывает эффект в действии для динамических боксов, которыми игрок может манипулировать. Планируется также поддержка Parallax mapping.
Сборка для Windows (2,68 МБ)
Сборка для Linux (3,1 МБ)
Шейдеры написаны на GLSL и требуют наличия расширения ARB_shading_language_100 (или OpenGL 2.0), но это не является критической необходимостью — игра будет работать и со старыми видеокартами без поддержки шейдеров.
Читайте в этом номере:
Номер доступен для онлайн-чтения и загрузки на сервисе Issuu.com, Документах Google и Dropbox.
Последние новости по проекту вы можете узнать в публичной странице журнала в социальной сети Google+: http://gplus.to/fpsmag. Добавляйте нас в круги, оставляйте свои комментарии и отписывайтесь в нашем сообществе.
Состоялось обновление кодовой базы Atrium. Старый физический движок полностью заменен новым. Также была добавлена заготовка для первого уровня (пока без текстур, только карта Ambient Occlusion).
Кроме того, открылся сайт проекта:
http://gecko0307.github.io/atrium
Изменения доступны в ревизии r23 и выше.