2015-12-15 99 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