上章讲了RenderTexture的流程,然而有些需求cocos提供的并不能实现。在PC上玩游戏的时候,我们可以在设置选项里设置游戏分辨率,模糊,清晰,高清,然而cocos引擎只支持一种渲染分辨率,手机分辨率多少,就会渲染出同样分辨率的图片,这样对某些消耗大3D游戏,在低端手机就会很卡。因此,本章主要讲怎么实现基于FBO的多分辨率渲染。
多分辨率渲染的思路如下:首先创建FBO,然后渲染场景时,设置当前新FBO,并绑定当前FBO,设置视口大小(根据图像清晰度设置),完成后恢复到系统帧缓存,将FBO渲染到的纹理放大渲染到系统默认缓存上,此外,在渲染到默认系统前,可以对图像进行各种操作,如模糊,提亮等。
上章已经具体讲了RenderTexture,下面直接贴代码,RenderTexture加入下面代码:
void RenderTexture::beginFrameBuffer()
{
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &_oldFBO);
glBindFramebuffer(GL_FRAMEBUFFER, _FBO);
{
Rect viewport;
viewport.size.width = _fullviewPort.size.width;
viewport.size.height = _fullviewPort.size.height;
float viewPortRectWidthRatio = float(viewport.size.width) / _fullRect.size.width;
float viewPortRectHeightRatio = float(viewport.size.height) / _fullRect.size.height;
viewport.origin.x = (_fullRect.origin.x - _rtTextureRect.origin.x) * viewPortRectWidthRat