2011-06-07 65 views
1

我目前正在开发OPENGL ES 2.0项目。我正在制作一个条形图应用程序。我在制作图表方面取得了成功。我试图在文字上插入文字。我发现没有直接的解决方案来实现这一点。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代码吗?

或者,如果任何人知道在屏幕上写文本的更简单的方法,请让我知道。

+0

你有没有设法做到这一点?如果你能分享代码,这将是非常好的 – Xys 2017-07-28 15:16:59

回答

2

的OpenGL ES 1.x和2.x份额,当涉及到几何了很多概念。您可以指定顶点,然后将它们与几何体连接起来,该几何体将变成像素。不同之处在于,您可以在两个位置指定自定义代码:获取输入几何图形并确定它在屏幕上的显示位置以及它通过流水线传递的内容,并根据信息得出单个片段的颜色沿着管道。

因为ES 1.x在这个意义上是不可编程的,所以它在两个地方都有固定的功能。这意味着固定的数据结构,因此您为什么通过glVertexPointer,glTexCoordPointer等提供数据。您为固定的,预定义的字段提供值,这些字段是OpenGL在描述顶点时写入的。因为ES 2.x是完全可编程和极简主义的,所以它不会假设哪些字段描述顶点,因此也没有特殊的数据提供方法,例如提供位置(glVertexPointer),另一个提供纹理坐标(glTexCoordPointer)等。

在ES 2.x中,您使用glVertexAttribPointer来替换所有固定含义的ES 1.x调用。第一个参数标识了您通过索引指定了哪个属性,该索引是您自己通过glBindAttribLocation强制执行的,或者是通过glGetAttribLocation请求回来。

您还需要编写合适的片段和像素着色器,本质上只是为了传递您提名的纹理坐标,并为每个像素采样纹理,然后将其传递。每个人的身体应该只有一条或两条线。

也许你有一些框架来处理你的图形中的东西。因为ES 2.x对于属性是如此通用,所以应该可以重复使用相同的东西。