glRotate(угол,x,y,z), что такое x,y,z в данном случае?

Я прочитал документацию здесь: http://www.opengl.org/sdk/docs/man2/xhtml/glRotate.xml

Указывает, что угол выражен в градусах. Он говорит, что X, Y, Z являются векторами. Если я скажу glRotate(2,1,0,0), это означает, что я повернусь на 2 градуса вокруг оси X.

Что произойдет, если я скажу glRotate(2,0.5,0,0) и glRotate(2,0.0174524,0,0)

Я не понимаю, что на самом деле происходит в этой ситуации, может кто-нибудь помочь мне объяснить?

Вращается ли он в процентах от угла?


person Joseph Astrahan    schedule 03.10.2013    source источник


Ответы (2)


Он по-прежнему будет вращаться на 2 градуса вокруг оси X. На этой странице, на которую вы ссылаетесь, также говорится следующее:

x y z = 1 (if not, the GL will normalize this vector).

Это означает, что вектор (x, y, z) является единичным вектором (длиной 1), и если это не так, GL нормализует вектор (разделив его на длину, сделав его длиной 1).

Вывод: параметры x,y и z определяют вектор, единственной значимой частью которого является направление, длина будет обрабатываться функцией. Таким образом, вы можете смело вводить любой вектор, и он просто будет вращаться вокруг этого вектора.

person Invalid    schedule 03.10.2013
comment
На самом деле там написано ||(x,y,z)||=1, но, видимо, ваш браузер не поддерживает MathML. - person Ruslan; 27.12.2017
comment
x y z = 1 (if not, the GL will normalize this vector). Если да, можете ли вы объяснить, почему функция ожидает число с плавающей запятой в glrotatef() и двойное число в glrotated()? - person Suvin Nimnaka Sukka; 24.08.2020

Это не говорит о том, что x, y и z являются векторами. Если вы откроете страницу в браузере с поддержкой MathML, вы увидите что-то вроде

glRotate производит поворот вокруг вектора (x, y, z) на угол в градусах.

т.е. x, y, z являются компонентами одного вектора. Точно так же он не говорит «x y z = 1 (если нет, GL нормализует этот вектор)», а говорит:

||(x,y,z)||=1 (если нет, то GL нормализует этот вектор).

Итак, (x,y,z) — это вектор, вращение вокруг которого будет производить функция. Если предоставленный вами вектор не нормализован, GL нормализует его, поэтому glRotate(2,0.5,0,0) и glRotate(2,0.0174524,0,0) эквивалентны.

person Ruslan    schedule 27.12.2017