gpt4 book ai didi

java - 如何使用Java清除openGL中的屏幕

转载 作者:行者123 更新时间:2023-12-01 09:30:13 25 4
gpt4 key购买 nike

我不明白如何在使用 OpenGL 的同时在 Java 中简单地清除屏幕。我在互联网上进行了搜索,似乎没有真正好的 OpenGL 信息资源。基本上我只是想清除屏幕并重新绘制一个圆圈。相反,我的代码决定它永远不会清除屏幕,而且它绝对不会绘制任何其他内容..我希望它在我按“e”时清除屏幕,然后绘制一个新圆圈。我有两个 java 文件。我只会为了任何可以帮助我的用户而发布相关代码 - 但如果需要,我会发布更多代码。

在我的 JOGLEventListener.java 文件的开头,我还声明了一个全局变量

//测试GLAutoDrawable 测试 = null;

JOGLEventListener.java

    @Override
public void display(GLAutoDrawable gLDrawable)
{
// Set a global variable to hold the gLDrawable
// May not need this?
test = gLDrawable;

GL2 gl = gLDrawable.getGL().getGL2();

gl.glClearColor(backrgb[0], 0, 1, 1);
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

backrgb[0]+=0.0005;
if (backrgb[0]> 1) backrgb[0] = 0;


// =============================================
// Draw my circle here
//
// =============================================
// =============================================
System.out.println("Drawing Circle..");
drawCircle(5.0f, 5.0f, 10.0f);

}

// Draw Circle
void drawCircle(float x, float y, float radius)
{
System.out.println("IN DRAWCIRCLE");
int i;
GL2 gl = test.getGL().getGL2();
int lineAmount = 100; //# of triangles used to draw circle
final
//GLfloat radius = 0.8f; //radius
float twicePi = (float) (2.0f * Math.PI);

gl.glBegin(gl.GL_LINE_LOOP);
for(i = 0; i <= lineAmount;i++) {
gl.glVertex2f(
x + (radius * (float)Math.cos(i * twicePi / lineAmount)),
y + (radius* (float)Math.sin(i * twicePi / lineAmount))
);
}
gl.glEnd();
}

@Override
public void keyTyped(KeyEvent e)
{
char key= e.getKeyChar();
System.out.printf("Key typed: %c\n", key);
GL2 gl = test.getGL().getGL2();
if(key == 'e')
{
// WHY ISNT THIS WORKING
// CLEAR THE SCREEN AND DRAW ME A NEW CIRCLE
gl.glClear( gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT );
gl.glLoadIdentity();
//test
float x = 100.0f;
float y = 100.0f;
float twicePi = (float) (2.0f * Math.PI);
float radius = 100f;

System.out.println("Draw Another Circle...");
gl.glBegin(gl.GL_LINE_LOOP);
for(int i = 0; i <= 360;i++)
{
gl.glVertex2f(
x + (radius * (float)Math.cos(i * twicePi / 360)),
y + (radius* (float)Math.sin(i * twicePi / 360))
);
}
gl.glEnd();
}

最佳答案

1) 那是deprecated OpenGL ,不要使用它

2) 不要将 gl 对象保存为一个全局值,始终从 drawableGLContext 获取它

3) 使用着色器程序进行渲染并使用顶点缓冲区来保存顶点位置。但首先,我建议您开始学习 OpenGL 的基础知识教程。或者,如果您想尽快让某些东西正常工作,请克隆此 hello triangle我的并开始实验

关于java - 如何使用Java清除openGL中的屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39493319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com