JOGL 2D形状
精华
小牛编辑
114浏览
2023-03-14
在上一节中,我们已经学习了如何在 JOGL 中绘制基本线条。使用相同的方法,我们还可以绘制各种类型的形状,例如正方形、矩形、三角形等。
JOGL 正方形示例
在这个例子中,我们将绘制四个不同的边,使它们都连接在一个正方形的点上。
package cn.xnip;
import javax.media.opengl.*;
import javax.media.opengl.awt.GLCanvas;
import javax.swing.*;
public class Square implements GLEventListener {
@Override
public void init(GLAutoDrawable arg0) {
}
@Override
public void display(GLAutoDrawable drawable) {
final GL2 gl = drawable.getGL().getGL2();
//Drawing top edge
gl.glBegin(GL2.GL_LINES);
gl.glVertex2d(-0.4, 0.4);
gl.glVertex2d(0.4, 0.4);
gl.glEnd();
//Drawing bottom edge
gl.glBegin(GL2.GL_LINES);
gl.glVertex2d(-0.4, -0.4);
gl.glVertex2d(0.4, -0.4);
gl.glEnd();
//Drawing right edge
gl.glBegin(GL2.GL_LINES);
gl.glVertex2d(-0.4, 0.4);
gl.glVertex2d(-0.4, -0.4);
gl.glEnd();
//Drawing left edge
gl.glBegin(GL2.GL_LINES);
gl.glVertex2d(0.4, 0.4);
gl.glVertex2d(0.4, -0.4);
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);
Square sq = new Square();
gc.addGLEventListener(sq);
gc.setSize(400, 400);
final JFrame frame = new JFrame("xnip.cn:JOGL Line");
frame.add(gc);
frame.setSize(500, 400);
frame.setVisible(true);
}
}
输出结果如下:
JOGL 三角形示例
在这个例子中,我们将绘制三个不同的边,它们都连接在一个三角形形状的点上。
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();
// Base edge
gl.glBegin(GL2.GL_LINES);
gl.glVertex2d(-0.65, -0.65);
gl.glVertex2d(0.65, -0.65);
gl.glEnd();
//Right edge
gl.glBegin(GL2.GL_LINES);
gl.glVertex2d(0, 0.65);
gl.glVertex2d(-0.65, -0.65);
gl.glEnd();
//Left edge
gl.glBegin(GL2.GL_LINES);
gl.glVertex2d(0, 0.65);
gl.glVertex2d(0.65, -0.65);
gl.glEnd();
gl.glFlush();
}
@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);
}
}
输出结果如下:
因此,任何类型的图形都可以通过连接特定形状的线条来设计。