libGDX使用贴图绘制文本到3D摄像头

时间:2015-01-30 21:37:03

标签: java text 3d libgdx draw

我有一个用于绘制贴花的工作代码:
INIT:

Decal decal = Decal.newDecal(1, 1, 
new TextureRegion(new Texture(Gdx.files.internal("2d/gui/badlogic.jpg"))) );
            decal.setPosition(10, 10, 10);
            decal.setScale(3);
            decals.add(decal);

绘制方法:

for (int i = 0; i < decals.size; i++) {
        Decal decal = decals.get(i);

        decal.lookAt(stage3d.getCamera().position, stage3d.getCamera().up);

        batch.add(decal);
    }
batch.flush();

我有一个用于在3d中编写文本的工作代码:
绘制方法:

spriteBatch.setProjectionMatrix(tmpMat4.set(camera.combined).mul(textTransform));
spriteBatch.begin();
font.draw(spriteBatch, "Testing 1 2 3", 0, 0);
spriteBatch.end();

但我制作面对面的文字时遇到了麻烦。

谢谢

1 个答案:

答案 0 :(得分:3)

我不会尝试贴花方法,因为它没有设置文字。 SpriteBatch已经设置为文本。

(Decal方法理论上可以表现得更好,因为你不需要为每个文本字符串单独进行绘图调用。但是,你必须滚动自己版本的BitmapFont和BitmapFontCache兼容贴花。当然,如果您这样做,您可以提交拉取请求并将其添加到libgdx。)

SpriteBatch代码看起来很熟悉。 :)基本上你需要做的是修改textTransform矩阵,使其旋转对象面向摄像机。 SpriteBatch设置为绘制面向Z方向的扁平材料。因此,您需要旋转Z矢量以面向相机。

首先,您需要一个可以重复使用的Vector3。

private static Vector3 tmpVec3 = new Vector3();

然后你想找到从文本中心指向相机的矢量。我假设您在这里名为textPosition的Vector3中存储文本在3D空间中的位置:

tmpVec3.set(camera.position).sub(textPosition); 
//tmpVec3 is now a vector pointing from the text to the camera.

现在您可以定位对象的矩阵,然后将其旋转以面向相机,如下所示:

textTransform.setToTranslation(textPosition).rotate(Vector3.Z, tmpVec3);

现在,您可以在发布的代码中使用textTransform。确保将BitmapFont的对齐方式设置为HAlignment.center,否则文本将围绕文本字符串的左端而不是中心旋转。您还可能希望将integer参数设置为false以便在3D中绘图。