gpt4 book ai didi

java - LWJGL:Slick:在 3D 世界中绘制字体

转载 作者:行者123 更新时间:2023-11-30 04:05:38 51 4
gpt4 key购买 nike

如何在 3D 世界中绘制 Slick 的字体(UnicodeFont),该字体只能通过 drawString() 绘制,它只提供 x 和 y?

我已经尝试过这个:

public void drawHudString(float _posX, float _posY, String _text, UnicodeFont _font, Color _color) {
glPushMatrix();
glRotatef(cam.rotX, -1.0f, 0.0f, 0.0f);
glRotatef(cam.rotY, 0.0f, -1.0f, 0.0f);
glRotatef(cam.rotZ, 0.0f, 0.0f, -1.0f);
glTranslatef(-cam.posX, -cam.posY, -cam.posZ + 20);

_font.drawString(_posX, _posY, _text, _color);
glPopMatrix();
}

但文本不是displayex。如果不使用 glRotatefsglTranslatef,则文本将由 3D 世界 coords

渲染

最佳答案

Slick 的字体渲染基于 OpenGL 的即时模式。这意味着 drawString 的行为由当前状态决定,换句话说,由当前的 GL_PROJECTIONGL_MODELVIEW 矩阵决定。

您的问题并没有真正弄清楚您是否想要将文本绘制为 2D 覆盖(可能在屏幕坐标中)或真正嵌入 3D 空间的透视。不过,您可以使用drawString 来实现这两个目的。 drawString 在 z=0 平面中指定的 x/y 坐标处渲染字体纹理。在 drawString 中,约定是假设左手坐标系,并且纹理从 z 轴负方向可见。这种约定的原因可能是 OpenGL 对窗口空间使用左手坐标系,而对世界/对象空间使用右手坐标系 ( see this answer for a good explanation )。因此,使用 Slick 进行 2D 渲染非常简单:设置一个典型的正交投影矩阵(如 ryuyah2000 所建议的),然后就可以开始了。

如果您想在 3D 空间中渲染,则可以保留常规透视投影矩阵(即,您使用与渲染世界相同的投影)。为了控制 3D 空间中文本的位置,您必须相应地设置模型 View 矩阵(即,在要渲染文本的平面中对齐 z=0 平面)。由于左手和 z 可见性约定,您可能必须将 z 轴旋转 180°,并且必须反转惯用手(只需将模型 View 缩放 -1)。如果您执行了其中一个步骤错误,则您的文本要么不可见(= 查看错误的 z 侧),要么从右向左书写(= 错误的惯用手)。 Slick 的 drawString 方法使用字体纹理的 1 个单位 = 1 个像素的缩放比例,因此您必须应用适当的缩放比例以使其与您的世界单位相匹配。

关于java - LWJGL:Slick:在 3D 世界中绘制字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20788163/

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