Java3d:如何在Java3d场景上编辑绘制的2d覆盖图?

vql8enpb  于 2023-04-10  发布在  Java
关注(0)|答案(1)|浏览(99)

我用技术回答了这个问题:Java3D: Painting 2D HUD over a Canvas3D
我的代码是这样的:

...
    GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
    Canvas3D canvas3D = new Canvas3D(config){
        public void postRender()
        {
            this.getGraphics2D().setColor(Color.white);
            this.getGraphics2D().drawString("Heads Up Display (HUD) Works!",100,100);
            this.getGraphics2D().flush(false);
        }

    };
...

以后如何删除或编辑此2D HUD?

gojuced7

gojuced71#

如果渲染器完全从头开始渲染每一帧,你可以在postRender()方法的同一个类中添加一个静态布尔值。然后在方法内部使用if语句检查布尔值是否为true,否则不做任何事情,如果你通过

ClassName.boolean_name=false;

HUD不应该显示。至于改变它,这是可能的,这真的取决于你想显示什么类型的信息。这里有一个例子,我会用游戏,但它可以适合几个主题。
我想存储FPS,x,y和z位置如果我正在开发一个游戏,那么我要做的就是在类中为我需要显示的每个属性创建一个变量,然后像这样:

Graphics2D G2D = this.getGraphics2D()
G2D.setColor(Color.white);
G2D.drawString("FPS: "+fps, 100, 100);
G2D.drawString("X: "+x_pos, 100, 80);
G2D.drawString("Y: "+y_pos, 100, 60);
G2D.drawString("Z: "+z_pos, 100, 40);
G2D.flush(false);

另外,如果你注意到我将G2D设置为this.getGraphics2D(),这样我就不需要在每次想要使用Graphics2D对象时调用外部方法,每次你调用getGraphics2D()时,它都必须去那个类,调用那个方法,并返回值,与只获取一次并使用它相比,更快的类型类型,从长远来看,会产生更快的速度。
在所有这些之后,我会做的是,我可以将每个变量设置为正确的值,它会显示,这是更新它的一种方法,你可以做类似的,为每行创建一个变量,然后:

line1="this is some text";
list2="this is some more text";
list3="etc...";

相关问题