2

我在我的角度应用程序中使用 vtk.js 来显示 3D STL 对象。我知道 STL 文件没有颜色信息,但至少我的 3D 对象应该是白色的并且可以看到它的细节。但是,我的 3D 对象是全黑的,零细节。

import vtkFullScreenRenderWindow from 'vtk.js/Sources/Rendering/Misc/FullScreenRenderWindow';
import vtkActor from 'vtk.js/Sources/Rendering/Core/Actor';
import vtkMapper from 'vtk.js/Sources/Rendering/Core/Mapper';
import vtkSTLReader from 'vtk.js/Sources/IO/Geometry/STLReader';

ngOnInit(): void {
    const reader = vtkSTLReader.newInstance();
    const mapper = vtkMapper.newInstance({ scalarVisibility: false });
    const actor = vtkActor.newInstance();

    actor.setMapper(mapper);
    mapper.setInputConnection(reader.getOutputPort());

    function update() {
      const fullScreenRenderer = vtkFullScreenRenderWindow.newInstance();
      const renderer = fullScreenRenderer.getRenderer();
      const renderWindow = fullScreenRenderer.getRenderWindow();
    
      const resetCamera = renderer.resetCamera;
      const render = renderWindow.render;

      renderer.addActor(actor);
      resetCamera();
      render();
    }

    const myContainer = document.querySelector('body');
    const fileContainer = document.createElement('div');
    fileContainer.innerHTML = '<input type="file" class="file"/>';
    myContainer.appendChild(fileContainer);

    const fileInput = fileContainer.querySelector('input');

    function handleFile(event) {
      event.preventDefault();
      const dataTransfer = event.dataTransfer;
      const files = event.target.files || dataTransfer.files;
      if (files.length === 1) {
        myContainer.removeChild(fileContainer);
        const fileReader = new FileReader();
        fileReader.onload = function onLoad(e) {
          reader.parseAsArrayBuffer(fileReader.result);
          update();
        };
        fileReader.readAsArrayBuffer(files[0]);
      }
    }

    fileInput.addEventListener('change', handleFile);

    reader.setUrl("./assets/test2.stl", { binary: true }).then(update);
}

如何为我的对象添加颜色?我也找不到任何关于它的例子。

4

0 回答 0