Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用OpenGL ES在现有纹理上绘制像素阵列_Android_Arrays_Opengl Es_Textures_Pixel - Fatal编程技术网

Android 如何使用OpenGL ES在现有纹理上绘制像素阵列

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

我正在尝试绘制一个像素阵列,其中包含Android上OpenGL ES中纹理上的alpha值(应该是灰度图)

背景信息

像素数组是由FreeType 2生成的,我已经检查了数组的内容,我觉得还可以

所以对于FreeType 2生成的每个字母,我需要在屏幕上绘制它。如果你想更具体地了解它,那就是引导动画。我想在动画上画一个文本

当前结果

这就是我得到的:

重要提示:我已删除了编辑4中解释的白色框,但仍然没有收到任何字母

白色的方块应该是字母

用于绘制字母像素缓冲区的代码片段:

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绘制每个像素。虽然它适用于一些图形,但并不适用于所有缓冲区。如果我画的是完整的文本,它大部分是扭曲的,整个屏幕有随机的颜色。所以这不是一条路要走。
还尝试用另一个透明的曲面覆盖曲面,但效果不太好。我放弃了我的更改,因为这不是我想要的工作方式。我只是想用一种简单的方法在动画上画文本