Мне интересно, как лучше всего смоделировать восход / закат по осям y и z. В данный момент он делает то, что я хочу, но движется слишком быстро (скажем, каждые 3 секунды он уже прошел весь солнечный путь и уже движется обратно назад к началу координат).
Я знаю, что это связано с переменной секунд в сочетании с sin и cos, так как эта функция вызывается и перемещает положение источника света в каждом кадре. В основном я хочу, чтобы это было связано с таймером моей игры 50:
В настоящее время у меня есть:
lightPosition = Point_E3d(0,
std::abs(100 *std::cos(seconds)),
-100 * std::sin(seconds));
Хотите знать, какой правильный формат кода для достижения этого эффекта.
Это просто тригонометрия. Период (время до повторения функции) синуса (x * n) и косинуса (x * n) составляет 2 * pi / n. В этом случае n = 1, поэтому период равен 6,28, то есть один полный день (и ночь) будет длиться 6,28 секунды. Если вы хотите увеличить период, умножьте seconds
аргумент числом меньше единицы. Немного алгебры показывает, что:
period of sin(x * n) = 2*pi / n
period of sin(.1256 * x) = 2*pi / .1256 = 6.28 / 0.1256 = 50
Поэтому берите синус и косинус секунд * 0.1256, а не секунд.
lightPosition = Point_E3d(0,
std::abs(100 *std::cos(seconds * 0.1256 )),
-100 * std::sin(seconds * 0.1256));
Обратите внимание, что это также в том числе в ночное время. Если вы хотите, чтобы период времени продолжительностью 12 часов длился 50 секунд, умножьте на половину 0,1256, или 0,0628.
Других решений пока нет …