Вращение OpenGL в точке

Я хочу повернуть фигуру в opengl, но я хочу повернуть ее в точке. А именно, у меня есть цилиндр, и я хочу повернуть его так, чтобы казалось, что он вращается внизу, а «размер» вращения увеличивается до тех пор, пока объект не упадет на землю. Как бы я сделал такое вращение в opengl?


person Neutralise    schedule 03.10.2011    source источник


Ответы (1)


  1. Перевести в оригинал
  2. Повернуть
  3. Перевести обратно

Итак, если вы хотите повернуть вокруг (a,b,c), вы должны перевести (-a,-b,-c) на шаге 1 и (a,b,c) на шаге 3.

(Кстати, не бойтесь количества операций. Внутренне все, что вы делаете, это умножаете матрицу преобразования три раза, но конвейер, который преобразует вершины, не зависит от того, сколько операций вы сделали, он по-прежнему использует только одну конечная матрица.Магия использования матрицы для преобразования.)

person Damon    schedule 03.10.2011
comment
Но я надеюсь, что объект будет вращаться под углом, поэтому похоже, что он вращается в точке объекта. Имеет ли это смысл? - person Neutralise; 03.10.2011
comment
Подождите, я на секунду запутался... собирался сказать что-нибудь глупое. - person Damon; 03.10.2011
comment
То, что предлагает вам API (если вы не поддерживаете свой собственный матричный стек, такой как в OpenGL 3.x и более поздних версиях), — это перемещение и вращение вдоль оси в начале координат. Следовательно, чтобы вращаться вокруг какой-то другой точки, например. точка объекта, вы сначала преобразуете его в исходную точку, повернете, а затем преобразуете обратно. Это должно делать именно то, что вы хотите. - person Damon; 03.10.2011
comment
Насчет увеличения размера вращения и падения на землю я не уверен на 100%, что вы имеете в виду, но в основном это одно и то же. Для падения вы, вероятно, захотите использовать переводы в точке центра масс вашего объекта, и это точка, которую вы также преобразуете в исходную точку и обратно, прежде чем применять любое вращательное вращение, которое вы хотите. Перемещайте центр масс по мере падения объекта. Или вы говорите о падении, как об опрокидывании спиннера (детской игрушки) в конце? В этом случае вам понадобится мини-симуляция физики, в основном накладывающая два вращения. Часть OpenGL остается прежней. - person Damon; 03.10.2011
comment
Хорошо, меня интересует стиль мини-физики. Поэтому я переведу в начало координат, чтобы можно было вращать его вокруг точки. Спасибо. - person Neutralise; 03.10.2011
comment
Обратите внимание, что для более реалистичной симуляции (вращение объекта, затем удар об пол и небольшое подпрыгивание/скольжение) вам понадобится что-то вроде симуляции твердого тела. В простейшем случае что-то вроде 6-10 частиц, связанных жесткими ограничениями расстояния. Математика для определения ориентации может быть сложной, если вы этого не сделали. Погуглите Jakobsen Advanced Character Animation или посмотрите это. - person Damon; 03.10.2011