2

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

4

3 回答 3

1

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

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

  1. 将物体拉近相机,
  2. 将相机平截头体靠近平面移动得更远或更靠近平面(这将增加整个场景的深度缓冲区分辨率),或者
  3. 在互斥深度范围内多次渲染场景(这称为深度剥离)。
于 2012-11-23T17:11:18.217 回答
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 /

于 2012-11-27T15:03:43.340 回答
0

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

x' = x/w

y' = y/w

z' = z/w

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

于 2012-11-29T07:21:37.653 回答