Stage3D剔除混乱

时间:2011-12-30 08:15:26

标签: flash opengl stage3d

在OpenGL中,默认设置为:

  1. 协调系统=右手,+x->right, +y->up, +z->towards-viewer
  2. 因此,围绕z的正向旋转会将x基矢量移动到y(逆时针)。
  3. 前置多边形定义为CCW顶点。
  4. 通过以下方式剔除背面:
  5. 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);

    还有其他人遇到过这个吗?这让我疯了......

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

干杯,

沙恩