我需要使用THREE.WebGLRenderTarget将场景中的单个特定网格渲染为纹理。我已经实现了在渲染场景期间,除此网格以外的所有其他网格都被忽略了。因此,我基本上实现了我的目标。我讨厌的是,在场景的渲染过程中,整个场景图还有很多不必要的工作在进行。我需要在每一帧渲染该纹理,因此使用当前方法,我会得到极速fps下拉菜单。 (整个场景图中有很多网格)。
所以我发现了THREE.WebGLRenderer的函数“ renderBufferImmediate”。 (链接到渲染器源代码here)实现目标的伪代码如下:
var mesh = some_Mesh;
var renderer = some_WebGLRenderer;
var renderTarget = some_WebGLRenderTarget;
renderer.setRenderTarget(renderTarget);
var materialProperties = renderer.properties.get(mesh.material);
var program = materialProperties.program;
renderer.renderBufferImmediate(mesh, program, mesh.material);
var texture = renderTarget.texture;
renderBufferImmediate函数采用THREE.Object3D,WebGLShaderProgram和THREE.Material的实例。我在这里看到的问题:该函数的实现尝试查找afaik不存在的Object3D属性。 (例如“ hasPositions”或“ hasNormals”)。简而言之:我的方法行不通。
如果有人能告诉我是否可以出于我的目的使用此功能(表示我当前使用的是错误的)或是否有解决我的问题的方法,我将不胜感激。
谢谢。