gpt4 book ai didi

java - 如何停止 3D 转换为 2D 坐标,在另一侧创建 "ghost"坐标?

转载 作者:行者123 更新时间:2023-11-30 10:52:47 29 4
gpt4 key购买 nike

我目前正在将对象的 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

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

最佳答案

检查屏幕 z 值的符号 screenCoords.get(2)(look/front 是负 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;

关于java - 如何停止 3D 转换为 2D 坐标,在另一侧创建 "ghost"坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34288304/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com