我在管理代码和想象一个好的设计时遇到了问题。我想做的只是首先绘制一条线,然后在渲染线之后,绘制正方形,使其与线部分重叠,然后继续这样做。
我创建了2个类Lines
和Squares
。我在主类中设置并绑定了VAO和VBO。在我的行和正方形类中,我只将数据传递到此缓冲区,并在VertexAttribPointer
方法中对GlDrawArrays
和draw()
进行适当的调用。
在主类中有一个主游戏循环无限运行,直到用户关闭窗口。现在我要做的是在draw()
方法中调用Lines
和Squares
的{{1}}方法。在调用此Update()
之后,它仅交换缓冲区并轮询事件。基本上粗略的草图是......
Render()
但是有一个问题,因为更新处于循环中它会将行数据提供给缓冲区然后它将用方块1覆盖该数据。我想让它交替,即渲染线,然后是方形。因此我想在每个班级里面都有一面旗帜。在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();
}
方法提供数据之前,他们会检查哪一个已经渲染,然后相应地绘制,否则返回并且什么也不做。
此外,因为在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();
}
。