Математическая шпаргалка
Тригонометрия
Пи
const float pi = 3.14159265f; // на самом деле бесконечное число цифр
Косинус и синус
(Источник: http://commons.wikimedia.org/wiki/User:Geek3 , под лицензией GNU Free Documentation License )
Единичная окружность
( Изменено на основе http://en.wikipedia.org/wiki/User:Gustavb под лицензией Crative Commons 3.0 ) t - угол в радианах.
0 радиан = 0 градусов
180 градусов = Pi радиан
360 градусов ( полный круг ) = 2*Pi радиан
90 градусов = Pi/2 радиан
Вектора
ВСЕГДА необходимо знать в каких координатах ваш вектор. Подробнее смотрите в разделе 3.
Однородные координаты
Трёхмерный вектор представляется как (x,y,z), но однородный трёхмерный вектор - (x,y,z,w).
- w=0 : это направление
- w=1 : это позиция
- иначе : все еще может быть допустимым, но вам лучше знать, что вы делаете.
Вы можете только перемножать матрицу 4x4 с однородным вектором.
Длина
Как и декартово растояние: sqrt( x² + y² + z² ). w не учитывается.
Векторное произведение
( Изменено на основе http://en.wikipedia.org/wiki/User:Acdx , прежнее изображение под лицензией Creative Commons 3.0 )
X обозначет вектороное произведение. длина( a x b ) == длина(a) * длина(b) * sin(θ), поэтому вы можете нормализовать (normalize()) результат.
Скалярное произведение
##
( Источник: http://en.wikipedia.org/wiki/File:Dot_Product.svg ) A.B = длина(A)cos(Theta) , но, скорее всего, вычисляется как A.xB.x +A.yB.y +A.zB.z
Сложение и вычитание
покомпонентно :
res.x = A.x + B.x
res.y = A.y + B.y
...
Multiplication
покомпонентно :
res.x = A.x * B.x
res.y = A.y * B.y
...
Нормализация
Разделите вектор на его длину:
normalizedVector = vec * ( 1.0f / vec.length() )
Матрицы
Умножение Матрица-Матрица
пример для матрицы переноса:
Умножение Матрица-Вектор
Обычные преобразования
… но в ваших шейдерах вы также можете представлять свои векторы в касательном пространстве. И в пространстве изображений, когда вы делаете пост-эффекты.
res.x = A.x + B.x