Stage3D可以在所有其他物体后面绘制物体,而不管实际距离是多少?

时间:2012-11-23 16:21:53

标签: actionscript-3 stage3d depth-testing

我正在Stage3D制作一个3D太空游戏,并希望在所有其他物体后面绘制一个星球。我认为我遇到的问题是所涉及的距离非常高。如果我的星星真的远远超过其他物体,我必须将它们缩放到不能正确渲染的程度 - 超过一定大小时,脸部似乎会闪烁。这也发生在我的行星网格上,当缩放到它们必要的大小(12000-100000单位)时。 我在平面纹理上渲染星星,指向面对镜头。只要它们没有放大太多,它们就可以很好地呈现,尽管显然在更远的其他物体前面。 我已经尝试了所有方式的depthTestModes(Context3DCompareMode.LESS,Context3DCompareMode.GREATER和所有其他方法),并结合在z缓冲区中包含和排除网格,只有在没有其他像素存在于星形的情况下才能渲染星星出现,没有运气。 是否有人知道如何实现这一点 - 或者更好的是,知道为什么,超过一定大小的网格不能正常渲染?是否存在我不知道的任意上限?

3 个答案:

答案 0 :(得分:1)

我不知道Stage3D,我在这里用OpenGL语言说话,但绘制背景/天空盒的常用方法是绘制背景近距离,不远处,首先绘制背景,然后禁用深度在绘制背景时缓冲写入(如果它本身不需要深度缓冲)或者在绘制背景之后和常规场景之前清除深度缓冲区

你的行星闪烁可能是由于缺乏深度缓冲分辨率;如果是这样,你必须在

之间做出选择
  1. 将物体拉近相机,
  2. 移动相机平截头体近平面更远或远平面更近(这将增加整个场景的深度缓冲分辨率),或
  3. 在相互排斥的深度范围内多次渲染场景(这称为深度剥离)。

答案 1 :(得分:0)

你应该使用八哥。它可以工作

http://www.adobe.com/devnet/flashplayer/articles/away3d-starling-interoperation.html http://www.flare3d.com/blog/2012/07/24/flare3d-2-5-starling-integration/

答案 2 :(得分:0)

您必须查看投影和顶点着色器输出的完成方式。 顶点着色器输出有四个分量:x,y,z,w。 由此,计算像素坐标:

x'= x / w

y'= y / w

z'= z / w

z'最终出现在z缓冲区中。 因此,只需将z = w *值放在顶点着色器的末尾,就可以输出任何常量值。只需输入值= .999就可以了!您的常规深度测试将起作用。