我想丢弃多维数据集中不是正面的所有面,并且命令glEnable(GL_CULL_FACE);对我不起作用。这是我的立方体坐标

 private float cubeCoords[] = {
                -0.25f, 0.25f, 0.25f,   // front top left 0
                -0.25f, -0.25f, 0.25f,   // front bottom left 1
                0.25f, -0.25f, 0.25f,   // front bottom right 2
                0.25f, 0.25f, 0.25f,  // front top right 3
                -0.25f, 0.25f, -0.25f,   // back top left 4
                0.25f, 0.25f, -0.25f,   // back top right 5
                -0.25f, -0.25f, -0.25f,   // back bottom left 6
                0.25f, -0.25f, -0.25f};


而drawOrder为:

    private short drawOrder[] = {
            0, 1, 2, 0, 2, 3,//front
            0, 4, 5, 0, 5, 3, //Top
            0, 1, 6, 0, 6, 4, //left
            3, 2, 7, 3, 7 ,5, //right
            1, 2, 7, 1, 7, 6, //bottom
            4, 6, 7, 4, 7, 5};


当多维数据集旋转时,我可以在多维数据集中看到一个背景。

谢谢

最佳答案

使用Face Culling时,必须遵守缠绕顺序。如果启用了面剔除,则如果面的缠绕顺序为逆时针,则通过反面剔除背面。请参见glFrontFace尊敬的glCullFace

从左上角开始,按从左到右的顺序对顶点进行排序:

private float cubeCoords[] = {
    -0.25f,  0.25f,  0.25f, // front top    left  0
    -0.25f, -0.25f,  0.25f, // front bottom left  1
     0.25f, -0.25f,  0.25f, // front bottom right 2
     0.25f,  0.25f,  0.25f, // front top    right 3
    -0.25f,  0.25f, -0.25f, // back  top    left  4
    -0.25f, -0.25f, -0.25f, // back  bottom left  5
     0.25f, -0.25f, -0.25f, // back  top    right 6
     0.25f,  0.25f, -0.25f  // back  bottom right 7
};


正确的逆时针三角形面是:

private short drawOrder[] = {
    0, 1, 2,   0, 2, 3, // front
    4, 0, 3,   4, 3, 7, // top
    5, 1, 0,   5, 0, 4, // left
    7, 3, 2,   7, 2 ,6, // right
    1, 5, 6,   1, 6, 2, // bottom
    7, 6, 5,   7, 5, 4  // back
};


请注意,您必须以这种方式定义面,即从立方体(网格)的“外部”看时,缠绕顺序是逆时针方向。

10-04 18:12