В основном:
Если вы хотите повернуть вокруг P
, переведите на -P
(чтобы P
переместился к началу координат), затем выполните вращение, а затем переведите на P
(чтобы источник переместился обратно к P
).
glTranslatef(P.x, P.y, P.z);
glRotatef(angle, A.x, A.y, A.z);
glTranslatef(-P.x, -P.y, -P.z);
(Примечание. Это в «обратном порядке», поскольку последнее добавленное преобразование является первым, примененным в соответствии с правилами OpenGL.)
Итак, в вашем коде настройки вам нужны эти вызовы:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, 499, 0, 499);
glMatrixMode(GL_MODELVIEW);
И тогда ваш display()
метод должен выглядеть примерно так:
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.5f, 0.5f, 0.5f);
glRotatef(45.f, 1.f, 1.f, 1.f);
glTranslatef(-0.5f, -0.5f, -0.5f);
glColor3f(0.f, 0.f, 1.f);
drawhouse();
glFlush();
}