Vtk.js: импорт нескольких STL
Я использую Vtk.js для отображения 3D-контента в веб-интерфейсе.
Моя проблема возникает, когда я пытаюсь загрузить несколько моделей ( формат STL).
Я использую эту логику:
PS: файлы - это массив атрибутов моих STL, атрибут 'url' - это путь к STL
const fullScreenRenderer = vtk.Rendering.Misc.vtkFullScreenRenderWindow.newInstance();
for (var i = files.length - 1; i >= 0; i--)
{
var mapper = vtk.Rendering.Core.vtkMapper.newInstance({ scalarVisibility: false });
var actor = vtk.Rendering.Core.vtkActor.newInstance();
var reader = vtk.IO.Geometry.vtkSTLReader.newInstance();
actor.setMapper(mapper);
mapper.setInputConnection(reader.getOutputPort());
actor.getProperty().setColor( files[i].color );
actor.getProperty().setOpacity( files[i].opacity );
fullScreenRenderer.getRenderer().addActor(actor);
reader.setUrl( files[i].url , { binary: true }).then( update) ;
}
function update()
{
fullScreenRenderer.getRenderer().resetCamera();
fullScreenRenderer.getRenderer().setLayer(1);
fullScreenRenderer.getRenderWindow().render();
}
Проблема в том, что каждая 3D модель черная. Если я удалю setLayer(1)
, весь экран черный.
Я думаю, что это произошло, потому что я не использую правильный " конвейер". Но у меня нет такого большого опыта работы с этой библиотекой, чтобы знать, документ все еще не закончен, это не помогает.
0 ответов
У меня это работает (но я вообще не понимаю, почему...)
const fullScreenRenderer = vtk.Rendering.Misc.vtkFullScreenRenderWindow.newInstance();
var actors = [];
for (var i = files.length - 1; i >= 0; i--)
{
var mapper = vtk.Rendering.Core.vtkMapper.newInstance({ scalarVisibility: false });
actors[i] = vtk.Rendering.Core.vtkActor.newInstance();
var reader = vtk.IO.Geometry.vtkSTLReader.newInstance();
actors[i].setMapper(mapper);
mapper.setInputConnection(reader.getOutputPort());
actors[i].getProperty().setColor( files[i].color );
actors[i].getProperty().setOpacity( files[i].opacity );
fullScreenRenderer.getRenderer().addActor(actor);
reader.setUrl( files[i].url , { binary: true }).then( update(i) ) ;
}
function update(i)
{
actors[i].getProperty().setColor( files[i].color );
fullScreenRenderer.getRenderer().resetCamera();
fullScreenRenderer.getRenderWindow().render();
}