/////////////////////////////////////////////////////////// // MobSurgeon // // Редактор mob-ов для Проклятых Земель // // Copyright (C) 2005-2007 Gipat Group // // Распространяется на условиях // // Gipat Group's opened EI-editor-utility license // // версии 1.0 // // // // www.gipatgroup.org // /////////////////////////////////////////////////////////// //К работе над данным файлом приложили руки, ноги.... короче аффтары: // 1) Sagrer (sagrer@yandex.ru) //////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////// // Ну типо тут класс для работы // // с кватернионами в OpenGL // // ver 0.1 // // // // crafted by Sagrer // ///////////////////////////////////////////////// //--------------------------------------------------------------------------- #ifndef glQuaternionsH #define glQuaternionsH #include #include #include #include "math.h" //#include "math.hpp" #include "mathlib.h" //Ну, типо, объявления... //Вектор 2 //class TVec2 //Кватернион class TQuaternion { public: //Переменные... float QuatW; float QuatX; float QuatY; float QuatZ; //Функции... //Конструкторы-деструкторы... virtual ~TQuaternion(); //деструктор TQuaternion(); //Дефолтный конструктор TQuaternion(float &w, float &x, float &y, float &z); //Конструктор на произвольный кватернион TQuaternion(float w, float x, float y, float z); //Конструктор на произвольный кватернион //Всякие "мелкие" операции с самими кватернионами... void ident(); //Поставить кватерниону пустое значение. void scale(float s); //Типо масштабировать. В принципе - умножение на скаляр. float norm(); //Норма. float magnitude(); //Модуль. void StabilizeLength(); //Типо стабилизировать длину кватерниона - это выполняется быстрее нормализации. void normalize(); //Нормализовать. Медленнее стабилизации, но в результате единичный кватернион. //Операции с матрицами... void GetGLMatrix(GLfloat *matrix); //Получить OpenGL-шную матрицу поворота из кватерниона. void Mult(float W, float X, float Y, float Z); //Типо умножить на другой кватернион... void SetAxisAngle(float VecX, float VecY, float VecZ, float angle); //Типо выставить кватерниону угол из Axis-Angle представления. void RotateByAxisAngle(float VecX, float VecY, float VecZ, float angle); //Сделать указанный поворот вокруг указанной оси (в добавку к имеющейся ориентации). }; //--------------------------------------------------------------------------- #endif