Three.js - 呈现WebGLRenderTarget纹理的最有效方法是什么?

时间:2012-10-06 03:55:57

标签: webgl three.js renderer

问题

我已经在我的项目中得到了一个点,我正在渲染WebGLRenderTargets并将它们用作主场景中的纹理。它有效,但似乎我要做的工作比它需要的要多得多。我生成的纹理只需要64x64,但由于我使用的是我的主渲染器(窗口宽度乘窗口高度),因此不必要地以更大的分辨率渲染WebGLRenderTargets。

我可能错了,但我相信这会增加绘制到每个RenderTarget所需的处理以及然后将大纹理绘制到网格所需的处理。

我尝试过使用第二个渲染器,但是在渲染器B中绘制到渲染器A之后尝试使用WebGLRenderTarget时,我似乎遇到了这个错误:

WebGL: INVALID_OPERATION: bindTexture: object not from this context

实施例

作为参考,您可以看到我的抽象页面here(警告:由于我正在询问的问题,此页面可能会滞后于您)。我正在我的辅助场景中的平面上运行单面函数,并使用相机放置将其切割成多个部分,然后通过WebGLRenderTarget将这些片段应用到平铺片段,以便它们能够流畅但个性化。

问题

我是否认为使用相同的渲染器尺寸比渲染较小的渲染器效率低得多?如果是这样,您认为最佳解决方案是什么?目前有没有办法实现这种优化?

1 个答案:

答案 0 :(得分:4)

渲染到屏幕时,渲染器使用renderer.setSize()中的尺寸参数来设置视口。

当渲染器渲染到屏幕外渲染目标时,渲染到的纹理的大小由参数renderTarget.widthrenderTarget.height给出。

所以你的问题的答案是可以为两者使用相同的渲染器;没有低效率。