Libgdx gl10.glLineWidth()

我有这一行:Gdx.gl10.glLineWidth(width); 现在,我打算绘制一条相当粗的线条,不幸的是,当我输入1或5这样的小值时,线条显然很小。 但是,一旦我超过像10这样的东西,它就不再变大了。 我在这些情况下传递直接值,因此,我认为GL有限制或者某种东西……我会是正确的吗? 这是我的代码:

Gdx.gl.glClearColor(0,0,0,1); Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); batch.setProjectionMatrix(cam.combined); batch.begin(); batch.draw(bg,0,0,WIDTH,HEIGHT); for(Spell a : spells){ a.draw(batch); } lc.draw(batch); batch.end(); //((ppux+ppuy)/2f)*4 Gdx.gl10.glLineWidth(50);//average and then say 1/4 a unit) renderer.setProjectionMatrix(cam.combined); renderer.begin(ShapeType.Line); lp.drawLines(renderer); renderer.end(); batch.begin(); lp.draw(batch); batch.end(); 

lp.drawLines(渲染器)调用以下内容(我只是调用set颜色,并绘制线条):

 renderer.setColor(1,1,1,1); Elem a = elems.get(spellcombo.get(0)); Vector2 last = new Vector2(ax(),ay()); for(int i = 1; i < spellcombo.size(); i++){ a = elems.get(spellcombo.get(i)); Vector2 cur = new Vector2(ax(),ay()); renderer.line(last.x, last.y, cur.x, cur.y); last = cur; } renderer.line(last.x,last.y,mx,my); Gdx.gl.glEnable(GL10.GL_BLEND); Gdx.gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); renderer.setColor(1, 0, 0, .2f); for(Elem e : elems){ int id = elems.indexOf(e); if(ComboManager.validSpell(spellcombo,id)) renderer.line(last.x,last.y,ex(),ey()); } 

截图:
将glLineWidth()设置为1的图像 将glLineWidth()设置为1的图像 glLineWidth()的图像设置为5 glLineWidth()的图像设置为5 glLineWidth()的图像设置为10 glLineWidth()的图像设置为10 glLineWidth()的图像设置为20 glLineWidth()的图像设置为20 glLineWidth()的图像设置为200 glLineWidth()的图像设置为200

我真的不知道如何解决,谷歌并没有特别有用。 谢谢!

在Libgdx中, Gdx.gl10对象是OpenGL 1.x API的包装器。 因此,调用所有(基本上)调用OpenGL ES(在Android上)或常规OpenGL(在桌面上)。 有时Java层会对API进行更改,但通常它是一个非常简单的映射。 (在桌面上,Libgdx尝试模拟ES变体,因此所提供的API仅包含与ES相关的API。)

OpenGL ES中的线条绘制支持是ES从常规OpenGL改变的地方。 两者都支持线宽,但在常规OpenGL中,限制似乎仅适用于消除锯齿线。

常规OpenGL

http://www.opengl.org/sdk/docs/man/xhtml/glLineWidth.xml

有一系列支持的线宽。 仅保证支持宽度1; 其他人依赖于实施。 要查询支持的宽度范围,请使用参数GL_ALIASED_LINE_WIDTH_RANGE调用glGet。

OpenGL ES

http://www.khronos.org/opengles/sdk/docs/man/xhtml/glLineWidth.xml

有一系列支持的线宽。 仅保证支持宽度1; 其他人依赖于实施。 要查询支持的宽度范围,请使用参数GL_ALIASED_LINE_WIDTH_RANGE调用glGet。

要查询Libgdx中的限制,请使用以下内容:

 int[] results = new int[1]; Gdx.gl10.glGetIntegerv(GL20.GL_ALIASED_LINE_WIDTH_RANGE, results, 0); 

所有这一切的结果是因为OpenGL ES上的线条图(宽度1.0除外)在不同的平台上有不同的运行时限制,你可能应该使用不同的方案(如矩形)来绘制胖线。

从libgdx 1.0开始,还有ShapeRenderer的rectLine方法可用。 看一个简单的例子。

 ShapeRenderer shapeRenderer = new ShapeRenderer(); shapeRenderer.begin(ShapeType.Filled); shapeRenderer.rectLine(x1, y1, x2, y2, width); shapeRenderer.end(); 

这似乎是现在绘制粗线的最简单方法。