Libgdx gl10.glLineWidth()

csg*_*000 7 java libgdx

我有这一行: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();
Run Code Online (Sandbox Code Playgroud)

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());
    }
Run Code Online (Sandbox Code Playgroud)

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

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

don*_*uxx 5

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

ShapeRenderer shapeRenderer = new ShapeRenderer();
shapeRenderer.begin(ShapeType.Filled);
shapeRenderer.rectLine(x1, y1, x2, y2, width);
shapeRenderer.end();
Run Code Online (Sandbox Code Playgroud)

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


P.T*_*.T. 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;其他取决于实施。要查询支持的宽度范围,请使用参数 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); 
Run Code Online (Sandbox Code Playgroud)

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