Java OpenGL先画一条线,然后画一个正方形
我在管理我的代码和想象一个好的设计时遇到了问题。我想做的只是先画一条线,然后在线被渲染后,画正方形,使其部分重叠线,然后继续这样做 我创建了两个类,Java OpenGL先画一条线,然后画一个正方形,java,opengl,lwjgl,game-loop,Java,Opengl,Lwjgl,Game Loop,我在管理我的代码和想象一个好的设计时遇到了问题。我想做的只是先画一条线,然后在线被渲染后,画正方形,使其部分重叠线,然后继续这样做 我创建了两个类,行和正方形。我在主类中设置并绑定了VAO和VBO。在我的lines and squares类中,我只将数据传递到此缓冲区,并在其draw()方法中对VertexAttributePointer和GlDrawArrays进行适当的调用 在main类中有一个主游戏循环,它无限运行,直到用户关闭窗口。现在我要做的是调用Update()方法中的line和Sq
行
和正方形
。我在主类中设置并绑定了VAO和VBO。在我的lines and squares类中,我只将数据传递到此缓冲区,并在其draw()
方法中对VertexAttributePointer
和GlDrawArrays
进行适当的调用
在main类中有一个主游戏循环,它无限运行,直到用户关闭窗口。现在我要做的是调用Update()
方法中的line
和Squares
的draw()
方法。然后调用Render()
,它只交换缓冲区和轮询事件。基本上,草图是
while(window_close != true)
{
update();
render();
}
public void update()
{
GL11.glClearColor(0.2f,0.4f,0.3f, 1);
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
lines.draw(); // object of Lines class
squares.draw(); // object of Squares class
}
public void render()
{
swapbuffers();
}
但有一个问题,因为更新是在一个循环中,它会将行数据馈送到缓冲区,然后它会用1覆盖该数据。我希望它交替渲染线,然后是正方形。因此,我认为在每个类中都有一个标志。在draw()
方法提供数据之前,它们会检查渲染的是哪一个,然后相应地绘制,否则返回而不执行任何操作
此外,由于在Update()
开始时背景已清除,因此我需要绘制线条,渲染它,然后绘制正方形,并在清除背景之前进行渲染。我知道我能做到
while(window_close != true)
{
GL11.glClearColor(0.2f,0.4f,0.3f, 1);
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
lines.draw();
render();
squares.draw();
}
这没关系,但对于更大的项目来说,它会变得丑陋。我必须另外编写
render()
。到底是什么问题?你现在所做的是大多数人都做的我不知道。。我想一定有其他方法,这样在调用render()
之后我就不必做任何事情了,一切都由update()
Ahhh waitwait来管理,我很难理解问题出在哪里。你想要的是交替交换缓冲区?@fordcars-现在检查我原来的问题。最后一段代码就是我想要的。但是我想用另一种方式来做,这样所有对draw()
的调用都在update方法中。好吧,呃,你不应该有这个问题!我会尽量简短地解释它swapBuffers()
通常不会以这种方式执行任何操作。当您调用类似于glDrawArrays()
的任何函数时,OpenGL会将内容绘制到帧缓冲区中。因此,您可以画一条线,然后再画一个正方形,因为它只会修改形状实际所在的帧缓冲区(因此它会像您所希望的那样重叠)。然后,swapBuffers()
所做的就是逐像素地将帧缓冲区中的所有内容复制到屏幕上。