2013-03-21 4 views
2



Я пытаюсь повернуть только один из двух объектов в моей сцене, которую я создал в Java с помощью LWJGL.
Теперь, когда я пытаюсь повернуть один объект, он не вращается вокруг центра, а в больших кругах. После поиска в Google теперь я знаю, что он должен работать следующим образом:LWJGL Вращающийся один объект только

glPushMatrix(); 
glBegin(); 

    //Code in here 

glEnd(); 
glRotate(); 
glPopMatrix(); 

Но это не работает для меня. Объект не вращается. Это мой код рендера:

public void render() { 

     glPushMatrix(); 

      glRotatef(rotate, 0, 1.0f, 0);     

      glBegin(GL_QUADS); 

       // Top 
       glVertex3f(-centerX + size, centerY + size, -centerZ - size); 
       glVertex3f(-centerX - size, centerY + size, -centerZ - size); 
       glVertex3f(-centerX - size, centerY + size, -centerZ + size); 
       glVertex3f(-centerX + size, centerY + size, -centerZ + size); 
       // Bottom 
       glVertex3f(-centerX + size, centerY - size, -centerZ + size); 
       glVertex3f(-centerX - size, centerY - size, -centerZ + size); 
       glVertex3f(-centerX - size, centerY - size, -centerZ - size); 
       glVertex3f(-centerX + size, centerY - size, -centerZ - size); 
       // One side 
       glVertex3f(-centerX + size, centerY + size, -centerZ + size); 
       glVertex3f(-centerX - size, centerY + size, -centerZ + size); 
       glVertex3f(-centerX - size, centerY - size, -centerZ + size); 
       glVertex3f(-centerX + size, centerY - size, -centerZ + size); 
       // Moar sides 
       glVertex3f(-centerX + size, centerY - size, -centerZ - size); 
       glVertex3f(-centerX - size, centerY - size, -centerZ - size); 
       glVertex3f(-centerX - size, centerY + size, -centerZ - size); 
       glVertex3f(-centerX + size, centerY + size, -centerZ - size); 
       // Last side 
       glVertex3f(-centerX - size, centerY + size, -centerZ + size); 
       glVertex3f(-centerX - size, centerY + size, -centerZ - size); 
       glVertex3f(-centerX - size, centerY - size, -centerZ - size); 
       glVertex3f(-centerX - size, centerY - size, -centerZ + size); 
       // Real last side 
       glVertex3f(-centerX + size, centerY + size, -centerZ - size); 
       glVertex3f(-centerX + size, centerY + size, -centerZ + size); 
       glVertex3f(-centerX + size, centerY - size, -centerZ + size); 
       glVertex3f(-centerX + size, centerY - size, -centerZ - size); 

      glEnd(); 

     glPopMatrix(); 

     rotate++; 
} 

Я теперь попытался исправить эту проблему часами, но не смог заставить ее работать.

ответ

1

Перед тем, как нарисовать квадрациклы, вы должны позвонить glRotate() и glTranslate().

Помните, что порядок преобразований важен. Вращение всегда около 0,0,0, поэтому, если вы переводите сначала, он будет сортировать «орбиту» вокруг точки в круге. Если вы хотите, чтобы он вращался вокруг своей оси (что вы, вероятно, делаете), сначала вращайте, а затем переводите.

В данной статье есть раздел о порядке преобразований.

http://www.glprogramming.com/red/chapter03.html

+0

Это не работает, я попробовал это. Когда я делаю это так, куб не вращается вокруг собственной оси. – DealerJoe

+0

Отредактированный ответ. Сначала поверните, затем переведите. – Zutty

+0

Но даже если я только вращаюсь и не переводю, он ничего не делает. – DealerJoe

Смежные вопросы