Документация


Классы

В MGML_MATH поддерживаются следующие параметризованные классы:

template <int n,class T> class VECTOR;

template <int n,class T> class MATRIX;

template <class T>          class QUATERNION;

template <int n,class T> class LINE;

template <int n,class T> class RAY;

template <int n,class T> class SEGMENT;

template <int n,class T> class PLANE;

template <int n,class T> class SPHERE;

template <int n,class T> class AABB; // Axis Aligned Binding Box

template <int n,class T> class BOX;

template <int n,class T> class TRIANGLE;

советы

используйте собственные typedef

в заголовочном файле MGML.h определены typedef для используемых типов. Для краткости записи, удобно использовать эти имена или можете определить собственные.

Особенности

порядок умножения векторов и матриц

Вы можете использовать любой порядок умножения векторов и матриц.

v1=m*v или v1 = v*m или v*=m, однако функции-члены класса MATRIX, отвечающие за установку трехмерных преобразований рассчитаны на стандартный порядок умножения, принятый в математике v1=m*v. Если вы используете другой порядок, не забудьте транспонировать ваши матрицы функцией-членом Transpose()

быстрое умножение матрицы на вектор

Используйте mult_matrix4x4f_vector4f_fast, которая написана на встроенном ассемблере во избежание лишних копирований. Хотя operator* вызывает ее для пар (VECTOR<4,float>,MATRIX<4,4,float>) возможно одно лишнее копирование из-за создания вектора-результата на стеке.

operator==(vec)

operator==(vec) не затрагивает правило про DISCARD_FOURTH_DIMENTION. Сравниваться будут все 4 координаты. Это сделано намеренно исходя из смыслового значения оператора сравнения объектов. Если вам нужно проверить совпадают-ли только три координаты вектора, можно сравнить (v1-v2).lenSquare() с эпсилон(некое малое число). Лучше всего не используйте operator==(vec) вообще.  

наследование от SSE_Aligned_Object или Auto_Align

Если у вас есть структура, включающая в себя структуру, наследуемую от SSE_Aligned_Object или Auto_Align, то уже текущую структуру наследовать от SSE_Aligned_Object или Auto_Align нельзя. Придется убрать наследование либо на уровне вашей либо на уровне входящей структуры. В этом случае, операторы new и выравнивание следует добавлять вручную. В противном случае ваша структура может иметь разный размер для компиляторов nvcc и msvc. Это баг nvcc.

 



Классы


<< Вернуться назад

Статьи и обзоры

Поиск пересечений

Обратная трассировка лучей

Быстрая трассировка лучей

Индустриальная основа

Фотореалистичная визуализация

GPU ray tracing

Сферические гармоники

Дружественные проекты:

OpenSource RTRT

Siberian renderer

Наши разработки

Hydra renderer

AdaRT

Публикации

Загрузить

Скриншоты и видео

ССЫЛКИ

© Copyright 2007 Владимир Фролов, Александр Фролов

При поддержке Лаборатории компьтерной графики и мультимедия ф-та ВМК МГУ
Создание сайта: Александр Фролов