【问题标题】:OPENGL ES 2.0 Render Text on screenOPENGL ES 2.0 在屏幕上呈现文本
【发布时间】:2011-06-07 14:44:30
【问题描述】:

我目前正在处理一个 OPENGL ES 2.0 项目。我正在制作一个条形图应用程序。我在制作图表方面取得了成功。我正在尝试在图表上插入文本。我发现没有直接的解决方案可以实现相同的目标。

我遇到了一个 OPENGL ES 1.1 代码,其中包含以下几行。

文件:在 GLViewController.m 中(来自 drawView 函数)

Texture2D *textTex = [[Texture2D alloc] initWithString:@"Text" 

                                            dimensions:CGSizeMake(100., 40.0) 

                                             alignment:UITextAlignmentCenter 

                                                  font:[UIFont boldSystemFontOfSize:10.0]];

[textTex drawAtPoint:CGPointMake(160.0, 100.0) depth:-1];

在 Texture2D.m 文件中,

- (void) drawAtPoint:(CGPoint)point depth:(CGFloat)depth

{

GLfloat coordinates[] = {

0, _maxT,

_maxS, _maxT,

0, 0,

_maxS, 0

};

GLfloat width = (GLfloat)_width * _maxS,

height = (GLfloat)_height * _maxT;

GLfloat vertices[] = {

-width / 2 + point.x, -height / 2 + point.y, depth,

width / 2 + point.x, -height / 2 + point.y, depth,

-width / 2 + point.x, height / 2 + point.y, depth,

width / 2 + point.x, height / 2 + point.y, depth

};

glBindTexture(GL_TEXTURE_2D, texture.name);

glVertexPointer(3, GL_FLOAT, 0, vertices);          //1

glTexCoordPointer(2, GL_FLOAT, 0, coordinates);      //2

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

}

当我尝试将此代码转换为 OPENGL ES 2.0 代码时,我无法为标记为 1 和 2 的行找到合适的转换。有人可以帮我将此代码转换为 OPENGL ES 2.0 代码吗?

或者如果有人知道在屏幕上写文字的更简单方法,请告诉我。

【问题讨论】:

  • 你有没有做到这一点?如果能分享代码就太好了

标签: iphone ios text opengl-es opengl-es-2.0


【解决方案1】:

OpenGL ES 1.x 和 2.x 在几何方面有很多相同的概念。您指定顶点,然后将它们与几何图形连接起来,几何图形变成像素。不同之处在于您在两个地方指定自定义代码:获取输入几何图形并确定它在屏幕上的位置以及它通过管道传递的内容,以及根据传入的信息确定单个片段的颜色沿着管道。

因为 ES 1.x 在这个意义上不是可编程的,所以它在两个地方都有固定的功能。这意味着固定的数据结构,因此您为什么要通过glVertexPointerglTexCoordPointer 等提供数据。您正在为 OpenGL 写入石头中描述顶点的固定、预定字段提供值。

因为 ES 2.x 是完全可编程和极简的,它不假设哪些字段描述了一个顶点,因此没有特殊情况的数据提供方法,例如一个提供位置 (glVertexPointer),另一个提供纹理坐标(glTexCoordPointer)等

在 ES 2.x 中,您使用 glVertexAttribPointer 替换所有固定含义的 ES 1.x 调用。第一个参数标识您通过索引指定的属性,该索引已由您自己通过glBindAttribLocation 强制或留给自己找出并通过glGetAttribLocation 请求返回。

您还需要编写一个合适的片段和像素着色器,基本上只是为了传递您指定的纹理坐标,并对每个像素的纹理进行采样,然后继续传递。每个正文中应该只有一两行。

您可能有某种框架来处理图形中的这些内容。因为 ES 2.x 对属性非常通用,所以应该可以重用很多相同的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多