我正在用C++编写Android和iOS引擎,目前主要关注Android与NDK。如何自动缩放我的OpenGL ES 2.0窗口?
我想渲染到一个较小尺寸的视口(比如说600x360),并自动将其升级到原生rez(比如800x480)。目前,较小的视口显示在屏幕下方的黑色区域。
我的问题是我不知道一个简单的方法来做到这一点透明地使用NDK。在API级别11中有一个GLSurfaceview.setScaleX
(和Y)函数,这将是完美的,但不存在于我所针对的API级别9中。另一个不好的解决方案是呈现给FBO,并将其作为最后一步呈现给屏幕。
我正在考虑简单的故事一个缩放矩阵,并要求引擎的用户(现在只是我)在绘制到屏幕时始终用顶点乘以顶点。这与使用glPushMatrix
类似。
我搜索了一段时间,找不到一个好的解决方案。有谁知道如何提供帮助?
您的缩放解决方案不会改变分辨率,它只是放大几何尺寸,然后以全分辨率呈现。这与完全不同于渲染小分辨率渲染图像。我不知道为什么FBO解决方案会是一个糟糕的解决方案,因为它是解决您的问题的完美方案。 –
我可以测试它,但我关心性能。恐怕渲染到FBO然后复制它会在大多数设备上遇到填充率限制。 – nullspace
您应该如何将低分辨率图像高分辨率转换为高分辨率图像。除插入低分辨率图像外没有其他方法,因此无论如何您都无法解决这个问题。 FBO是最快的解决方案,因为它可以防止不必要的副本。你不能仅仅通过神奇的方式将低分辨率的数据渲染到高分辨率的数据中,中间值(在低分辨率中缺失)应该具有什么颜色。你需要一些预存储然后插入。 –