有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

随着相机的移动,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) 个答案