你能在同一点渲染两个带透明度的四边形吗?

时间:2009-07-16 16:22:40

标签: opengl jogl

我正在学习如何使用JOGL和OpenGL来渲染纹理映射的四边形。我有一个测试程序和一个测试四元组,我想出了如何启用GL_BLEND以便我可以指定一个顶点的alpha值来制作一个带有一种渐变的四边形...但是现在我希望这显示到在同一位置的另一个纹理四边形。

绘制两个具有相同顶点位置的四边形不起作用,它只渲染第一个四边形。这是可能的,或者我是否需要基于我想要的基本上构建自定义纹理然后用这个纹理绘制一个四边形?我本来希望在这种情况下利用混合......

3 个答案:

答案 0 :(得分:2)

看一下你正在使用的glDepthFunc,也许你正在使用GL_LESS / GL_GREATER,如果你使用的是GL_LEQUAL / GL_GEQUAL,它可以正常工作

答案 1 :(得分:0)

很难弄清楚你究竟想要实现什么,但这是一次尝试

要使透明度在OpenGL中正常工作,您需要从最远到最近的相机绘制多边形。如果你的场景是静态的,这肯定是你可以做的。但如果它正在旋转和移动,那么这通常是不可行的,因为你必须为每一帧排序多边形。

有关详细信息,请参阅此常见问题解答页面:
http://www.opengl.org/resources/faq/technical/transparency.htm

答案 2 :(得分:0)

对于Alpha混合,渲染器在渲染透明对象时混合当前透明对象后面的所有颜色(从摄像机的角度来看)。如果首先渲染透明对象,则它后面没有任何东西可以混合。如果它被渲染成第二个,它将有一些东西可以与它混合。

首先尝试渲染不透明四边形,然后渲染透明四边形。另外,请确保您的不透明四边形稍微落后于透明四边形(相对于相机),因此您不会获得z缓冲条纹。