libgdx gl10.glLineWidth() - java

我有这条线:
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(renderer)调用以下内容(我只调用设置颜色并绘制线条):

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的图像

我真的不知道该如何解决,而Google并不是特别有用。
谢谢!

参考方案

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

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

如何使用libgdx assetmanager正确加载纹理 - java

这是将纹理正确加载到AssetManager中的方式吗?Texture tex; AssetManager manager = new AssetManager(); manager.load("menu/bg.png",Texture.class); tex = manager.get("menu/bg.png",T…

将libgdx项目导入eclipse时出错 - java

我遵循了libgdx项目的设置,当我将项目导入eclipse时,出现了这些错误,没有运气寻找修补程序。The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files MainActivity.java /Spellcast…

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…