立方体的底面未渲染 - 面剔除 OpenGL

问题描述 投票:0回答:1

我正在用 SFML 代替 GLFW 在 OpenGL C++ 中绘制立方体。立方体在没有面剔除的情况下被正确渲染,但在面剔除之后立方体的底面不可见。

我想要相机 - 立方体的正面被渲染,但即使相机面对它们,底面也不会被渲染。我的立方体顶点数据和纹理数据:

GLfloat vertices[] = {
        // Front face  //Texture Coordinates
        -1.0f, -1.0f,  1.0f,  0.0f, 1.0f,
        1.0f, -1.0f,  1.0f,  1.0f, 1.0f,
        1.0f,  1.0f,  1.0f,  1.0f, 0.0f,
        -1.0f,  1.0f,  1.0f,  0.0f, 0.0f,
        // Back face
        -1.0f, -1.0f, -1.0f,  1.0f, 1.0f,
        -1.0f,  1.0f, -1.0f,  1.0f, 0.0f,
        1.0f,  1.0f, -1.0f,  0.0f, 0.0f,
        1.0f, -1.0f, -1.0f,  0.0f, 1.0f,
        // Left face
        -1.0f, -1.0f, -1.0f,  0.0f, 0.0f,
        -1.0f, -1.0f,  1.0f,  1.0f, 0.0f,
        -1.0f,  1.0f,  1.0f,  1.0f, 1.0f,
        -1.0f,  1.0f, -1.0f,  0.0f, 1.0f,
        // Right face
        1.0f, -1.0f, -1.0f,  1.0f, 0.0f,
        1.0f,  1.0f, -1.0f,  1.0f, 1.0f,
        1.0f,  1.0f,  1.0f,  0.0f, 1.0f,
        1.0f, -1.0f,  1.0f,  0.0f, 0.0f,
        // Top face
        -1.0f,  1.0f, -1.0f,  0.0f, 1.0f,
        -1.0f,  1.0f,  1.0f,  1.0f, 1.0f,
        1.0f,  1.0f,  1.0f,  1.0f, 0.0f,
        1.0f,  1.0f, -1.0f,  0.0f, 0.0f,
        // Bottom face
        -1.0f, -1.0f, -1.0f, 1.0f, 0.0f,
        -1.0f, -1.0f,  1.0f, 0.0f, 0.0f,
        1.0f, -1.0f,  1.0f, 0.0f, 1.0f,
        1.0f, -1.0f, -1.0f, 1.0f, 1.0f
};

我的魔方指数数据:

GLuint indices[] = {
        // Front face
        0, 1, 2,
        2, 3, 0,
        // Back face
        4, 5, 6,
        6, 7, 4,
        // Left face
        8, 9, 10,
        10, 11, 8,
        // Right face
        12, 13, 14,
        14, 15, 12,
        // Top face
        16, 17, 18,
        18, 19, 16,
        // Bottom face
        20, 21, 22,
        22, 23, 20
};

我的脸剔除设置

//Face culling
glEnable(GL_CULL_FACE);
//Cull settings
glCullFace(GL_FRONT);
glFrontFace(GL_CW);

图像:

c++ sfml
1个回答
0
投票

按预期工作。

你的盒子的顶部和底部有按 CCW 顺序定义的顶点。

如果以 CW 顺序定义的顶点被认为是正面的,当您从上方看到盒子的顶部时,您看到的是启用了渲染的背面,这就是您看到盒子顶部的原因。

当您查看盒子下方的盒子底部时,您看不到那一侧,因为它被视为正面 - 渲染被禁用。

只需将盒子底部的索引顺序更改为 CW 顺序:

    // Bottom face
    21, 20, 23,
    21, 23, 22
© www.soinside.com 2019 - 2024. All rights reserved.