Visual Studio 2010 — вращение объекта вокруг его оси (x, y & amp; z) одновременно в C ++ с использованием OpenGL

Я хочу написать функцию для вращения объекта вокруг своей оси одновременно с прохождением каждого угла вокруг его осей x, y и z; Я читаю Вот но я не поняла это полностью. например, для вращения вокруг оси моей фигуры, какие параметры я должен передать в glTranslatef () и как создается матрица, умноженная на [0 1 0] (для вычисления новой оси y)?

Я не понимаю, почему, когда я вызываю glRotatef () в течение нескольких раз, я только что увидел первый вызов в выводе; Я тестировал gltranslatef, glPushMatrix и glPopMatrix до и после моего кода; но никто из них не помогает мне;
для меня очень важно понять решение этой темы.

это мой код, но он не работает!

glPushMatrix();
glRotatef(90,1,0,0); // rotate around X Axis
glPopMatrix();

glPushMatrix();
glRotatef(90,0,1,0); // rotate around Y Axis
glPopMatrix();

glPushMatrix();
glRotatef(90,0,0,1); // rotate around Z Axis
glPopMatrix();

если ты это сделал, скажи мне свой путь.

0

Решение

Приведенный выше код на самом деле не делает ничего, что было бы видно, потому что вы ничего не рендерили после изменения текущей активной матрицы. Эффект следующего сегмента кода заключается в следующем (предположим, что текущий стек MODELVIEW):

glPushMatrix();      // push the stack down one matrix and copy the current matrix
glRotatef(90,1,0,0); // multiply the current matrix M by a rotation matrix R -> M' = M * R

// usually you would render stuff here using the current model-view matrix

glPopMatrix();       // pop the top matrix off the stack

Как вы можете видеть, помещая новую матрицу в стек, вы сохраняете то, что когда-либо находилось на вершине матрицы перед отправкой. Затем вы каким-то образом манипулируете текущей верхней матрицей, визуализируете вещи и извлекаете верхнюю матрицу, чтобы восстановить предыдущее состояние.

Я думаю, теперь вы понимаете, почему ваш код выше не имеет абсолютно ничего общего, кроме как вызывает ненужные накладные расходы.

Использование стека матриц, если вы настаиваете на использовании унаследованного GL, здесь, как правило, правильно, потому что вы не хотите, чтобы ваши модификации влияли на впоследствии визуализированную геометрию. Однако то, что вы действительно хотите, — это простая матричная конкатенация. Предполагая, что вы хотите выполнить и внешнее вращение, то есть вращение вокруг фиксированной основы world-space в z-y-xВам необходимо сделать следующее:

glPushMatrix();
glRotatef(90,1,0,0);
glRotatef(90,0,1,0);
glRotatef(90,0,0,1);

// render camera

glPopMatrix();

Вышесказанное математически эквивалентно вычислению матрицы вращения R объединяя отдельные вращения R_z, R_y а также R_x: R' = R_x * R_y * R_z,

Я предлагаю вам также прочитать этот и чтобы лучше понять, что вы делаете, и потенциальные проблемы с поворотами в целом.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]