Перемещение камеры соответственно к ее местоположению

Я думал, что это будет просто и понятно, но это не так. У меня есть камера в приложении openGL, и я преобразовываю отображаемое изображение соответственно в «местоположение» камеры. Расположение изменено вверх а также вниз. Камера может вращаться с помощью Оставил а также Правильно. Когда камера поворачивается, движение вперед и назад должно быть разным. Вот что я сделал:

  //Somewhere in event handler switch
else if (key == GLUT_KEY_UP|| key == GLUT_KEY_DOWN) {
char direction = key==GLUT_KEY_UP?1:-1;   //Whether it is forward or backward movement
std::cout<<"Moving camera in direction "<<(int)direction<<" with angle "<<rotate_y<<'\n';
std::cout<<" - this means X is multiplied by "<<((sin((rotate_y/180)*M_PI)+1)/2)<<'\n';
camera_x += 0.5*((sin((rotate_y/180)*M_PI)+1)/2)*direction;
camera_z += 0.5*((cos((rotate_y/180)*M_PI)+1)/2)*direction;
}

Исходное вращение в градусах, но sin() от math.h принимает радианы. Я добавляю 1 к результату, чтобы получить результаты между 0-2. Тогда я меняю sin или же cos амплитуда от 2 до 1, когда я делю результат на 2.
Это означает, что когда камера смотрит на 0, 90, 180, 270 или 360 градусов, функции должны возвращать значения 0-1. Я прав?
0,5 в начале это просто скорость движения.

0

Решение

Я не думаю, что вы хотите вывод sin/cos находиться в диапазоне 0 — 1.

Если вы пытаетесь сгенерировать вектор движения в определенном направлении, то вам нужно создавать точки в круге вокруг начала координат, что в точности соответствует тому, что у вас есть до применения масштаба и смещения. Вместо этого вы создаете окружность вокруг точки 0.5,0.5, которая, если она используется как векторы направления, вероятно, указывает в неправильном направлении:

Направление Угол Вектор Ваш Вектор Фактическое Направление
N 0 0, 1 0,5, 1 ~ NNE
E 90 1, 0 1, 0,5 ~ ENE
S 180 0, -1 0,5, 0 E
W 270 -1, 0 0, 0,5 N

Обратите внимание, что вы можете генерировать направления только в одном квадранте (потому что ваш результат всегда положительный) и что ни одно из них не совсем то, что вы хотели.

0

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

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

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