gpt4 book ai didi

python - 在 PyOpenGL 中使纹理半透明

转载 作者:行者123 更新时间:2023-12-01 05:54:14 27 4
gpt4 key购买 nike

在我的场景中,我在球体内有一个立方体。我想将 RGB 纹理应用于球体并使其半透明。我可以导入纹理,将其应用到球体并使其半透明,但我没有得到我想要的结果。

我的混合函数是glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)

我的绘制方法如下:

def DrawGLScene():
rotation1 = 60
rotation2 = 60

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glEnable(GL_BLEND)
glLoadIdentity()
glTranslatef(0.0, 0.0, -8.0)
glRotatef(rotation1, 1.0, 0.0, 0.0)
glRotatef(rotation2, 0.0, 1.0, 0.0)
glColor4f(1.0,1.0,1.0,1.0)

glutSolidCube(2);
glEnable(GL_COLOR_MATERIAL)
glEnable(GL_TEXTURE_2D)
glBindTexture(GL_TEXTURE_2D,1)
glColor4f(1.0,1.0,1.0,0.3)
Q=gluNewQuadric()
gluQuadricNormals(Q, GL_SMOOTH)
gluQuadricTexture(Q, GL_TRUE)
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP)
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP)
gluSphere(Q, 2.35, 32, 16)
glDisable(GL_TEXTURE_2D)

glutSwapBuffers()

结果如下所示:

Cant see the back side of the sphere and artifacts on the sphere

似乎存在深度问题,因为我只能看到右下角部分球体的背面。然后,我设置 glDepthFunc(GL_LESS) 来绘制立方体,设置 glDepthFunc(GL_ALWAYS) 来绘制球体,结果是:

Can now see the back of the sphere THROUGH the cube

现在球体的背面通过立方体显示出来。

我已经为对象尝试了 glDepthFunc() 的多种组合,但没有成功。问题是否与我处理深度、混合或其他问题的方式有关?

编辑:

在第一个示例中使用 glEnable(GL_CULL_FACE)glCullFace(GL_BACK) 给出了以下内容,但仍然不正确,因为现在您看不到球体的背面完全没有。

with culling enabled

最佳答案

请记住,混合和深度测试不能混为一谈。在进行混合时,您始终必须手动将几何体从远到近排序。通用顺序独立透明度在光栅化器中仍然是一个很大程度上 Unresolved 问题。

<小时/>

编辑:Op 已经设置了混合函数。您必须设置混合函数。默认的是 glBlendFunc(GL_ONE, GL_ZERO) 这肯定不是你想要的。您很可能需要 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 用于常规 Alpha channel 纹理,或 glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) 用于预乘 Alpha 纹理。

关于python - 在 PyOpenGL 中使纹理半透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13248023/

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