如何将3D转换停止到2D坐标创建" ghost"坐标在另一边?

时间:2015-12-15 11:41:07

标签: java opengl lwjgl

我目前正在将对象的3D坐标转换为2D坐标,然后在它们上面绘制2D文本(此时,对象名称):

public static int[] getScreenCoords(double x, double y, double z) {
    FloatBuffer screenCoords = BufferUtils.createFloatBuffer(4);
    IntBuffer viewport = BufferUtils.createIntBuffer(16);
    FloatBuffer modelView = BufferUtils.createFloatBuffer(16);
    FloatBuffer projection = BufferUtils.createFloatBuffer(16);
    GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, modelView);
    GL11.glGetFloat(GL11.GL_PROJECTION_MATRIX, projection);
    GL11.glGetInteger(GL11.GL_VIEWPORT, viewport);
    boolean result = GLU.gluProject((float) (x), (float) y, (float) (z), modelView, projection, viewport, screenCoords);
    if (result) {
        return new int[] { (int) screenCoords.get(0), (int) screenCoords.get(1)};
    }
    return null;
}

这可以正常工作。名称已成功放置在对象上方。

enter image description here

问题在于,如果我向相反的方向看,我会看到"鬼"另一边的名字: enter image description here

如何解决此问题?有什么方法可以检测我是否远离它们而不是渲染它们?

1 个答案:

答案 0 :(得分:1)

检查屏幕的z值[{1}}的符号(外观/前面是负z方向):

screenCoords.get(2)