当前位置: 首页 > 教程 > JOGL >

JOGL 旋转效果

精华
小牛编辑
114浏览
2023-03-14

在 JOGL 中,对象可以沿三个轴中的任何一个向任何方向旋转。要旋转对象,您需要按照以下步骤操作:

  • 删除对象的先前状态以清除视图。为此,您需要使用以下方法清除颜色和深度缓冲区:
gl.glClear (GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT )  
  • 现在,在 glLoadIntensity() 方法的帮助下重置项目矩阵
  • 调用 GLMatrixFunc 接口的 glRotatef() 方法。

JOGL FPSAnimator 类

FPSAnimator 类是 Animator 类的子类,用于以每秒帧速率旋转对象。

JOGL FPSAnimator 类的构造函数

构造方法 描述
FPSAnimator(int fps) 它创建一个 FPSAnimator,它具有指定的每秒目标帧值。
FPSAnimator(GLAutoDrawabledrawable, int fps) 它创建了一个 FPSAnimator,它具有用于动画的初始绘制和指定的每秒目标帧值。
FPSAnimator(GLAutoDrawabledrawable, int fps, booleanscheduleAtFixedRate) 它创建了一个 FPSAnimator,它带有一个用于动画的初始绘制、指定的每秒目标帧值和一个指定是否使用固定速率调度的标志。
FPSAnimator(int fps, booleanscheduleAtFixedRate) 它创建了一个 FPSAnimator,它具有指定的每秒目标帧值和一个指定是否使用固定速率调度的标志。

JOGL 旋转示例

在这个例子中,我们将旋转一个三角形。

package cn.xnip;

import com.jogamp.opengl.util.FPSAnimator;

import javax.media.opengl.*;
import javax.media.opengl.awt.GLCanvas;
import javax.swing.*;

public class JRotation implements GLEventListener {
    public float rotation;

    @Override
    public void display(GLAutoDrawable drawable) {

        final GL2 gl = drawable.getGL().getGL2();
        gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);

        // Clear The Screen And The Depth Buffer
        gl.glLoadIdentity();  // Reset The View

        //triangle rotation
        gl.glRotatef(rotation, 0.0f, 1.0f, 0.0f);


        gl.glBegin(GL2.GL_TRIANGLES);
        //Green Color
        gl.glColor3f(0.0f, 1.0f, 0.0f);
        gl.glVertex2d(0, 0.5);
        gl.glVertex2d(-0.5, -0.5);
        gl.glVertex2d(0.5, -0.5);

        gl.glEnd();

        gl.glFlush();
        //Assign the angle
        rotation += 0.6f;
    }

    @Override
    public void dispose(GLAutoDrawable arg0) {
        //method body
    }

    @Override
    public void init(GLAutoDrawable arg0) {
        // method body
    }

    @Override
    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
    }

    public static void main(String[] args) {

        final GLProfile gp = GLProfile.get(GLProfile.GL2);
        GLCapabilities cap = new GLCapabilities(gp);

        final GLCanvas gc = new GLCanvas(cap);
        JRotation jr = new JRotation();
        gc.addGLEventListener(jr);
        gc.setSize(400, 400);

        final JFrame frame = new JFrame("xnip.cn:JOGL Rotation");

        frame.add(gc);
        frame.setSize(500, 400);
        frame.setVisible(true);

        final FPSAnimator animator = new FPSAnimator(gc, 400, true);
        animator.start();

    }

}   

 输出结果如下: