我目前正在将对象的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;
}
这可以正常工作。名称已成功放置在对象上方。
问题在于,如果我向相反的方向看,我会看到"鬼"另一边的名字:
如何解决此问题?有什么方法可以检测我是否远离它们而不是渲染它们?
答案 0 :(得分:1)
检查屏幕的z值[{1}}的符号(外观/前面是负z方向):
screenCoords.get(2)