Libgdx opengl绘制线条示例

时间:2016-03-18 15:31:56

标签: java opengl libgdx

我可以问一下如何在libgdx中使用opengl绘制三条未连接的非正交线?我们非常感谢代码片段。 我搜索了很多,找到了一些例子(三角形)here,但它标记为过时并使用网格。

Opengl教程说我可以写一下这句话:

glBegin(GL_LINES);
    glVertex2f(.25,0.25);
    glVertex2f(.75,.75);
glEnd();

但我如何从libgdx调用此代码?

是否可以在没有网格和着色器的情况下绘制线条?

当我将此代码写入着色器并通过ShaderProgram()加载它时,即使使用着色器,它也只会出现编译错误。

void main()
{
        glVertex2f(.25,0.25);
        glVertex2f(.75,.75);
}

所以,虽然opengl教程说我可以调用这个glVertex2f(.25,0.25),但我不能从着色器中做到这一点。

Lwjgl教程在某种程度上引用了libgdx,比如herehere,但是代码在libgdx中没有用[方法batch.draw(纹理,x,y,宽度,厚度),因此没有在libgdx]。

ShapeRenderer对我的用例来说太慢了。 从1x1 px纹理渲染线听起来很合理,但如果我只能从libgdx进行上面的opengl调用,那就更好了。谢谢。

UPD:我看到可以通过Gdx.gl.xxx()引用opengl方法,但此处不存在Gdx.gl.glVertex2f()

1 个答案:

答案 0 :(得分:2)

LibGDX无法在没有着色器和网格物体的情况下绘制任何内容(从版本1.0开始,当OpenGL ES 1.0支持被删除时),但是大多数绘图类都有内置的默认着色器并使用幕后的网格,所以你不需要不得不担心他们。

由于LibGDX已经放弃了对OpenGL ES 1.0的支持,因此您也无法调用glVertex2f等已弃用的函数。 (如果您认为可以从顶点或片段着色器中调用OpenGL函数,则会误解着色器的用途。)您链接的三角形教程已过时,因为它不使用现在需要的着色器。

我不确定你如何确定ShapeRenderer对你的目的来说太慢了。如果你打算让你的线移动,或者你没有从头到尾永久地连接长线组,那么ShapeRenderer就可以尽可能快地进行优化。

如果您的线条没有移动,或者您有许多永久链接的长链线,那么可能通过自己使用Mesh和ShaderProgram类来提高速度。如果您不熟悉Meshes的工作原理,这有点复杂。你需要构造一个Mesh(如果线不移动则将其设置为静态)和顶点数组(如果你有许多永久端连接的线链,则需要索引数组)。您还需要为ShaderProgram编写着色器。那么绘制东西的典型流程是:

//modify the elements of the vertex array as desired to move the lines around.

mesh.setVertices(vertices);
shaderProgram.begin();
shaderProgram.setUniformMatrix("u_projModelView", camera.combined);
mesh.render(shaderProgram, GL20.GL_LINES);
shaderProgram.end();