c++ - OpenGL - 深度缓冲区在渲染半透明立方体时会切掉不应出现的面
问题描述
我对 OpenGL 还很陌生,遇到了这个问题:我正在尝试渲染多个彼此内部的半透明立方体,而立方体背面的一些面刚刚被切掉。它还取决于我在立方体内部的位置(参见 gif)。
https://i.imgur.com/bL4U8BS.gifv
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, transparentTexture);
for (int i = 0; i < CacheSizeInfo.size(); ++i)
{
int totalCacheSize = CacheSizeInfo[i][0]* CacheSizeInfo[i][1]* CacheSizeInfo[i][2];
std::vector<float> Cachecolor = { CacheColorInfo[i][0], CacheColorInfo[i][1], CacheColorInfo[i][2]};
int cacheOffset = (renderIndex / totalCacheSize) * totalCacheSize;
mat4 translationMatrix = glm::translate(mat4(1.0f), modelMatrices[cacheOffset]);
glUniformMatrix4fv(glGetUniformLocation(shaderID, "translation"), 1, GL_FALSE, &translationMatrix[0][0]);
glUniform3fv(glGetUniformLocation(shaderID, "color"), 1, &Cachecolor[0]);
glBindVertexArray(CacheVAOInfo[i]);
glDrawArrays(GL_TRIANGLES, 0, CacheVertexCountInfo[i]);
glBindVertexArray(0);
}
}
mat4 translationMatrix = glm::mat4(1.0f);
glUniformMatrix4fv(glGetUniformLocation(shaderID, "translation"), 1, GL_FALSE, &translationMatrix[0][0]);
glUniform3fv(glGetUniformLocation(shaderID, "color"), 1, &matColor[0]);
glBindVertexArray(VAO_Matrix);
glDrawArrays(GL_TRIANGLES,0, mainMatSize*3);
glBindVertexArray(0);
首先,我启用深度测试并将其设置为 GL_LESS。然后我绑定透明纹理。之后,在 for 循环中,我渲染绿色矩阵,然后,在循环之外,白色矩阵。
解决方案
推荐阅读
- javascript - 将徽标放在导航栏上会影响导航栏上的整个文本
- ios - iPhone 11 上前置位置的默认 AVCaptureDevice 太“宽”
- android - Audio filnger 中的混音器线程是如何创建的,以及 app 和 audio flinger 混音器之间的映射是如何完成的?
- arrays - 线性代数可变自由度力向量的最佳和最有效格式?
- python - 如何将实例属性初始化为 numpy 数组?
- file - 使用 SharePlum for Sharepoint 下载文件
- linux - 如果匹配显示成功或失败,如何匹配文件中的语法
- javascript - 使用自动换行在 React 中渲染逗号分隔的链接
- c++ - 为什么我得到 nan 作为下面代码的输出?
- c++ - C++:模板的 IntelliSense 失败