OpenGL面剔除未按预期工作[已关闭]

szqfcxe2  于 2023-01-25  发布在  其他
关注(0)|答案(1)|浏览(147)

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
18小时前关门了。
Improve this question
当绘制多个正方形面时,其他面后面的面仍在绘制中,但这只发生在正方形的左边。这只发生在左边和右边的正方形都正确绘制时
working
not working
生成正方形的代码

float x = 0.5f + offsetX;
    float y = 0.5f + offsetY;
    float z = 0.5f + offsetZ;

    float nx = x - 1.0f;
    float ny = y - 1.0f;
    float nz = z - 1.0f;

    float vertices[] = {
        nx, ny, nz,  0.0f, 0.0f, // bottom-left
         x, ny, nz,  1.0f, 0.0f, // bottom-right    
         x,  y, nz,  1.0f, 1.0f, // top-right              
         x,  y, nz,  1.0f, 1.0f, // top-right
        nx,  y, nz,  0.0f, 1.0f, // top-left
        nx, ny, nz,  0.0f, 0.0f, // bottom-left 
    };

    for (float face : vertices) {
    vetexData.push_back(face);
    }

我使用glClear(GL_COLOR_BUFFER_BIT)重置每一帧的深度缓冲区|GL_深度_缓冲区_位);
我尝试了所有不同的正面模式(GL_FRONT/GL_BACK),我启用了深度缓冲区

dgtucam1

dgtucam11#

你好像混淆了两个概念。
1.面剔除的启用方式如下:

glCullFace(GL_BACK); //< or GL_BACK
glEnable(GL_CULL_FACE);

这将删除背向您的面 (如果使用GL_FRONT,则为朝向您的面)
1.深度测试需要深度缓冲区...

// At initialisation time, you MUST have requested your context 
// to create a depth buffer, e.g. passing GLUT_DEPTH 
// to glutInitDisplayMode (if you are using glut). 

// at the start of each frame, clear the depth buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// If you need to modify the depth func (you probably don't need to!)
glDepthFunc(GL_LESS);

// And then enable depth testing prior to rendering your geo with:
glEnable(GL_DEPTH_TEST);

这将对绘制的每个三角形执行每个像素的深度测试。我假设您要进行的是深度测试。如果您调用了glEnable(GL_DEPTH_TEST)但没有任何效果,则需要在初始化OpenGL上下文时指定深度缓冲区。

相关问题