当相机移动时,绘制顺序变化奇怪?

时间:2015-08-12 19:15:14

标签: java opengl libgdx

我目前正在开发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 = new ModelBatch(myshaderprovider);

(这个构造函数然后使用的排序是; https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/graphics/g3d/utils/DefaultRenderableSorter.java - 这对我来说是不可编辑的,但我可以覆盖并实现我自己的排序/比较,如果需要的话)

我的着色器在他们的开始方法中设置了以下内容;

context.setBlending(true,GL20.GL_SRC_ALPHA ,GL20.GL_ONE_MINUS_SRC_ALPHA);
context.setDepthTest(GL20.GL_LESS); 

这一切都正确吗? 还有哪些方面可能出错?

或者这是DefaultRenderableSorter.java的预期限制吗? (也就是说,靠近在一起的透明平面不会正确排序)

0 个答案:

没有答案