使切割平面与 ForgeViewer 中的自定义网格一起使用



我正在使用Autodesk的ForgeViewer来加载IFC文件和自定义THREE.js网格,类似于这里所做的

我遇到的问题是切割平面(参见此处)不会影响自定义网格,而只影响 Forge 模型。有什么方法可以让切割平面也用于自定义网格体?

如果我没记错的话,在 r71 版本中还没有引入 THREE.js 的设置clippingPlanes方式(Forge 的自定义实现是基于哪个),但也许有一种 Forge 特定的方法来使它工作?

你是对的,Forge Viewer使用自己的基于着色器的剪辑。有关更多详细信息,请参阅我的其他答案(尤其是此要点)。

扩展 Petr 的答案,以下是支持纹理网格切割平面所需的代码:

const imgTexture = THREE_FORGE.ImageUtils.loadTexture(textureUrl);
const vertexShader = `
  #if NUM_CUTPLANES > 0
      varying vec3 vWorldPosition;
  #endif
  varying vec2 vUv;
  void main() {
      #if NUM_CUTPLANES > 0
          vec4 _worldPosition = modelMatrix * vec4( position, 1.0 );
          vWorldPosition = _worldPosition.xyz;
      #endif
      vUv = uv;
      gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);
  }
`;
const fragmentShader = `
  #include<cutplanes>
  #if NUM_CUTPLANES > 0
      varying highp vec3 vWorldPosition;
  #endif
  uniform sampler2D texture;
  varying vec2 vUv;
  void main() {
      #if NUM_CUTPLANES > 0
          checkCutPlanes(vWorldPosition);
      #endif
      gl_FragColor = texture2D(texture, vUv);
  }
`;
const material = new THREE_FORGE.ShaderMaterial({
    uniforms: {
        cutplanes: {type: 'v4v', value: []},
        hatchParams: {type: 'v2', value: new THREE_FORGE.Vector2(1.0, 10.0)},
        hatchTintColor: {type: 'c', value: new THREE_FORGE.Color(0xFFFFFF)},
        hatchTintIntensity: {type: 'f', value: 1.0},
        texture: {type: 't', value: imgTexture},
    },
    vertexShader: vertexShader,
    fragmentShader: fragmentShader,
});
const mesh = new THREE.Mesh(geometry, material);

最新更新