Text libgdx通过项目绘制两次文本?

Text libgdx通过项目绘制两次文本?,text,3d,libgdx,2d,draw,Text,3d,Libgdx,2d,Draw,我试图用libgdx的camera.project函数为我的3D世界对象绘制2D文本,但遇到了一个奇怪的问题 见下图: 正如你在图片中看到的,图片1中一切都很好,但是当我转180度时,球的名字(代号1)也在绘制空白空间(图片2)。我不知道问题出在哪里,经过几个小时的思考,我决定在这里提问。 请帮帮我 我的代码是: public static void drawNames(){ TheGame.spriteBatch.begin(); for(int i = 0; i <

我试图用libgdx的camera.project函数为我的3D世界对象绘制2D文本,但遇到了一个奇怪的问题

见下图:

正如你在图片中看到的,图片1中一切都很好,但是当我转180度时,球的名字(代号1)也在绘制空白空间(图片2)。我不知道问题出在哪里,经过几个小时的思考,我决定在这里提问。 请帮帮我

我的代码是:

public static void drawNames(){
    TheGame.spriteBatch.begin();
    for(int i = 0; i < TheGame.playerMap.size; i++){
        Player ply = TheGame.playerMap.getValueAt(i);
        if(!ply.isAlive)
            continue;
        TheGame.tmpVec.set(ply.getPos().x, ply.getPos().y, ply.getPos().z);
        TheGame.cam.project(TheGame.tmpVec);
        TheGame.fontArialM.draw(TheGame.spriteBatch, ply.name, TheGame.tmpVec.x, TheGame.tmpVec.y, 0, Align.center, false);
    }
    TheGame.spriteBatch.end();
}
publicstaticvoiddrawnames(){
TheGame.spriteBatch.begin();
for(int i=0;i
这是因为如果你在相机后面投射一些东西,它仍然可以通过
投射方法获得有效的屏幕坐标。
考虑下面两个打印两个世界坐标的屏幕坐标< /P>
        PerspectiveCamera camera = new PerspectiveCamera(60, 800, 600);
        camera.position.set(0, 0, -10);
        camera.lookAt(0, 0, 0);
        camera.update();

        Vector3 temp = new Vector3();
        Vector3 p1 = new Vector3(1, 0, 10); // This is in front of the camera, slightly to the right
        Vector3 p2 = new Vector3(0, 0, -100); // This is behind of the camera

        camera.project(temp.set(p1));
        System.out.println("p1 is at screen " + temp);
        if (camera.frustum.pointInFrustum(p1))
            System.out.println("p1 is visible to the camera");
        else
            System.out.println("p1 is not visible to the camera");

        camera.project(temp.set(p2));
        System.out.println("p2 is at screen " + temp);
        if (camera.frustum.pointInFrustum(p2))
            System.out.println("p2 is visible to the camera");
        else
            System.out.println("p2 is not visible to the camera");
在代码中,在渲染文本之前,需要检查
ply.getPos()
向量是否对摄影机可见,并且仅渲染文本(如果可见)

if (TheGame.cam.frustum.pointInFrustum(ply.getPos()) {
    TheGame.tmpVec.set(ply.getPos().x, ply.getPos().y, ply.getPos().z);
    TheGame.cam.project(TheGame.tmpVec);
    TheGame.fontArialM.draw(TheGame.spriteBatch, ply.name, TheGame.tmpVec.x, TheGame.tmpVec.y, 0, Align.center, false);
}

请注意,还有其他方法可以更有效地挑选相机后面的东西。

这是一款很棒的bornander。非常感谢。我只改变了一行,现在一切都好了:
if(ply.isAlive&&TheGame.cam.frustum.pointinfustum(ply.getPos())
“请注意,还有其他方法可以更有效地挑选相机后面的东西。”现在我想知道,这种方法昂贵吗?我应该直接在游戏中使用它还是寻找更好的方法?@allyozturk它可能足够快,适合你所做的事情。我只是添加了这个评论,以表明我的答案是关于为什么你的文本被渲染了两次,而不是关于完美的最佳解决方案。说句实话,我可能应该把这句话删掉,它并没有给答案增加太多。是的。知道了。再次感谢。