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

JOGL 基本形状

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

在前面的例子中,我们已经知道在 JOGL 中可以借助 GL_LINES 参数绘制任何类型的形状。但除此之外,JOGL 还包含各种其他参数,我们可以通过这些参数直接(即以更简单的方式)绘制特定的形状,例如三角形、四边形、多边形等。

JOGL 原始三角形 示例

在这个例子中,我们将看到如何在原始三角形参数(GL_TRIANGLES)的帮助下创建一个三角形。

package cn.xnip;

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

public class Triangle implements GLEventListener {

    @Override
    public void init(GLAutoDrawable arg0) {

    }

    @Override
    public void display(GLAutoDrawable drawable) {

        final GL2 gl = drawable.getGL().getGL2();

        gl.glBegin(GL2.GL_TRIANGLES);

        gl.glVertex2d(0, 0.5);
        gl.glVertex2d(-0.5, -0.5);
        gl.glVertex2d(0.5, -0.5);

        gl.glEnd();
    }

    @Override
    public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {

    }

    @Override
    public void dispose(GLAutoDrawable arg0) {

    }

    public static void main(String[] args) {

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

        final GLCanvas gc = new GLCanvas(cap);
        Triangle tr = new Triangle();
        gc.addGLEventListener(tr);
        gc.setSize(400, 400);

        final JFrame frame = new JFrame("xnip.cn:JOGL Triangle");
        frame.add(gc);
        frame.setSize(500, 400);
        frame.setVisible(true);
    }
}  

输出结果如下:

JOGL 原始四边形 示例

在这个例子中,我们将看到如何在原始四边形参数(GL_QUADS)的帮助下创建一个四边形。

package cn.xnip;

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

public class JQuad implements GLEventListener {

    @Override
    public void init(GLAutoDrawable arg0) {

    }

    @Override
    public void display(GLAutoDrawable drawable) {

        final GL2 gl = drawable.getGL().getGL2();


        gl.glBegin(GL2.GL_QUADS);

        gl.glVertex3f(0.0f, 0.5f, 0);
        gl.glVertex3f(-0.5f, 0f, 0);
        gl.glVertex3f(0f, -0.5f, 0);
        gl.glVertex3f(0.5f, 0f, 0);

        gl.glEnd();


    }

    @Override
    public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {

    }

    @Override
    public void dispose(GLAutoDrawable arg0) {

    }

    public static void main(String[] args) {

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

        final GLCanvas gc = new GLCanvas(cap);
        JQuad jq = new JQuad();
        gc.addGLEventListener(jq);
        gc.setSize(400, 400);

        final JFrame frame = new JFrame("xnip.cn:JOGL Primitive Quadrilateral");
        frame.add(gc);
        frame.setSize(500, 400);
        frame.setVisible(true);
    }
}  

输出结果如下: