iphone - 渲染大量点

标签 iphone ios opengl-es

我想在 OpenGL ES 中逐像素渲染图像。我想这样做是因为我计划随时间移动这些像素以创建各种效果。

出于性能和设计原因,我决定在两个方向上每隔一个像素使用一次(从而将它们的数量减少到四分之一)

我对 opengl 只有非常基本的了解,所以我可能缺少实现此目的的一些关键知识。

实现此目标的最佳方法是什么?我真的必须逐像素渲染吗?或者我能以某种方式用像素阵列创建纹理吗?

我想让它在尽可能多的设备上工作(因此首选 OpenGL ES 1.1 解决方案,但如果不可能或者它真的不方便或缓慢,可以使用 2.0)

我尝试使用 VBO 执行此操作,但结果不一。我不确定我是否做对了,因为有一些问题(而且速度很慢)。这是我的代码:

初始化:

glGenBuffers(1, &pointsVBO);
glBindBuffer(GL_ARRAY_BUFFER, pointsVBO);

glBufferData(GL_ARRAY_BUFFER, 160*240*sizeof(Vertex), 0, GL_DYNAMIC_DRAW);

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);

渲染:

- (void)renderPoints:(ImagePixel**)imagePixels {
    int count = 160 * 240;
    for(int i = 0; i < count; ++i) {
         vertices[i].v[0] = imagePixels[i]->positionX;
         vertices[i].v[1] = imagePixels[i]->positionY;
         vertices[i].color[0] = imagePixels[i]->red;
         vertices[i].color[1] = imagePixels[i]->green;
         vertices[i].color[2] = imagePixels[i]->blue;
         vertices[i].color[3] = 1;
    }

    glVertexPointer(2, GL_FLOAT, sizeof(Vertex), vertices[0].v);
    glColorPointer(4, GL_FLOAT, sizeof(Vertex), vertices[0].color);

    // update vbo
    GLvoid *vbo_buffer = glMapBufferOES(GL_ARRAY_BUFFER, GL_WRITE_ONLY_OES);
    memcpy(vbo_buffer, vertices, count * sizeof(Vertex));
    glUnmapBufferOES(GL_ARRAY_BUFFER);

    // draw contents of vbo
    glDrawArrays(GL_POINTS, 0, count);
}

顶点结构:

typedef struct Vertex
{
    float v[2];
    float color[4];
} Vertex;

imagePixels 数组填充了来自图像的数据。

执行此操作时,我得到了大部分图像,但缺少最后几行,并且我可以在屏幕周围看到一些随机像素。我是否有可能在仅使用部分数据的 drawArrays 中达到某些限制?

第二个问题是,列后半部分的点没有正确对齐。我猜这是由在渲染过程中计算位置时 float 学的舍入误差引起的(提供的坐标都是 2 的倍数)。有什么办法可以防止这种情况发生吗?我需要所有点在适当的网格中对齐。

我一拿到我的iphone就给你截图

最佳答案

如果您真的想操纵每个像素,您可能应该只在 OpenGL 中使用一个全屏四边形并在每一帧更新其纹理。

关于iphone - 渲染大量点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8196323/

相关文章:

iphone - 呈现 UIPopoverviewcontroller

ios - 是否可以在将通用应用程序上传到应用程序商店后将其更改为iphone?

ios - 使用keyWindow的Xcode Swift iPhone 5、5s崩溃错误

ios - NSCondition 或 @synchronized

iphone - 从不存在的 View 中删除 subview

iphone - 核心数据:对多关系的谓词

ios - pageControl 中的 ScrollView 延迟/滞后

java - Android:OpenGL:何时加载纹理?

ios - 如何将 Apple 的 iAds 添加到我基于 OpenGL 的 iPhone 应用程序?

onDrawFrame 之外的 Android OpenGL 游戏循环