随着相机的移动,java绘图顺序会发生奇怪的变化?
我目前正在libgdx中开发一个3D gui系统,目标是 对于任何想要在应用程序中使用真正3d界面的人来说,这是一个非常有用的库。(即,从模型实例构造的接口)
这意味着在很多情况下,透明对象会重叠
例如,容器中的标签对象。标签有一个距离场着色器(工作正常),容器有一个轮廓矩形着色器(工作正常)。两个着色器都有透明或半透明背景。 标签稍微在容器的前面,并与它的位置/移动相关联(也很好地工作)
但是,根据相机的位置,标签背景会从正确的透明变为遮蔽背景。 我猜这是什么提款单问题
请看下面的视频,看看它与摄像机运动的关系
http://youtu.be/3aADY3_vjV4(更新视频-更清晰地显示透明度)
(很抱歉发布了一段视频而不是图片,但我认为它更好地显示了问题是如何随着运动而变化的)
我首先移动相机,你可以看到顺序随着位置的变化而变化。屏幕上似乎有一半的变化。 我还将相机转向靠近末端的一侧,这样可以看到标签(距离场着色器)位于容器(矩形着色器)上方
这两种材质都有这样的混合属性集
Material material = new Material(ICON_MATERIAL,
new GlowingSquareShader.GlowingSquareAttribute(1f,DefaultColour,Color.WHITE),
new BlendingAttribute(true,GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA,1.0f));
我的modelbatch只是使用默认排序
modelBatch = new ModelBatch(myshaderprovider);
(该构造函数随后使用的排序为:; https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/graphics/g3d/utils/DefaultRenderableSorter.java -这是我无法编辑的,但如果需要,我可以覆盖并实现我自己的排序/比较)
我的着色器在其begin方法中设置了以下内容:
context.setBlending(true,GL20.GL_SRC_ALPHA ,GL20.GL_ONE_MINUS_SRC_ALPHA);
context.setDepthTest(GL20.GL_LESS);
这些都对吗? 还有哪些方面可能出现问题
或者这是DefaultRenderableSorter的预期限制。JAVA(也就是说,靠在一起的透明平面无法正确排序)
共 (0) 个答案