试图将潜水艇部分淹没在水中
问题描述:
因此,我正在做一个JOGL项目,在该项目中,我正在绘制一艘可以升起/下沉并在地图中移动的潜艇 - 注意这张地图只是一个巨大的quad_strip。无论如何,我有下面的代码进行混合。试图将潜水艇部分淹没在水中
gl.glBlendFunc(GL2.GL_SRC_ALPHA, GL2.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL2.GL_BLEND);
gl.glDisable(GL2.GL_DEPTH_TEST);
gl.glColor4f(0.949f, 0.816f, 0.588f, 1f);
gridFloor.display(drawable);
submarine.setHeight(subHeight);
submarine.display(drawable);
gl.glColor4f(0.298f, 0.7333f, 0.909f, 0.04f);
gridSea.display(drawable);
gl.glFlush();
注意:gridfloor,submarine和gridsquare对象都是GLEventListners。
所以这一切都很好,很棒。当它打印时,我已经定位了潜艇在y = 2和y = 1.5时的海平面。所以这时的潜艇应该在水线之上。但这是我所取而代之的。
正如你可能会说,我对JOGL很陌生,任何帮助将大量赞赏。
编辑:这就是我想实现
答
当禁用深度测试,任何你绘制到屏幕绘制在什么是已经存在的顶部。这就是为什么水正在被吸引到潜艇上。
gl.glDisable(GL2.GL_DEPTH_TEST);
解决方案:不要禁用深度测试。
老师引用 - “通过启用混合和禁用深度测试,使海面 表面半透明。” -_-谢谢你,很喜欢 –
@RyanTurnbull:难道你的老师不会理解混合,在某个时刻和它一起苦苦挣扎,并且认为加入了深度测试功能的加成并不会显得完全错误?无论如何,正确的方法来渲染透明的东西是通过*深度测试__enabled __ *和*排序*混合几何*远到近*。 – datenwolf