试图混合部分淹没在水中的潜艇
Trying to blend a submarine partially submerged in water
所以我正在做一个 JOGL 项目,其中我正在绘制一艘可以 rise/sink 并在地图上移动的潜艇,- 注意这张地图只是一个巨大的 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);
解决方案:不要禁用深度测试。
所以我正在做一个 JOGL 项目,其中我正在绘制一艘可以 rise/sink 并在地图上移动的潜艇,- 注意这张地图只是一个巨大的 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);
解决方案:不要禁用深度测试。