2013-03-16 1 views
0

Я работаю над OpenGL Superbible (4-е издание). В главе 4 приведен пример вращения электронов вокруг ядра. (в основном небольшие сферы вокруг одной большой сферы).Перевод и ротация в OpenGL?

Вот выдержка функции рендеринга, которая рисует электрон (сферу) в определенном положении вокруг ядра (другой сферы). fElect1 - это угол, который увеличивается на 10 градусов при каждом вызове рендера.

glPushMatrix(); 
glRotatef(360.0f-45.0f,0.0f, 0.0f, 1.0f); 
glRotatef(fElect1, 0.0f, 1.0f, 0.0f); 
glTranslatef(0.0f, 0.0f, 60.0f); 
glColor3ub(56,136,21); 
glutSolidSphere(6.0f, 15, 15); 
glPopMatrix() 

Таким образом, он поворачивает вид на 315 градусов относительно оси z. А затем поворачивает представление о вновь повернутой оси y на угол fElect1, а затем рисует сферу. то есть он хочет смоделировать орбиту электрона вокруг оси y. В результате электроны, по-видимому, движутся на «наклонной» орбите вокруг сферы (наклонены, так как ось х была наклонена на 315 градусов).

Но мой вопрос: почему он переводит на ось z? не означает ли это, что электрон имеет своего рода орбиту, где ядро ​​не находится в центре его пути? Но это не похоже на то, когда я запускаю симуляцию.

ответ

1

Я думаю, что, возможно, вы думаете об операциях с неправильного направления. Как они применяются в GL, вы применяете наиболее «глобальное» преобразование в первую очередь, а самое «локальное» - последнее. Поэтому, думая о том, как что-то изменится, вы можете подумать о них в обратном порядке.

Итак:

  • Ваша сфера генерируется в начале
  • Это переводится из 60 единиц в Z.
  • Затем вращают вокруг оси Y (так он теперь находящийся на орбите происхождение в плоскости XZ на расстоянии 60 единиц).
  • Наконец, все вращается вокруг оси Z, создавая наклон.
  • Это будет далее преобразовано любыми предшествующими преобразованиями, такими как любые преобразования, уже примененные к «атому» и к камере.
+0

Я, должно быть, пропустил ту часть, где он говорит, в каком порядке применяются преобразования. Это имеет гораздо больший смысл. – BeeBand