gpt4 book ai didi

qt - Qt中的OpenGL深度测试不起作用

转载 作者:行者123 更新时间:2023-12-01 11:42:16 24 4
gpt4 key购买 nike

我将格式设置为:

QGLFormat format = QGLFormat(QGL::DoubleBuffer | QGL::DepthBuffer);
setFormat(format);

在构造函数中。

然后在initializeGL中我设置depthTesting。
void VoxelEditor::initializeGL()
{
glClearDepth(2000.0); // Enables Clearing Of The Depth Buffer
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LESS); // The Type Of Depth Test To Do
glShadeModel(GL_SMOOTH); // Enables Smooth Color Shading
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations
}

在paintGL 中,我清除了深度缓冲区。
void VoxelEditor::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
draw();
}

我记得它曾经使用较少的顶点,所以可能是我使用了太多的深度缓冲区来处理(?)。
我有 32*32*32 体素,大部分时间都绘制了一半,所以是 98304 个四边形。

然而,深度测试仍然不起作用,并按执行顺序显示四边形。

最佳答案

so it might be that I'm using too many for the depthbuffer to handle(?).



深度缓冲区忽略了顶点。它所看到的只是传入的片段,不管有多少。

void VoxelEditor::initializeGL()
{
glClearDepth(2000.0); // Enables Clearing Of The Depth Buffer


此行不启用清算。它设置了深度缓冲区被清除的值。该值必须在 0…1 范围内。清除深度在归一化设备坐标中,即在应用模型 View 、投影和同质划分之后。默认值为 1。

    glEnable(GL_DEPTH_TEST);  // Enables Depth Testing
glDepthFunc(GL_LESS); // The Type Of Depth Test To Do
glShadeModel(GL_SMOOTH) // Enables Smooth Color Shading
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations


不,那不是它所做的。透视图只是一个线性变换,而且总是一样的。这意味着,可以以不同的方式对纹理坐标进行插值以提高质量。

}


我总是建议将这些调用放在绘图函数中,因为它们不会初始化任何东西。他们设置绘图状态。 OpenGL 是一个状态机,状态机的一个重要规则是,你要么跟踪它们的状态 无论何时要使用它,都必须将它们置于已知状态。

关于qt - Qt中的OpenGL深度测试不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9335435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com