javascript - 如何使用 WebGL 在运行时更新立方体的 Material ?

标签 javascript three.js

我正在使用 three.js 制作动画。我想动态更新立方体网格的 Material 。这是示例:

// create cube geometry 
var material1 = [new THREE.MeshBasicMaterial({color:0xBEE2FF}),.....];
var geometry = new THREE.CubeGeometry(50, 50, 50,0,0,0,material1 );
var cube = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial());

// ...

var material2 = [new THREE.MeshBasicMaterial({color:0xFFFFFF}), ...];
cube.geometry.materials = material2;

如果我使用 CanvasRenderer,它就可以工作。但是当我更改为 WebGL 渲染器时,它会抛出错误:Uncaught TypeError: Cannot read property 'map' of undefined

如何使用 WebGL 在运行时更新立方体的 Material ?

最佳答案

对于代码片段,很难知道是什么导致了错误,但您不能更改涉及纹理存在与否的 Material 。尝试让所有 Material 保持同一类型。此外,您可能需要将 material.needsUpdate 标志设置为 true

您可以在 Three.js wiki 中找到有关如何使用 WebGLRenderer 进行更新的更多详细信息和示例。

https://github.com/mrdoob/three.js/wiki/Updates

另外,这里有一个 fiddle ,它做的事情与您似乎正在尝试做的事情类似:http://jsfiddle.net/2FZU7/51/

编辑:为 three.js r.58 更新了 fiddle

关于javascript - 如何使用 WebGL 在运行时更新立方体的 Material ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11468558/

相关文章:

javascript - 关于如何使用 BusterJs 资源配置选项的好例子?

javascript - 如何正确将模块导入到 Threejs 项目中?

javascript - 如何限制 react 三纤维MapControls中的平移距离

javascript - Node js Rest Service将数据保存到特定的对象json中

javascript - 使用 Angular 的简单提交表单

javascript - 在 Three.js 中使用 MeshStandardMaterial 的黑色不反光面

javascript - 展开或使 THREE.LineSegments 更粗

javascript - 0x000000 作为 JavaScript 中的值在语法上如何有效?

javascript - 如何插入元素 react Hook 状态数组

javascript - 无法在javascript中获取对象属性的数组长度