Вводя: Я развивающуюся немного игра обороны башни в OpenGL, в настоящее время я просто отчаявшийся небольшой проблемой ....Регулировка glRotate, используя скалярное произведение
Я хочу, чтобы снаряды от башни до направьте голову на корпус. Так что моя проблема более математическая, но она относится к opengl :)
У меня была следующая идея; Я мог бы использовать точечный продукт, чтобы получить угол, вращающийся вокруг оси х, чтобы получить головку в зависимости от расстояния, прямо или вниз, до земли, а затем дополнительный угол для поворота вокруг оси y, когда голова стрелки каждый раз приспосабливается к единице, на которую он нацелен.
Мой код для угла поворота вокруг оси X (я назвал его m_fYNeigung, потому что высота (Y) изменяется головы путем поворота вокруг оси х) выглядит следующим образом:
plocalTowerArray[(sizeMapIndexY * 12) + sizeMapIndexX].Projektils[byteProjectilIndex].m_fYNeigung =
RADIANS_TO_DEGREES (acos ((float)
(
(faTowerPosition[0]) * (plocalTowerArray[(sizeMapIndexY * 12) + sizeMapIndexX].Projektils[byteProjectilIndex].m_faProDirectionVector[0]) +
(faTowerPosition[1] - 1) * (plocalTowerArray[(sizeMapIndexY * 12) + sizeMapIndexX].Projektils[byteProjectilIndex].m_faProDirectionVector[1]) +
(faTowerPosition[2]) * (plocalTowerArray[(sizeMapIndexY * 12) + sizeMapIndexX].Projektils[byteProjectilIndex].m_faProDirectionVector[2])
)
/
(
fabs (faTowerPosition[0]) * fabs (plocalTowerArray[(sizeMapIndexY * 12) + sizeMapIndexX].Projektils[byteProjectilIndex].m_faProDirectionVector[0]) +
fabs (faTowerPosition[1] - 1) * fabs (plocalTowerArray[(sizeMapIndexY * 12) + sizeMapIndexX].Projektils[byteProjectilIndex].m_faProDirectionVector[1]) +
fabs (faTowerPosition[2]) * fabs (plocalTowerArray[(sizeMapIndexY * 12) + sizeMapIndexX].Projektils[byteProjectilIndex].m_faProDirectionVector[2])
)
));
где faTowerPosition является первым вектором, который направлен вниз от вершины башни (стрелка также начинается с faTowerPosition [X/Y/Z]), вторым вектором для точечного произведения является m_faProDirectionVector, который является нормированным вектором направления, описывающим маршрут стрелка от башни к блоку.
программы OpenGL Drawing часть выглядит так же просто, как это:
for (sizeJ = 0; sizeJ < localTowerArray[sizeI].m_byteProjectilAmount; sizeJ++)
{
if (localTowerArray[sizeI].Projektils[sizeJ].m_bOnFlight == true)
{
glPushMatrix();
glTranslatef (localTowerArray[sizeI].Projektils[sizeJ].m_faProPosition[0], localTowerArray[sizeI].Projektils[sizeJ].m_faProPosition[1], localTowerArray[sizeI].Projektils[sizeJ].m_faProPosition[2]);
//glRotatef (360.0f - localTowerArray[sizeI].Projektils[sizeJ].m_fXNeigung, 0, 1, 0);
glRotatef (localTowerArray[sizeI].Projektils[sizeJ].m_fYNeigung, 1, 0, 0);
DrawWaveFrontObject (m_pArrowProjektilObject);
glPopMatrix();
}
}
Просто игнорируйте расчеты я делаю на угол, я просто сделал это, чтобы экспериментировать с действующей стрелок, я просто заметил что он выглядит так же, как стрелка будет действовать в зависимости от (я должен сказать: построенная карта масштабируется с помощью x: от -3,4 до 3,4 и z от 4 до -4), на которых башня была построена на -x/z, -z/x, z/x, -z/-x все эти случаи, я думаю, разные и, по крайней мере, в зависимости от того, что блок работает с левой или с правой стороны башни, действие тоже отличается ... так что я забыл Напоминать, используя dot-продукт таким образом?
В коде есть так много ошибок, что трудно ответить на этот вопрос. Зачем использовать размер в качестве префикса для индекса? Что с немецкими именами? Почему так много дубликатов кода? Почему вы не используете структуры для точек? Самое главное, почему даже отправляйте свой код, если вы задаете вопрос о математике? В любом случае. Проверьте это: http://stackoverflow.com/questions/11008303/lookat-implementation-misbehaviors. –
размер префикса, потому что они имеют тип size_t. немецкие имена «s» ... единственное немецкое имя - это «neigung». Я объяснил это. Его ангел и neigung означает что-то вроде смолы. im не уверен, что вы имеете в виду с дублирующимся кодом .... Я просто написал это таким образом, чтобы сохранить форму точечного продукта, что его легче получить то, что я делаю .... и что вы имеете в виду со структурами для точек ? Я отправляю свой код, чтобы объяснить свою проблему, чтобы обратиться к проблеме, потому что я не знаю, что вызывает мою проблему. По крайней мере ... ссылка, которую вы разместили, абсолютно не имеет ничего общего с моей проблемой, но спасибо в любом случае :) – dhein
перед downvoting, может быть, скажите мне, что «так много» не так с моим кодом? код, который он сам запускает без проблем ... его просто работа с точечным продуктом. Почему он не делает то, что должно быть его поведением ?! – dhein