Подумайте о glRotatef()
как будто вы на самом деле «нарисовать» ось, которая начинается с (0, 0, 0) и указывает на любые координаты, которые вы ему даете. В вашем примере используется (0, 1, 0), который является осью World Y.
Но скажем, вы хотите повернуть свою P
точку (10, 10, 0) вокруг оси A
[(3, 3, 3), (3, 4, 3)]. Эта ось - как вы можно увидеть - параллельно с Y.
Сначала вам нужно перевести весь мир, так что теперь ваша ось A
будет лежать на Мировой оси Y.
glClear(GL_COLOR_BUFFER_BIT)
glTranslatef(3, 3, 3)
Теперь вы должны повернуть все вокруг оси мира по Y:
glRotatef(rotation*100.0, 0, 1, 0)
И тогда вы должны перевести его обратно:
glTranslatef(-3, -3, -3)
И теперь вы можете сделать свой P
точку :
glBegin(GL_POINTS)
glVertex3f(10, 10, 0)
glEnd()
ПРИМЕЧАНИЕ: забудьте мой глупый пример glBegin/End, это древний, используйте VAO и VBOs!
Я не знаю, какие рамки вы используете, но здесь довольно простой пример pyglet:
import pyglet
from pyglet.gl import *
window = pyglet.window.Window(256, 256)
x = 0
def update(dt):
global x
x += 1
@window.event
def on_draw():
global x
glClear(GL_COLOR_BUFFER_BIT)
glLoadIdentity()
glTranslatef(128, 128, 0)
glRotatef(x, 0, 0, 1)
glTranslatef(-128, -128, 0)
glBegin(GL_TRIANGLES)
glColor3f(1, 0, 0)
glVertex3f(128, 128, 0)
glColor3f(0, 1, 0)
glVertex3f(200, 128, 0)
glColor3f(0, 0, 1)
glVertex3f(200, 200, 0)
glEnd()
pyglet.clock.schedule_interval(update, 1/60)
pyglet.app.run()
AND THE RESULT IS HERE!
Я хотел бы рассмотреть другой способ описания этого в будущее. Когда я читаю *** «фиксированную точку» *** в контексте компьютерной графики, первое, что приходит в голову, это целочисленный тип данных, который имеет масштаб для определения точки счисления ... может быть, «фиксированное местоположение»? :) –
@ AndonM.Coleman Ах, да. Черт побери, эти технические возможности всегда убегают от меня! Спасибо за головы :) – Fitzy