0

長方形があり、これが移動オブジェクトのベースになります。

Aボタンが押されたときにのみオブジェクトを回転させようとしています。ボタンを離すと、オブジェクトの回転が停止します。

package Tanc;

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.LWJGLException;

public class Tanc{

public Tanc(){
    try{
        Display.setDisplayMode(new DisplayMode(640,480));
        Display.setTitle("Tanc");
        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;
    boolean aFlag = false;
    while(!Display.isCloseRequested()){
        GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
    //  GL11.glPushMatrix();
        GL11.glLoadIdentity();
        GL11.glRectd(0, 0, 0.2f, 0.3f);
        GL11.glTranslatef(0, 0, 0);

        while(Keyboard.next()){
            if(Keyboard.getEventKey() == Keyboard.KEY_A){
                aFlag = true;
            }
        }
        if(aFlag){
            y_angle = 0.1f;
            GL11.glRotatef(y_angle, 0, 0, 1);
        }
        else{
            y_angle = 0;
            GL11.glRotatef(0, 0, 0, 1);
        }




    //  GL11.glPopMatrix();
        Display.update();
        Display.sync(60);
    }   
    Display.destroy();
    System.exit(0);
}

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

}

4

1 に答える 1

2

これは、実際には何も回転しないためです。y_angle0.0 から 0.1 以外は、実際には変化しません。

angle パラメーターはradiansではなく度数glRotatef()で指定する必要があることに注意してください。ラジアン単位の完全な円は、0.0 から ~6.2831 ラジアンになります。degress を使用した完全な円は、0.0 から 360.0 degress になります。あなたの角度は、わずかな量だけ変更するだけなので、まったく目立ちません。

コードを変更しました。ここでAボタンを押し続けると回転し、ボタンを離すと回転が止まります。

float y_angle = 0;

while (!Display.isCloseRequested()) {
    GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
    GL11.glLoadIdentity();
    GL11.glRectd(0, 0, 0.2f, 0.3f);
    GL11.glTranslatef(0, 0, 0);

    while (Keyboard.next()){
        if (Keyboard.getEventKey() == Keyboard.KEY_A) {
            y_angle += 10f;
        }
    }

    GL11.glRotatef(y_angle, 0, 0, 1);

    Display.update();
    Display.sync(60);
}   
于 2013-10-30T15:47:33.517 に答える