Android 如何使用OpenGL ES在现有纹理上绘制像素阵列
我正在尝试绘制一个像素阵列,其中包含Android上OpenGL ES中纹理上的alpha值(应该是灰度图) 背景信息 像素数组是由FreeType 2生成的,我已经检查了数组的内容,我觉得还可以 所以对于FreeType 2生成的每个字母,我需要在屏幕上绘制它。如果你想更具体地了解它,那就是引导动画。我想在动画上画一个文本 当前结果 这就是我得到的: 重要提示:我已删除了编辑4中解释的白色框,但仍然没有收到任何字母 白色的方块应该是字母 用于绘制字母像素缓冲区的代码片段:Android 如何使用OpenGL ES在现有纹理上绘制像素阵列,android,arrays,opengl-es,textures,pixel,Android,Arrays,Opengl Es,Textures,Pixel,我正在尝试绘制一个像素阵列,其中包含Android上OpenGL ES中纹理上的alpha值(应该是灰度图) 背景信息 像素数组是由FreeType 2生成的,我已经检查了数组的内容,我觉得还可以 所以对于FreeType 2生成的每个字母,我需要在屏幕上绘制它。如果你想更具体地了解它,那就是引导动画。我想在动画上画一个文本 当前结果 这就是我得到的: 重要提示:我已删除了编辑4中解释的白色框,但仍然没有收到任何字母 白色的方块应该是字母 用于绘制字母像素缓冲区的代码片段: void Boot
void BootAnimation::drawFtBitmap(FT_Bitmap *bitmap, int, int) {
int width = abs(bitmap->pitch);
int height = bitmap->rows;
/*// Round up to power of 2
width--;
width |= width >> 1;
width |= width >> 2;
width |= width >> 4;
width |= width >> 8;
width |= width >> 16;
width++;
height--;
height |= height >> 1;
height |= height >> 2;
height |= height >> 4;
height |= height >> 8;
height |= height >> 16;
height++;*/
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glEnable(GL_BLEND);
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &mBootStatusTex.name);
glBindTexture(GL_TEXTURE_2D, mBootStatusTex.name);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA,
width, height,
0, GL_ALPHA, GL_UNSIGNED_BYTE, bitmap->buffer);
glBindTexture(GL_TEXTURE_2D, 0);
glDeleteTextures(1, &mBootStatusTex.name);
}
附加信息和解释
mBootStatusTex
是一种纹理
该数组是无符号字节数组。
数组的大小由bitmap->pitch*bitmap->rows
设置。
bitmap->pitch
可以被视为图像的宽度,但是在这种情况下使用bitmap->width
不会有什么不同
我是OpenGL ES的初学者,以前从未做过类似的事情。我的目标是在动画顶部绘制具有特定字体的文本
问题很简单,我没有得到文本,而是得到了那些白色的框
我尝试过的
我试过移除glDrawTexiOES,但是没有显示任何东西
我尝试使用GL_ALPHA
和GL_LUMINANCE
,两者的结果都是一样的
还有更多
如果你需要更多的信息,请告诉我。我希望上面的代码足够了
编辑:高度和宽度错误。因为我把它收起来了。我最好用些庄稼什么的。但这并不能解决白盒的问题
编辑2:问题是它没有绘制任何内容。我通过数组,它有不同的值,但屏幕上没有绘制任何内容。我做错什么了吗
编辑3:我检查了每个呼叫的错误代码。没有错误
编辑4:我更新了上面的代码。仍然不起作用。我删除了glDrawTexiOES
调用,因为它所做的唯一事情就是绘制实体框<代码>glTexImage2D尚未绘制任何内容。至少我看不见。即使我将大小四舍五入到2的幂,它也不起作用。在上面更新的代码中,您可以看到我是如何尝试使用mipmap的。这样它就可以自动处理了。还尝试使用glSubTexImage2D
。不起作用
编辑5:我也不知道如何设置纹理的位置。以下(类似伪代码的)代码段可以工作吗
glLoadIdentity();
glPushMatrix();
glTranslatef(x, y, 0);
glPopMatrix();
编辑6:我还尝试(作为实验)使用glDrawTexiOES绘制每个像素。虽然它适用于一些图形,但并不适用于所有缓冲区。如果我画的是完整的文本,它大部分是扭曲的,整个屏幕有随机的颜色。所以这不是一条路要走。
还尝试用另一个透明的曲面覆盖曲面,但效果不太好。我放弃了我的更改,因为这不是我想要的工作方式。我只是想用一种简单的方法在动画上画文本