Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使对象透明但仍显示纹理?_C++_Opengl_Textures_Glu - Fatal编程技术网

C++ 如何使对象透明但仍显示纹理?

C++ 如何使对象透明但仍显示纹理?,c++,opengl,textures,glu,C++,Opengl,Textures,Glu,我正在尝试在OpenGL中渲染模型。我在C++和OpenGL的第4天(是的,我很快就学会了),我在纹理方面有点停滞不前。 我的纹理alpha有点问题。在这张图片中,我有一个来自螺旋骑士的角色。正如你在他的头顶上看到的,有那些白色的部分 我已经启用了混合,并且我的混合函数设置为glBlendFunc(GL_SRC_ALPHA,GL_ONE_减去_SRC_ALPHA) 我在这里假设,这就是我问这个问题的原因,就是纹理透明度在工作,但是纹理后面的三角形仍然在显示 如何使这些三角形不可见但仍显示我的纹理

我正在尝试在OpenGL中渲染模型。我在C++和OpenGL的第4天(是的,我很快就学会了),我在纹理方面有点停滞不前。 我的纹理alpha有点问题。在这张图片中,我有一个来自螺旋骑士的角色。正如你在他的头顶上看到的,有那些白色的部分

我已经启用了混合,并且我的混合函数设置为
glBlendFunc(GL_SRC_ALPHA,GL_ONE_减去_SRC_ALPHA)

我在这里假设,这就是我问这个问题的原因,就是纹理透明度在工作,但是纹理后面的三角形仍然在显示

如何使这些三角形不可见但仍显示我的纹理


谢谢。

使用混合时需要做两件重要的事情:

  • 必须将基本体前后排序并按该顺序进行渲染(基于深度缓冲区的渲染器中的顺序无关透明度仍然是一个正在进行的研究主题)

  • 当使用纹理控制alpha通道时,您必须编写一个着色器,以某种方式将纹理的alpha值传递到生成的片段颜色,或者–如果您使用的是固定函数管道–必须使用GL_MODULATE texture env mode,或者将基本颜色alpha值设置为0的GL_贴花,或使用GL_替换


  • 没有“纹理后面的三角形”。德国劳埃德船级社没有;t绘制纹理,它绘制基本体。完全不清楚到底发生了什么(akoha对你的纹理有什么评价,你如何将纹理组合到最终的碎片颜色,等等)。您还应该知道,混合将需要以正确的顺序绘制基本体。在这个特殊的例子中,你甚至可以通过不使用混合来解决这个问题,而只是通过基于alpha的丢弃。你说“基于alpha的丢弃”。-我做了一些关于丢弃的研究,但是从我所读到的来看,它可能有点慢。有别的方法吗?我在谷歌上搜索了一些替代方法并启用了alpha测试,然后将alpha函数设置为
    glAlphaFunc(GL_更大,0.0)但这似乎不起作用。alpha测试已被弃用。现代方法是在着色器中丢弃。在这种情况下,“慢”的真正含义很难说清楚。您可能会退回到后期的深度测试,并得到一定程度的非均匀控制流。但是,作为回报,您可以获得订单独立性。至于任务2的第二部分,我知道
    glTexEnvi
    需要3个参数。在阅读之后,我继续并尝试根据该页面上的信息执行您所说的操作。我将我的内部格式设置为GL_RGBA(在
    glTexImage2D
    func中),并且我正在使用
    glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE),但这似乎不太管用。“我是不是遗漏了什么?@xantedragon:不看你的代码很难说。