2015-12-15 69 views
2

我目前转换的三维坐标的对象,以二维坐标,然后绘制在他们2D文本(目前,对象名):如何停止3D转换为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

我怎样才能阻止这个问题?有什么方法可以检测到我是否正在远离它们而不渲染它们?

+0

@BeyelerStudios谢谢你,你的建议是正确的,它解决了这个问题。只是我期待的优雅解决方案! – Joehot200

回答

1

检查画面的Z值screenCoords.get(2)的符号(查看/前是负z方向):

... 
boolean result = GLU.gluProject((float) (x), (float) y, (float) (z), modelView, projection, viewport, screenCoords); 
if (result && screenCoords.get(2) < 0) { 
    return new int[] { (int) screenCoords.get(0), (int) screenCoords.get(1)}; 
} 
return null; 
+0

出于某种原因,如果它是积极的,它是*不*在相机的视野。无论如何,这个问题现在解决了,因为它的工作,我已经接受你的答案。感谢您的帮助。 – Joehot200