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

JOGL Primitive

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

作为一个开放的图形库,我们可以在 JOGL 中绘制不同的形状,如圆形、三角形、正方形。因此,为了绘制这些形状,Open GL 提供了有助于 JOGL 绘制 2D 和 3D 尺寸图形的基元。

OpenGL Primitive 提供了各种内置参数,根据这些参数可以绘制不同的形状。每个参数在绘制图形中都有一些特定的作用。

JOGL 内置Primitive参数

以下是 JOGL 支持的各种 OpenGL 内置参数:

Primitive参数 描述
GL_LINES 它将每对顶点视为线段。
GL_LINES_STRIP 将一组线段相互连接起来。
GL_LINES_LOOP 将一组线段连接成一个循环,即从第一个到最后一个,然后再回到第一个。
GL_TRIANGLE 三元组的每个顶点都表现为一个独立的三角形
GL_TRIANGLE_FAN 创建一组连接的三角形,其中每个三角形都针对出现在前两个顶点之后的特定顶点进行定义。
GL_TRIANGLE_STRIP 将一组三角形相互连接起来。
GL_QUADS 每组四个顶点都表现为一个独立的四边形。
GL_QUAD_STRIP 连接一组四边形。
GL_POLYGON 绘制单个凸多边形。

 JOGLDisplay() 方法

display() 方法包含用于绘制和显示形状的代码。请按照以下步骤系统地编写代码:

  • 开始,传递带有 display() 方法的 GLAutoDrawable 接口的对象作为其参数。
public void display(GLAutoDrawable drawable)  
  • 生成GL2接口的对象。
final GL2 gl = drawable.getGL().getGL2();  
  • 将该对象与 glBegin() 方法相关联,并将所需的原语类型作为其参数传递。
gl.glBegin (GL2.GL_LINES);  

在这里,我们提供 GL_LINES Primitive。

  • 现在,使用 glVeretex2d() 方法绑定 GL2 对象并传递特定坐标。
gl.glVertex2d(-0.60, 0.10);  
gl.glVertex2d(0.60, 0.10);  
  • 通过调用 glEnd() 方法结束该行。
gl.glEnd();  

 JOGL Primitive绘制线 示例

在这个例子中,我们将学习如何使用图元绘制一条简单的线。

package cn.xnip;

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

public class BasicLine implements GLEventListener {

    @Override
    public void init(GLAutoDrawable arg0) {

    }

    @Override
    public void display(GLAutoDrawable drawable) {
        final GL2 gl = drawable.getGL().getGL2();

        gl.glBegin(GL2.GL_LINES);
        gl.glVertex2d(-0.60, 0.10);
        gl.glVertex2d(0.60, 0.10);
        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);
        BasicLine bl = new BasicLine();
        gc.addGLEventListener(bl);
        gc.setSize(400, 400);

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

输出结果如下: