0

オブジェクトを回転させたいので、glPushMatrix() を呼び出してマトリックスを保存します。glTranslatef は、オブジェクトに独自の軸を持たせたいので、オブジェクトを画面の中央に移動してから、rotate を実行します。 glPopMatrix() を呼び出しても何も起こりません:D

package Tanc;

import org.lwjgl.LWJGLException;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.*;
public class Tanc{

public Tanc(){
    try{
        Display.setDisplayMode(new DisplayMode(640,480));
        Display.setTitle("Tancc");
        Display.create();
    }catch(LWJGLException e){
        e.printStackTrace();
    }
    GL11.glMatrixMode(GL11.GL_MODELVIEW);
    GL11.glLoadIdentity();
    GL11.glOrtho(1, 1, 1, 1, 1, -1);
    GL11.glEnable(GL11.GL_TEXTURE_2D);
    GL11.glMatrixMode(GL11.GL_PROJECTION);

    float y_angle = 0;

    while (!Display.isCloseRequested()) {
        GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
        GL11.glPushMatrix(); 

/*     
        GL11.glRectd(0, 0, 0.2f, 0.3f);
       // GL11.glRotated(50, 1, 0, 0);
      //  GL11.glRotated(50, 0, 1, 0);
        GL11.glRotated(1, 0, 0, 1);
    //    GL11.glTranslatef(0, 0, 0);
        GL11.glTranslatef(-0.1f, -0.15f, 0);
     //   GL11.glTranslatef(-1f, -0.15f, 0);
        GL11.glPopMatrix();
*/
        GL11.glLoadIdentity();
        GL11.glPushMatrix();
        GL11.glBegin(GL11.GL_QUADS);
        GL11.glVertex2f(0f, 0f);
        GL11.glVertex2f(0.2f, 0f);
        GL11.glVertex2f(0.2f, 0.3f);
        GL11.glVertex2f(0f, 0.3f);
        GL11.glEnd();
        GL11.glTranslatef(-0.1f, -0.15f, 0);
        GL11.glRotatef(30, 1, 0, 1);
        GL11.glPopMatrix();
        Display.update();
        Display.sync(60);
    }       
    Display.destroy();
    System.exit(0);
}

public static void main(String[] args){
    new Tanc();
}

}

4

3 に答える 3

3

これは、各フレームで同じことを行っているためです。

三角形を作成し、平行移動し、0 度から 30 度まで回転します。次のフレームでは、すべてがリセットされ、まったく同じことを行い、0 度から 30 度まで回転します。

ある種の永続的なデータが必要です。

GL11.glRotatef(xRot, 1, 0, 1);
//...
xRot = xRot > 360 ? 0 : xRot + 10;
于 2013-11-01T15:09:03.593 に答える
2

スカイホーク船長の答えは正しいです。

さらに、描画する前に変換を行います。

于 2013-11-02T02:31:30.430 に答える