Я делаю 3D-моделирование движения частиц, и я хочу нарисовать стрелки, представляющие электрическое поле в определенных положениях. Я сделал стрелочную сетку в Blender и экспортировал ее как .obj, поэтому я могу использовать ее в своем коде (я сделал загрузчик .obj), но я не могу повернуть его правильно, чтобы он указывал в правильном направлении , хотя я проверил, что вектор электрического поля был рассчитан правильно. Я получаю некоторые странные результаты. Например, если вектор должен быть направлен вверх, он указывает вниз, но когда я прокомментирую код, который вращается по оси x, стрелка указывает вниз, как и предполагалось. Затем, если он должен указывать на право, он указывает внутрь (в сторону отрицательной оси z), но когда я прокомментирую поворот в оси y, он указывает на право.Как нарисовать 3D-вектор в OpenGL?
Вот мой код для вращения и визуализации стрелок:
void Render(Vector3 cameraPos)
{
glScalef(field.length() * ArrowLength,1.0,1.0);
glTranslatef(0,0,_zdefault);
glRotatef(Entity::yangle,0,1,0);
glTranslatef(pos.getX() + cameraPos.getX(), pos.getY() + cameraPos.getY(), pos.getZ() + cameraPos.getZ() - _zdefault);
glRotatef(atan2(field.getZ(),field.getY()) * 180/M_PI, 1.0,0.0,0.0);
glRotatef(atan2(field.getX(),field.getZ()) * 180/M_PI, 0.0,1.0,0.0);
glRotatef(atan2(field.getY(),field.getX()) * 180/M_PI, 0.0,0.0,1.0);
glBindTexture(GL_TEXTURE_2D,arrowTexture);
glCallList(arrow);
glLoadIdentity();
};
поля является вектором, который представляет собой электрическое поле. Линии
glTranslatef(0,0,_zdefault);
glRotatef(Entity::yangle,0,1,0);
Есть так, что я могу повернуть всю сцену, вроде как на орбите вокруг него в Blender. Кроме того, Vector3 - это просто класс Vector, который я написал с очень простой функциональностью. Как я уже сказал, нет никаких проблем с векторными вычислениями, я проверил это, я просто не могу использовать векторы для правильного поворота.
У меня есть чувство, что мои углы немного прищурены для glRotatef, где я использую atan2, но я до сих пор не могу понять, как это повлияет на повороты, как описано выше.
Есть ли способ повернуть что-то, основанное только на векторных компонентах?
Вместо того, чтобы иметь дело с углами поворота, проще построить матрицу вращения. См. Мой ответ здесь, который был для той же проблемы: http://stackoverflow.com/questions/24705225/opengl-rotation-from-velocity-vector/24709587#24709587. –
В каком направлении указана ваша нетрансформированная стрелка? Ответ выше для исходного вектора, указывающего в положительном z-направлении. Это должно быть легко адаптировать к вашей оригинальной стрелке, например. точек в направлении x. Но при необходимости я могу написать новую версию ответа. –