我正在Stage3D制作一个3D太空游戏,并希望在所有其他物体后面绘制一个星球。我认为我遇到的问题是所涉及的距离非常高。如果我的星星真的远远超过其他物体,我必须将它们缩放到不能正确渲染的程度 - 超过一定大小时,脸部似乎会闪烁。这也发生在我的行星网格上,当缩放到它们必要的大小(12000-100000单位)时。 我在平面纹理上渲染星星,指向面对镜头。只要它们没有放大太多,它们就可以很好地呈现,尽管显然在更远的其他物体前面。 我已经尝试了所有方式的depthTestModes(Context3DCompareMode.LESS,Context3DCompareMode.GREATER和所有其他方法),并结合在z缓冲区中包含和排除网格,只有在没有其他像素存在于星形的情况下才能渲染星星出现,没有运气。 是否有人知道如何实现这一点 - 或者更好的是,知道为什么,超过一定大小的网格不能正常渲染?是否存在我不知道的任意上限?
答案 0 :(得分:1)
我不知道Stage3D,我在这里用OpenGL语言说话,但绘制背景/天空盒的常用方法是绘制背景近距离,不远处,首先绘制背景,然后禁用深度在绘制背景时缓冲写入(如果它本身不需要深度缓冲)或者在绘制背景之后和常规场景之前清除深度缓冲区。
你的行星闪烁可能是由于缺乏深度缓冲分辨率;如果是这样,你必须在
之间做出选择答案 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就可以了!您的常规深度测试将起作用。