在 OpenGL 中,默认设置是:
- 坐标系 = 右手,有
+x->right, +y->up, +z->towards-viewer
. - 因此,围绕 z 的正向旋转会将 x 基向量移动到 y(逆时针)。
- 前面的多边形被定义为逆时针顶点。
- 背面的剔除通过以下方式实现:
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);
有没有其他人遇到过这个?快把我逼疯了...