在使用 this demo of Three.js rendering a scene to a texture 之后,我成功地在我的项目中复制了它的本质:在我的主场景中,有一个 now 球体,并且通过 THREE.WebGLRenderTarget 缓冲区在其上绘制了一个次要场景。

不过,我真的不需要球体,这就是我撞到一堵巨大的砖墙的地方。尝试将缓冲区映射到我的简单自定义网格时,我收到了以下错误的无限流:

three.js:23444 WebGL: INVALID_VALUE: pixelStorei: invalid parameter for  alignment
three.js:23557 Uncaught TypeError: Cannot read property 'width' of undefined

我的几何图形近似于 annular 形状,是使用 this code 创建的。通过将 canvas 传递到 Material 选项中,我已经成功地将 {map: new THREE.Texture(canvas)} 进行了 UV 映射,但是如果我使用 {map: myWebGLRenderTarget},则会出现上述错误。

粗略地看一下调用堆栈,它看起来就像 Three.js 假设 texture.image 上存在 myWebGLRenderTarget 属性并尝试在其上调用 clampToMaxSize

这是three.js中的错误还是我只是做错了什么?因为我只需要平面渲染(使用 MeshBasicMaterial ),所以在调整上面的渲染到纹理演示时我做的第一件事就是删除所有着色器的痕迹,它只对球体效果很好。我是否需要这些着色器才能使用 UV 贴图和自定义网格?

最佳答案

对于它的值(value),我不必要地在我的纹理上设置了 needsUpdate = true。 (needsUpdate 的处理显然假定纹理所基于的 <canvas> 的存在。)

关于three.js - 使用three.js将场景渲染到自定义网格上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28079101/

10-15 04:13