1

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

绘制具有相同顶点位置的两个四边形不起作用,它只渲染第一个四边形。那么这是可能的,还是我需要根据我想要的内容即时构建一个自定义纹理,然后用这个纹理绘制一个四边形?我真的希望在这种情况下利用混合的优势......

4

3 回答 3

2

看看你正在使用哪个 glDepthFunc,也许你正在使用GL_LESS/GL_GREATER如果你正在使用它可能会工作GL_LEQUAL/ GL_GEQUAL

于 2009-07-16T17:09:06.090 回答
0

很难弄清楚您到底想达到什么目标,但这是一个尝试

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

更多信息可以在这个常见问题页面中找到:
http ://www.opengl.org/resources/faq/technical/transparency.htm

于 2009-07-16T16:49:18.563 回答
0

对于 alpha 混合,渲染器在渲染透明对象时混合当前透明对象后面的所有颜色(从相机的角度来看)。如果先渲染透明对象,则其后面没有可混合的对象。如果它是第二个渲染的,它将有一些可以与之混合的东西。

尝试先渲染不透明的四边形,然后再渲染透明的四边形。另外,请确保您的不透明四边形稍微落后于透明四边形(相对于相机),这样您就不会出现 z 缓冲区条纹。

于 2009-07-16T16:55:24.403 回答