0

Y 軸に沿ってスムーズに回転しようとしている 3D 立方体があります。今のところ、マウス ボタンをクリックすると、立方体は (テトリスのように) 即座に新しい値に回転しますが、特定の範囲で新しい回転値に徐々に回転することを示したいと思います。ここに私が取り組んでいるコードがあります:

// Within Shp_Cube class
public float cubeRotY = 1.0f; // rotate on Y-axis
public static float cubeAngle = .01f; // angle of rotation
public static float cubeSpeed = 1.0f; // speed of rotation
...

// Within drawCube() method (called in JOGL's display(GLAutoDrawable...) )
gl.glRotatef(cubeAngle, 0, cubeRotY, 0); // rotation of cube
...

// Within MouseInput class
@Override
public void mouseClicked(MouseEvent m) 
{
    switch(m.getButton())
    {
    case 1:
        System.out.println("Left Mouse Button Clicked");

        if(Shp_Cube.cubeAngle < Shp_Cube.cubeAngle + 90f)
        {
            Shp_Cube.cubeAngle += Shp_Cube.cubeSpeed;
        }

        break;
    case ...

私が達成しようとしている望ましい効果は、ユーザーがマウスの左ボタンをクリックすると、立方体が回転し始め、角度が特定の値に達するまで回転し続けることです。

4

1 に答える 1

0

メソッド内でキューブを更新していますが、メソッドmouseClicked()内で更新する必要があります。display()

public void display(GLAutoDrawable drawable) {
    updateCube();
    drawCube(...);
}

private void updateCube() {
    if(Shp_Cube.cubeAngle < Shp_Cube.cubeAngle + 90f) {
        Shp_Cube.cubeAngle += Shp_Cube.cubeSpeed;
    } else {
        Shp_Cube.cubeSpeed = 0; // stop rotattion after angle reched
    }
}

public void mouseClicked(MouseEvent m) {
    switch(m.getButton()) {
    case 1:
        Shp_Cube.cubeSpeed = INITIAL_SPEED; // this should only start rotation by setting positive speed
        break;
    }
}

一定のフレームレートでスムーズにレンダリングするには、main()メソッドに以下を追加します。

Animator animator = new FPSAnimator(canvas, 60);
animator.add(canvas);
animator.start();

詳細については、このチュートリアルの最後にあるコードを参照してください。

于 2013-02-04T08:10:05.363 に答える