Объединение AMI.js с объемной визуализацией XTK
В настоящее время я работаю над дипломной работой по отображению медицинских данных 3D в браузере. Поэтому я пишу приложение, которое может отображать изображения и сетки DICOM.
Насколько я вижу, объемный рендеринг DICOM лучше работает с XTK, чем с ami.js на данный момент. 3D-рендеринг в ami.js DICOM оказался не очень полезным (только макс. 12 кадров в секунду). Я попытался визуализировать DICOM так же, как в примере с объемным рендерингом в уроке 6.
Итак, мой вопрос:
Как я могу объединить две платформы, чтобы я мог использовать трехмерную визуализацию объема XTK для DICOM, но все другие функции из ami.js?
Или как мне использовать громкость рендеринга ami.js, чтобы получилось нормально?
1 ответ
Изменить: улучшение, предложенное в (2), было реализовано и доступно по адресу https://fnndsc.github.io/ami/
AMI и XTK используют разные методы для объемного рендеринга:
AMI поддерживает:
- Raycasting
- MIP
XTK поддерживает:
- Texture основе
Я бы порекомендовал использовать только 1 фреймворк, в зависимости от ваших потребностей.
Вы видели объемный рендеринг для AMI: https://fnndsc.github.io/ami/
Многие методы могут быть использованы для повышения производительности:
- (1) Сцена только для рендеринга при перемещении камеры
- (2) Уменьшить соотношение пикселей при взаимодействии со сценой
Пример AMI VR реализует (1).
Для реализации (2):
Инициализируйте рендерер THREEJS с помощью setPixelRatio
threeD = document.getElementById('r3d');
renderer = new THREE.WebGLRenderer({
alpha: true,
});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(threeD.offsetWidth, threeD.offsetHeight);
Отредактируйте onStart() в одном месте:
// vrHelper.uniforms.uSteps.value = Math.floor(myStack.steps / 2);
// vrHelper.interpolation = 0;
renderer.setPixelRatio(.1 * window.devicePixelRatio);
renderer.setSize(threeD.offsetWidth, threeD.offsetHeight);
Редактировать onEnd () в 1 месте:
// vrHelper.uniforms.uSteps.value = myStack.steps;
// vrHelper.interpolation = myStack.interpolation;
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(threeD.offsetWidth, threeD.offsetHeight);
Редактировать onWheel() в 2 местах:
// vrHelper.uniforms.uSteps.value = Math.floor(myStack.steps / 2);
// vrHelper.interpolation = 0;
renderer.setPixelRatio(.1 * window.devicePixelRatio);
renderer.setSize(threeD.offsetWidth, threeD.offsetHeight);
а также
wheelTO = setTimeout(function() {
// vrHelper.uniforms.uSteps.value = myStack.steps;
// vrHelper.interpolation = myStack.interpolation;
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(threeD.offsetWidth, threeD.offsetHeight);
НТН,