试图混合部分淹没在水中的潜艇

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);

解决方案:不要禁用深度测试。