回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>在我的场景中,我有一个球体内的立方体。我想应用一个RGB纹理到一个球体,使其半透明。我可以导入纹理,将其应用到球体并使其半透明,但我没有得到我想要的结果。在</p>
<p>我的混合函数是<code>glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)</code></p>
<p>我的画法如下:</p>
<pre><code>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()
</code></pre>
<p>结果如下:</p>
<p><img src="https://i.stack.imgur.com/EmC5m.png" alt="Cant see the back side of the sphere and artifacts on the sphere"/></p>
<p>似乎有深度问题,因为我只能在右下角看到球体的背面。然后,我将glDepthFunc(GL_LESS)设置为绘制立方体,并将glDepthFunc(GL_ALWAYS)设置为绘制球体,结果是:</p>
<p><img src="https://i.stack.imgur.com/itKig.png" alt="Can now see the back of the sphere THROUGH the cube"/></p>
<p>现在球体的背面通过立方体显示出来。在</p>
<p>我尝试了多个glDepthFunc()组合来处理对象,但都没有用。问题是关于我如何处理深度,混合还是其他什么?在</p>
<p>编辑:</p>
<p>在第一个例子中使用<code>glEnable(GL_CULL_FACE)</code>和<code>glCullFace(GL_BACK)</code>给了我以下仍然是不正确的,因为现在你根本看不到球体的背面。在</p>
<p><img src="https://i.stack.imgur.com/DLv4M.png" alt="with culling enabled"/></p>