0

在 OpenGL 中,默认设置是:

  1. 坐标系 = 右手,有+x->right, +y->up, +z->towards-viewer.
  2. 因此,围绕 z 的正向旋转会将 x 基向量移动到 y(逆时针)。
  3. 前面的多边形被定义为逆时针顶点。
  4. 背面的剔除通过以下方式实现:
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);

好的,我们都知道这一点。在 Flash11/Molehill/Stage3d中,默认值应该是相同的。

但是,如果我通过以下方式在步骤 4 中启用背面剔除:

c3d.setCulling(Context3DTriangleFace.BACK);

我的脸被剔除。似乎默认值为 Context3DTriangleFace.FRONT。我在 OpenGL 和 Stage3D 中创建了一个完整性检查案例,它们在其他方面是相同的。相同的顶点/索引列表,保留默认值,相同的正交投影矩阵,标识 ModelView,但我必须将剔除设置为 FRONT 而不是 BACK。

好像 Stage3D 有不同的绕线默认值。即,好像在引擎盖下,OpenGL 已设置为:glFrontFace(GL_CW); 而不是 OpenGLs 默认值:glFrontFace(GL_CCW);

有没有其他人遇到过这个?快把我逼疯了...

4

2 回答 2

0

也许一个有一个顺时针的正面,另一个是逆时针的。glFrontFace(GL_CW);或者glFrontFace(GL_CCW);

于 2011-12-30T12:04:10.350 回答
0

很久以前就想回答这个问题了,但是忘记了,所以我现在就回答它。

我是对的,Stage3D 认为正面是屏幕空间中的 CW 绕组,而不是 OpenGL 的 CCW。我希望这可以帮助任何来自 OpenGL 的人。只需颠倒索引缓冲区索引的顺序,或将剔除模式更改为 FRONT。我决定更改索引顺序。

干杯,

谢恩

于 2012-07-28T11:40:22.307 回答