如何动态更改球体对象的颜色(在Autodesk forge中使用SceneBuilder)

时间:2020-06-01 08:57:40

标签: autodesk-forge autodesk-viewer

我正在研究Petr Broz的Custom models in Forge Viewer博客中的示例。我面临着动态更新球体对象颜色的问题。我从一个像"color": "#FF0000"这样的json文件中得到球体颜色的值。我创建了3个球体,其余的我也得到了第一个球体的颜色。为什么其他球体的颜色没有更新?如果问题出在使用相同的材​​料上,那么我也尝试将sphereMaterial设置为数组,如下所示。那是错误的还是我该如何更新颜色?

var spherecolor='';
var sphereMaterial = [];
const button = document.getElementById('button-geometry');
  button.addEventListener('click', async function () {
  const sceneBuilder = await viewer.loadExtension('Autodesk.Viewing.SceneBuilder');
  const modelBuilder = await sceneBuilder.addNewModel({ conserveMemory: true, modelNameOverride: 'My Custom Model' });
  for (var i = 0; i < numOfSphere;i++) {
    addGeometry(modelBuilder, jsonGeomConfig.geom[i].dbId, i);
  }
});
function addGeometry(modelBuilder, dbId, i) {
  const sphereGeometry = new THREE.BufferGeometry().fromGeometry(new THREE.SphereGeometry(0.05, 8, 10));
  //Getting spherecolor from json file
  spherecolor = jsonGeomConfig.geom[i].color;
  sphereMaterial[i] = new THREE.MeshPhongMaterial({ color: spherecolor });
  const sphereTransform = new THREE.Matrix4().compose(
    new THREE.Vector3(jsonGeomConfig.geom[i].Position.posX, jsonGeomConfig.geom[i].Position.posY, jsonGeomConfig.geom[i].Position.posZ),
    new THREE.Quaternion(0, 0, 0, 1),
    new THREE.Vector3(2,2,2)
  );
  modelBuilder.addMaterial('MyCustomMaterial', sphereMaterial[i]);
  const sphereGeomId = modelBuilder.addGeometry(sphereGeometry);
  const sphereFragId = modelBuilder.addFragment(sphereGeomId, 'MyCustomMaterial', sphereTransform);
  modelBuilder.changeFragmentsDbId(sphereFragId, dbId);
}

1 个答案:

答案 0 :(得分:0)

请务必为不同颜色的材料赋予不同的名称...否则它将被覆盖-请参见this实际环境:

  modelBuilder.addMaterial('MyCustomMaterial'+i, sphereMaterial[i]);
  const sphereGeomId = modelBuilder.addGeometry(sphereGeometry);
  const sphereFragId = modelBuilder.addFragment(sphereGeomId, 'MyCustomMaterial'+i, sphereTransform);