我有这条线:
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:字节码和二进制有什么区别? - javajava字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…
java:继承 - java有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…