我有一个flash应用程序,其中两个3d视图共享相同的Stage3DProxy,因为我需要一个在任何时候覆盖/绘制在另一个上。但是,它们似乎共享相同的3d空间/ z缓冲区(?)。
我的更新功能目前如下:
private function onEnterFrame(event : Event) : void {
stage3DProxy.clear();
away3DView.render();
away3DView2.render();
stage3DProxy.present();
}
显然,这本身还不够 - 我在某处读到了可以使用setDepthTest方法,例如:
stage3DProxy.context3D.setDepthTest(false, Context3DCompareMode.NEVER);
...在每个视图的render()
调用之间将其设置为不同的模式,但我并不清楚它是如何工作的,并且文档在实际上非常薄。我玩过,在渲染调用之间设置不同的东西,但没有快乐。
我可以找到设置Stage3DProxy的唯一例子是使用一个Away3D视图和两个椋鸟 - 这不是我想要的。我在他们的论坛上阅读了一条评论,其中说你必须在大约'其他地方'指定某些setDepthTest设置,但是没有详细说明它们的位置或者它们需要设置的位置,这听起来像是一个非常黑客的这应该是非常基本的东西!
如果有人可以提供帮助,我会非常感激,或者如果有人知道另一种方法可以做到这一点 - 强制执行特定的绘图顺序似乎应该是一项相对简单的任务但我发现没有任何有用的事情,我想要坚持使用Away3D,因为它是一个很好的API和功能集,但这是我当前项目的真正障碍!
提前致谢
答案 0 :(得分:2)
在年龄拖网之后,答案非常简单:
view3D.layeredView = true;
这将导致有问题的视图呈现在“顶部”。共享代理上的后续渲染仍将覆盖此,因此您需要考虑渲染顺序,但这正是我所需要的。
我简直难以置信,所有Stage3DProxy指南都谈到与Starling分享,而不是另一个View3D ...希望这能阻止其他人撕掉他们的头发!