2013-12-24 5 views
0

Я хочу повернуть вектор (0, -10, 0) вокруг оси X и Y. Я хочу повернуть X rotX градусов (0 - 360 °) и Y rotY градусов (0 - 180 °). Я много пробовал, но я не мог сделать это. Каудд, кто-нибудь дал мне решение для этого? Некоторые из моего кода, я пробовал:Вращение 3D-вектора без матрицы (OpenGL)

LightRotX = -posX; 
LightRotY = -10 * cos((rotY) * PI/180.0) - posZ * sin((rotY) * PI/180.0); 
LightRotZ = -10 * sin((rotY) * PI/180.0) + posZ * cos((rotY) * PI/180.0); 

float bZ = LightRotZ; 
float bX = LightRotX; 

LightRotX = bZ * sin((rotX) * PI/180.0) + bX * cos((rotX) * PI/180.0); 
LightRotZ = bZ * cos((rotX) * PI/180.0) - bX * sin((rotX) * PI/180.0); 
+0

Скажите нам, какую версию OpenGL вы используете, и да, если вы что-то попробовали (код), разместите ее здесь. – legends2k

ответ

1

Чтобы повернуть точку (x,y,z) вокруг z оси, следующие работы:

Во-первых, обратите внимание, что z координата останется прежней. Таким образом, проблема сводится к вращению точки (x,y) в плоскости вокруг начала координат. Пусть theta - это угол от оси x, определенный как обычно, и пусть r - длина вектора (x,y) в плоскости. Они могут быть рассчитаны как:

  • r = sqrt(x*x + y*y)
  • theta = atan(y/x)

Допустим, вы хотите, чтобы повернуть на phi градусов вокруг оси z. Вы хотите, чтобы точка имела длину r, но угол theta + phi. Его координаты:

  • (r * cos(theta + phi), r * sin(theta + phi))

Поворот вокруг оси y может быть сделано аналогичным образом, путем замены каждой y в приведенных выше расчетов с z.

0

Ваш вопрос не совсем ясно ... Вы пробовали с помощью метода glRotatef (угол, X_Axis, y_axis, z_axis), где x_axis, y_axis, z_axis = {1.0, 0.0 }; ?

+0

Мне не нужны функции OpenGL, я думаю. Я хочу установить переменные моего вектора, не используя OpenGL, чтобы просто изменить размер рендеринга. – user3075425

+0

Возможно, вам нужно выполнить те же тригонометрические вычисления, чтобы представить новый вектор из старого и угла –

+0

То, что я хочу сделать, но я для этого нужно решение. Мое не будет работать. – user3075425

1

Если вы хотите повернуть ось (x, y, z) вокруг оси y, то вот что вам нужно сделать, если вы не хотите использовать Matrices. Подумайте только о плоскостях, а не о оси. Для случая у плоскостью выбора была бы плоскость х-г. Представьте себе окружность, нарисованную на плоскости x-z, когда вы поворачиваете эту точку вокруг оси y, ее положение можно определить как точку P (x, z) на круге, нарисованном на плоскости x-z.

Итак, чтобы повернуть вокруг оси y, вам необходимо изменить координаты x и z для вашего вектора/точки. Для того, чтобы повернуть на 90 градусов:

NewX=cos(pi/2)*r 
NewZ=sin(pi/2)*r 

Я не могу Gurantee правильности указанных выше двух линий псевдокода, но если вы получите представление, вы будете в состоянии осуществить это.

Если вы измените X и Y, вы будете вращаться вокруг оси Z, которая является плоскостью X-Y.

Смежные вопросы