Предположим, у меня есть эта модель курицы, которую я хочу постоянно смотреть на зрителя (положение камеры) или, что проще, на начало координат (0,0,0). Как рассчитать углы для каждой оси, чтобы я мог повернуть объект вместе с ними?Направление вращения углов в 3D?
Edit:
Извините, если мой вопрос был слишком общий характер. Я все еще борюсь с этим. Предположим, что положение трехмерной модели (x, y, z) в пространстве модели, и я хочу, чтобы модель «смотрела» на начало координат. Мои первые мысли заключались в том, чтобы начать вращаться вокруг оси x (повернуть вертикально): Рассмотрим желтый круг как плоскость y.
Так что я попытался следующий код, который не вращает модель на всех.
glm::vec3 camPos = camera.GetPosition();
float value = camPos.y/glm::sqrt(glm::pow(camPos.x,2.0f) + glm::pow(camPos.y, 2.0f) + glm::pow(camPos.z, 2.0f));
float angle = glm::asin(value);
cow.SetModelMatrix(glm::translate(camPos - glm::vec3(0,0,1.5)) * //then translate so the cow will appear a little bit infront of the camera
glm::rotate(glm::radians(angle), glm::vec3(-1,0,0)) *//then rotate vertically by the angle
glm::scale(glm::vec3(0.1, 0.1, 0.1)) //first scale, cause the cow (i mean chicken) is too big
);
Камера запускается в позиции (0, 0, 5), глядя в сторону отрицательной оси z. Что я делаю неправильно?
Вы не предоставили достаточно информации для получения хорошего ответа. Приведите пример значений, а также последовательность поворотов, которые вы используете для ориентации. – ja72
Я не уверен, что вы описываете, но у меня такое чувство, что оно называется [«billboarding»] (http://nehe.gamedev.net/article/billboarding_how_to/18011/). –
Это потому, что вы вращаете корову, а не курица. –