Java开发中 使用OpenGL20绘制一个半透明的三角形完整代码
时间: 2024-02-03 20:15:06 浏览: 180
以下是使用Java和OpenGL 2.0绘制一个半透明的三角形的完整代码:
```java
import javax.swing.*;
import javax.media.opengl.*;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.glu.GLU;
public class TranslucentTriangle implements GLEventListener {
private GLU glu = new GLU();
public static void main(String[] args) {
JFrame frame = new JFrame("Translucent Triangle");
GLCanvas canvas = new GLCanvas();
canvas.addGLEventListener(new TranslucentTriangle());
frame.getContentPane().add(canvas);
frame.setSize(640, 480);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
@Override
public void display(GLAutoDrawable drawable) {
final GL2 gl = drawable.getGL().getGL2();
gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glTranslatef(-1.5f, 0.0f, -6.0f);
//设置半透明效果
gl.glEnable(GL2.GL_BLEND);
gl.glBlendFunc(GL2.GL_SRC_ALPHA, GL2.GL_ONE_MINUS_SRC_ALPHA);
//绘制三角形
gl.glBegin(GL2.GL_TRIANGLES);
gl.glColor4f(1.0f, 0.0f, 0.0f, 0.5f);
gl.glVertex3f(0.0f, 1.0f, 0.0f);
gl.glColor4f(0.0f, 1.0f, 0.0f, 0.5f);
gl.glVertex3f(-1.0f, -1.0f, 0.0f);
gl.glColor4f(0.0f, 0.0f, 1.0f, 0.5f);
gl.glVertex3f(1.0f, -1.0f, 0.0f);
gl.glEnd();
gl.glFlush();
}
@Override
public void dispose(GLAutoDrawable drawable) {
}
@Override
public void init(GLAutoDrawable drawable) {
final GL2 gl = drawable.getGL().getGL2();
gl.glShadeModel(GL2.GL_SMOOTH);
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
}
@Override
public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
final GL2 gl = drawable.getGL().getGL2();
if (height <= 0) {
height = 1;
}
final float h = (float) width / (float) height;
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluPerspective(45.0f, h, 1.0, 20.0);
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
}
}
```
此代码使用OpenGL 2.0绘制一个半透明的红绿蓝三角形。在 `display()` 方法中,我们首先将混合模式设置为 `GL_SRC_ALPHA` 和 `GL_ONE_MINUS_SRC_ALPHA`,这会使颜色具有半透明效果。接着,我们使用 `glBegin()` 和 `glEnd()` 方法定义三角形的顶点,并分别为每个顶点设置半透明的红、绿和蓝色。最后,我们调用 `glFlush()` 方法刷新缓冲区。在 `init()` 方法中,我们设置阴影模式为平滑和背景色为黑色。在 `reshape()` 方法中,我们重新计算视口和投影矩阵。
阅读全文