Libgdx gl10.glLineWidth()

时间:2013-05-21 23:01:43

标签: java libgdx

我有这条线: 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 Image with glLineWidth() set to 1 glLineWidth()的图像设置为5 Image with glLineWidth() set to 5 glLineWidth()的图像设置为10 Image with glLineWidth() set to 10 glLineWidth()的图像设置为20 Image with glLineWidth() set to 20 glLineWidth()的图像设置为200 Image with glLineWidth() set to 200

我真的不知道如何修复,谷歌并不特别有帮助。 谢谢!

2 个答案:

答案 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中,限制似乎只适用于消除锯齿线。

常规OpenGL

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

  

支持的线宽范围。只保证宽度1   得到支持;其他人依赖于实施。查询   支持的宽度范围,使用参数调用glGet   GL_ALIASED_LINE_WIDTH_RANGE。

OpenGL ES

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除外)在不同的平台上有不同的运行时限制,你可能应该使用不同的方案(如矩形)来绘制胖线