0

在 iOS 上使用 OpenGL,是否可以更新小纹理(通过单独设置每个像素)然后将其放大以填充屏幕(每秒 60 帧)?

4

2 回答 2

1

您应该能够使用 glTexImage2D 更新纹理的内容。

未经测试的例子:

GLubyte data[1024]; // 32x32 (power of two) 
for (int i=0; i<1024; i+=4) {
    // write a red pixel  (RGBA)    
    data[i] = 255;
    data[i+1] = 0;
    data[i+2] = 0;
    data[i+3] = 255;
}

glBindTexture(GL_TEXTURE_2D, my_texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);

// then simply render a quad with this texture.
于 2013-07-19T17:55:30.507 回答
1

一般来说,答案是肯定的,这是可能的。但这可能取决于您需要绘制的内容。

由于您没有提供更多详细信息,因此我将描述一般方法:

  • 将纹理绑定到帧缓冲区(是一个很好的解释,其中包含有关如何执行此操作的代码。请参阅“示例 6.10。Initialize() for Supersampling”代码示例)

  • 现在以与在屏幕上相同的方式绘制所需的内容(转换、模型视图矩阵等)。如果您需要像素精度(修改每个像素),您可以考虑使用正交投影。这是否可能,取决于您需要绘制什么。所有这些绘图都将在您的纹理上执行,以实现“更新纹理”部分。

  • 绑定您使用的普通帧缓冲区,以在屏幕上绘制。使用上一步中的纹理绘制一个矩形(可能再次使用正交投影)。您可以缩放此矩形以填充屏幕。

如果上述方法能够达到 60 fps,则取决于您的目标设备和您需要渲染的场景。

希望有帮助

于 2013-07-18T09:08:01.480 回答