Я пытаюсь повернуть вершины куба с помощью матрицы вращения, но всякий раз, когда я запускаю программу, куб просто исчезает.Поверните вершины куба с помощью матрицы вращения
Я использую матрицу вращения, которая была дана нам в лекции, которая вращает координаты x куба.
double moveCubeX = 0;
float xRotationMatrix[9] = {1, 0, 0,
0, cos(moveCubeX), sin(moveCubeX),
0, -sin(moveCubeX), cos(moveCubeX)
};
Я добавляю к переменной moveCubeX с помощью клавиши «T» на клавиатуре
case 't':
moveCubeX += 5;
break;
И, чтобы сделать матричное умножение Я использую
glMultMatrixf();
Однако когда Я добавляю это в свой код при запуске, куб просто исчез. Здесь я добавляю функцию glMultMatrixf().
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(pan, 0, -g_fViewDistance,
pan, 0, -1,
0, 1, 0);
glRotatef(rotate_x, 1.0f, 0.0f, 0.0f); //Rotate the camera
glRotatef(rotate_y, 0.0f, 1.0f, 0.0f); //Rotate the camera
glMultMatrixf(xRotationMatrix);
Я изо всех сил пытаюсь понять, где именно я поступил неправильно.
я первоначально имел его как 4x4 по читать Википедию на ротационных матриц и изменили его по какой-то причине. Во всяком случае, хорошая новость заключается в том, что куб фактически появляется, когда я запускаю его, однако он не двигается, когда я нажимаю клавишу. Что касается градусов/радианов, то у меня создалось впечатление, что OpenGL использовал градусы в соответствии с этим http://stackoverflow.com/questions/2146884/why-does-opengl-use-degrees-instead-of-radians. – JaAnTr
Я просто понял, что вы имели в виду о градусах и радианах, так как это на C++, а не в OpenGL. Я только что попробовал, чтобы каждый раз добавлял 0.175 радианов. Тем не менее, он все еще не работает, поскольку он фактически ничего не делает с кубом. – JaAnTr
@JaAnTr - вам нужно пересчитывать ячейки матрицы каждый раз, когда вы меняете угол, а не просто определяете его один раз. –