我是 android 新手,我的小组目前正在使用 opengl es 2.0 使用 GlSurfaceView 创建图形应用程序。
我们最近在绘图上显示了网格和刻度线,现在我被分配了实现数字刻度并将 x 和 y 轴标记为“X”和“Y”的任务。
经过大量研究后,我决定通过将字符串渲染到位图来完成此任务。在实现这个目标的过程中我遇到了很多问题。我了解基本概念。我知道我需要字母数字字符“0123456789”和“XY”和“-”(对于-x和-y比例)。我见过很多不同的例子,并广泛尝试遵循 JVitella 的例子here https://stackoverflow.com/questions/1339136/draw-text-in-opengl-es-android
我开始理解这个概念,但就我的字符串而言,我知道我有 13 个字符,那么我的位图应该有多大?
同样在 Jvitelas 示例中,我对代码感到惊讶:
Drawable background = context.getResources().getDrawable(R.drawable.background);
我不明白到底发生了什么,当我编码时,我收到上下文语法错误。
对于我的应用程序,我知道我需要将字符串保存到位图中,就像这样。我会创建一个位图,但它应该有多大?然后我从位图创建一个画布,并将 canvas.drawText 创建到位图中。
[ 0 1 2 3 4 ]
| 5 6 7 8 9 |
[ X Y Z ]
基本上我要问的是:
- 上面下面的位图如何实现?
- 如何从位图中绘制个位数?
- 如何绘制多于一位数字的数字?
你问了很多问题,但我会尝试回答一些:
-
那么我的位图应该有多大?
这完全取决于您,具体取决于您希望文本清晰的程度。您可以为每个字符分配一个具有数百个像素的巨大位图,可以很好地缩放,或者分配一个分辨率有限的非常小的位图。我想说,无论你想要什么“字体大小”,至少为每个字符分配那么多像素的高度。因此,如果您想绘制字体大小为“20”的内容,那么您可能需要 5x20 x 3x20 或 100x60 的位图。
-
如何从位图中绘制个位数?
您将使用 opengl 在要绘制字母的位置绘制一个四边形,然后使用该四边形的纹理坐标来选取一个字母。
例如,如果我想绘制一个 X,那么您可以在屏幕上绘制一个四边形,并将其纹理坐标指定为从 (0,0) 到 (0.2, 0.33),这将选择纹理的左侧 1/5 和底部纹理的 1/3。您将看到这样的盒子如何与纹理中“X”的位置对齐。
-
如何绘制多于一位数字的数字?
您只需在彼此旁边绘制两个独立的个位数即可。
如果您唯一的目标是在 Android 中绘制文本,那么使用FrameLayout
,和层TextViews
超越你的GLSurfaceView
。 OpenGL 不是为文本设计的,这使得它有些麻烦。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)