在 iOS 上使用 OpenGL,是否可以更新小纹理(通过单独设置每个像素)然后将其放大以填充屏幕(每秒 60 帧)?
问问题
188 次
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 回答