OpenGL glTranslate и glRotate - PullRequest
       40

OpenGL glTranslate и glRotate

2 голосов
/ 14 декабря 2010

Мне нужна функция, которая применяет перевод как glTranslate() к точке. Кто-нибудь знает о такой функции, как glTranslate() и glRotate() для изменения и извлечения матрицы для умножения?

Ответы [ 2 ]

3 голосов
/ 14 декабря 2010

Существуют тысячи свободных матриц класса . Поищите в Google, и тогда вы сможете настроить перевод и ротацию без использования функций gl * ...

edit: Если вы действительно хотите создать матрицу без использования более чем удобного класса матрицы, тогда вы можете определить glRotatef (angle, x, y, z) следующим образом:

const float cosA = cosf( angle );
const float sinA = sinf( angle );
float m[16] = { cosA + ((x * x) * (1 - cosA)), ((x * y) * (1 - cosA)) - (z * sinA), ((x * z) * (1 - cosA)) + (y * sinA), 0.0f,
                ((y * x) * (1 - cosA)) + (z * sinA), cosA + ((y * y) * (1 - cosA)), ((y * z) * (1 - cosA)) - (x * sinA), 0.0f,
                ((z * x) * (1 - cosA)) - (y * sinA), ((z * y) * (1 - cosA)) + (x * sinA), cosA + ((z * z) * (1 - cosA)), 0.0f,
                0.0f, 0.0f, 0.0f, 1.0f
               };

Взято из Википедии .

Матрицу перевода действительно легко создать: glTranslatef (x, y, z) определяется следующим образом:

float m[16] = { 1.0f, 0.0f, 0.0f, 0.0f,
                0.0f, 1.0f, 0.0f, 0.0f,
                0.0f, 0.0f, 1.0f, 0.0f,
                   x,    y,    z, 1.0f
               };

Вы можете довольно легко найти матричное умножение и матрично-векторное умножение.

Чтобы сделать вашу жизнь проще, вы можете просто скачать класс матрицы, который сделает все это за вас ...

1 голос
/ 15 декабря 2010

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

Здесь вы можете найти примеры и полные функции, которые выполняют умножение матриц (масштабирование, вращениеили что угодно).Это написано в цели C, но не должно быть трудно переписать его в c ++ ..

...