OpenGL三维模型透明度问题

OpenGL三维模型透明度问题,opengl,textures,blender,Opengl,Textures,Blender,我最近使用ASIMP将Blender中制作的3D模型导入OpenGL。虽然所有的几何体都很好,但我注意到一些透明平面(星形)在OpenGL中没有正确渲染 OpenGL似乎感觉到该平面是透明的,然后忘记在其后面绘制任何模型。旋转视图时,平面(星形)的“透明”部分会不断更改纹理 此外,她右手拿着的模特儿的手杖也从纹理中应用了透明度。当它与她的腿相交时,它的效果似乎与明星一样,几乎像是一些混乱的背面剔除 作为参考,我已确保: 背面消隐已禁用 PNG纹理具有透明背景 Alpha混合已启用 同样,第一

我最近使用ASIMP将Blender中制作的3D模型导入OpenGL。虽然所有的几何体都很好,但我注意到一些透明平面(星形)在OpenGL中没有正确渲染

OpenGL似乎感觉到该平面是透明的,然后忘记在其后面绘制任何模型。旋转视图时,平面(星形)的“透明”部分会不断更改纹理

此外,她右手拿着的模特儿的手杖也从纹理中应用了透明度。当它与她的腿相交时,它的效果似乎与明星一样,几乎像是一些混乱的背面剔除

作为参考,我已确保:

  • 背面消隐已禁用
  • PNG纹理具有透明背景
  • Alpha混合已启用
同样,第一张和第三张图片来自Assimp模型查看器,但在我的OpenGL程序中也会出现相同的结果

我的OpenGL纹理由以下程序加载:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, surface->w, surface->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, surface->pixels);
我的片段着色器如下所示:

#version 130

in vec2 texcoord;
uniform sampler2D textureSample;

void main()
{
    gl_FragData[0] = texture(textureSample, texcoord).aaaa * texture(textureSample, texcoord);
}
我的混合/深度是:

glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDepthFunc(GL_LEQUAL);
知道有什么问题吗


透明度取决于顺序,因此您需要先渲染不透明曲面,然后按从后到前的顺序渲染透明曲面。另请参见“谢谢”以获取信息。我做了一些研究,看起来有一个技巧,在透明对象上禁用深度缓冲区写入(glDepthMask(GL_FALSE))并在不排序的情况下绘制。这显然比对每个透明面进行排序快得多。你知道这种技术有什么限制吗?@lzman:是的,它会产生错误的结果。