我有这条线: Gdx.gl10.glLineWidth(宽度); 现在,我打算绘制一条相当粗的线条,不幸的是,当我输入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(a.x(),a.y());
for(int i = 1; i < spellcombo.size(); i++){
a = elems.get(spellcombo.get(i));
Vector2 cur = new Vector2(a.x(),a.y());
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,e.x(),e.y());
}
截图:
glLineWidth()的图像设置为1
glLineWidth()的图像设置为5
glLineWidth()的图像设置为10
glLineWidth()的图像设置为20
glLineWidth()的图像设置为200
我真的不知道如何修复,谷歌并不特别有帮助。 谢谢!
答案 0 :(得分:5)
从libgdx 1.0开始,还有ShapeRenderer's rectLine method可用。看一个简单的例子。
ShapeRenderer shapeRenderer = new ShapeRenderer();
shapeRenderer.begin(ShapeType.Filled);
shapeRenderer.rectLine(x1, y1, x2, y2, width);
shapeRenderer.end();
这似乎是现在绘制粗线的最简单方法。
答案 1 :(得分:3)
在Libgdx中,Gdx.gl10
对象是OpenGL 1.x API的包装器。因此,调用所有(基本上)调用OpenGL ES(在Android上)或常规OpenGL(在桌面上)。有时Java层会对API进行更改,但通常是一个非常简单的映射。 (在桌面上,Libgdx尝试模拟ES变体,因此所提供的API仅包含与ES相关的API。)
OpenGL ES中的线条绘制支持是ES从常规OpenGL改变的地方。两者都支持线宽,但在常规OpenGL中,限制似乎只适用于消除锯齿线。
http://www.opengl.org/sdk/docs/man/xhtml/glLineWidth.xml
支持的线宽范围。只保证宽度1 得到支持;其他人依赖于实施。查询 支持的宽度范围,使用参数调用glGet GL_ALIASED_LINE_WIDTH_RANGE。
http://www.khronos.org/opengles/sdk/docs/man/xhtml/glLineWidth.xml
支持的线宽范围。只保证宽度1 得到支持;其他人依赖于实施。查询 支持的宽度范围,使用参数调用glGet GL_ALIASED_LINE_WIDTH_RANGE。
要查询Libgdx中的限制,请使用以下内容:
int[] results = new int[1];
Gdx.gl10.glGetIntegerv(GL20.GL_ALIASED_LINE_WIDTH_RANGE, results, 0);
所有这一切的结果是,因为OpenGL ES上的线条图(宽度1.0除外)在不同的平台上有不同的运行时限制,你可能应该使用不同的方案(如矩形)来绘制胖线