在OpenGL中,默认设置为:
+x->right, +y->up, +z->towards-viewer
。glEnable(GL_CULL_FACE); glCullFace(GL_BACK);
好的,我们都知道这一点。在Flash 11/Molehill/Stage3d
中,默认值应该相同。
但是,如果我在步骤4中通过以下方式启用背面剔除:
c3d.setCulling(Context3DTriangleFace.BACK);
我的脸被剔除了。似乎默认的是Context3DTriangleFace.FRONT。我在OpenGL和Stage3D中创建了一个完整性检查案例。相同的顶点/索引列表,保留默认值,相同的正交投影矩阵,标识ModelView,但我必须将剔除设置为FRONT而不是BACK。
就好像Stage3D有不同的绕组默认值。也就是说,在引擎盖下,OpengGL被设置为: glFrontFace(GL_CW); 而不是OpenGL默认值: glFrontFace(GL_CCW);
还有其他人遇到过这个吗?这让我疯了......
答案 0 :(得分:0)
也许有一个正面顺时针,另一个逆时针。 glFrontFace(GL_CW);
或glFrontFace(GL_CCW);
答案 1 :(得分:0)
我打算在很久以前回答这个问题,但是忘记了,所以我现在就回答它。
我是对的,Stage3D认为前面是屏幕空间中的CW绕组,而不是OpenGL的CCW。我希望这可以帮助任何来自OpenGL的人。只需反转索引缓冲区索引的顺序,或将剔除模式更改为FRONT。我决定改变索引顺序。
干杯,
沙恩