在使用QtOpenGL加载OBJ模型时,会有多余图像,深度缓存也开了,为什么会这样
核心渲染代码:
```c++
program->setUniformValue("MVPMatrix", MVP);
program->setUniformValue("MVMatrix", MV);
program->setUniformValue("NormalMatrix", NormalMatrix);
program->setUniformValueArray("directionLightAmbi", ambients.data(), 2);
program->setUniformValueArray("DirectionLightColors", colors.data(), 2);
program->setUniformValueArray("DirectionLightDirections", diretions.data(), 2);
program->setUniformValue("DirectionLightCount", dls.count());
program->setUniformValue("EyeDirection", camera.eye - camera.center);
program->setUniformValueArray("HalfVectors", halfVectors.data(), 1);
program->setUniformValueArray("ca", ca.data(), 2, 1);
program->setUniformValueArray("la", la.data(), 2, 1);
program->setUniformValueArray("qa", qa.data(), 2, 1);
program->setUniformValueArray("PointLightColor", plcolors.data(), 2);
program->setUniformValueArray("PointLightPosition", positions.data(), 2);
program->setUniformValueArray("PointLightAmbient", plambients.data(), 2);
program->setUniformValue("PointLightCount", pls.count());
program->setUniformValue("strength", 5);
program->writeMaterial(mesh.m[i]);// 自定义的一个函数
program->setAttributeBuffer(0, GL_FLOAT, 0, 3, 0);
program->setAttributeBuffer(1, GL_FLOAT, 240 * sizeof(Data3D), 3, 0);
program->enableAttributeArray(0);
program->enableAttributeArray(1);
int j;
for (j = 0; j < mesh.vertex[i].count(); j += 240) {
VBO.allocate(mesh.vertex[i].mid(j,240).data(),
480 * sizeof(Data3D));
VBO.write(240 * sizeof(Data3D),
mesh.normals[i].mid(j,240).data(),
240 * sizeof(Data3D));
glDrawArrays(GL_TRIANGLES, 0, 240);
}
if (mesh.vertex[i].count() % 240 != 0) {
int c = mesh.vertex[i].count();
VBO.allocate(mesh.vertex[i].mid(c/240*240, c%240).data(),
2*(c%240) * sizeof(Data3D));
VBO.write(c%240 * sizeof(Data3D),
mesh.normals[i].mid(c/240*240, c%240).data(),
c%240 * sizeof(Data3D));
glDrawArrays(GL_TRIANGLES, 0, c%240);
}
原始模型:

加载,渲染后得到:
