使用three.js将场景渲染到自定义网格上

3
在玩弄Three.js将场景渲染到纹理的演示后,我成功地将其本质复制到了我的项目中:在我的主场景中,有一个现在的球体,并通过THREE.WebGLRenderTarget缓冲区在其上绘制了一个次要场景。
不过,我并不真正需要这个球体,这就是我遇到的巨大难题所在。当我尝试将缓冲区映射到我的简单自定义网格上时,我会得到以下无限流错误:
three.js:23444 WebGL: INVALID_VALUE: pixelStorei: invalid parameter for  alignment
three.js:23557 Uncaught TypeError: Cannot read property 'width' of undefined

我的几何图形近似一个环形,是使用这个代码创建的。我已经成功地将canvas UV映射到它上面,方法是将{map: new THREE.Texture(canvas)}传递到材质选项中,但如果我使用{map: myWebGLRenderTarget},就会出现上述错误。

通过浏览调用堆栈,看起来three.js假定在myWebGLRenderTarget上存在texture.image属性,并尝试在其上调用clampToMaxSize

这是three.js的一个bug还是我做错了什么?由于我只需要平面渲染(使用MeshBasicMaterial),所以当我适应上面的渲染到纹理演示时,我首先要做的事情之一是删除所有着色器的痕迹,只用球体也可以很好地工作。我是否需要这些着色器才能使用UV映射和自定义网格?

1个回答

2

就我个人而言,我在我的纹理上不必要地设置了needsUpdate = true。(显然,needsUpdate的处理假定了纹理所基于的<canvas>存在。)


1
很好,这对我有帮助。当实例化新材质时,.needsUpdate会自动设置为true。 - dpren
1
我一直在做同样的愚蠢错误,让我想了很久。谢谢! - grouma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接