将AMI.js与XTK的体积渲染相结合

时间:2018-03-16 07:45:30

标签: xtk ami.js

我目前正在研究关于在浏览器中显示3D医疗数据的学士论文。因此,我正在编写一个可以显示DICOM图像和网格的应用程序。

据我所知,目前DICOM的体积渲染效果比使用XTK要好于ami.js。 DICOM的ami.js中的3D渲染结果不是很有用(仅最多12 fps)。我尝试渲染DICOM,就像在第6课的体积渲染示例中一样。

所以我的问题是:
我如何组合这两个框架,以便我可以使用XTK的3D体积渲染用于DICOM,但是ami.js的所有其他功能呢? 或者我如何使用ami.js的体积渲染,它会变好?

1 个答案:

答案 0 :(得分:1)

  

编辑:(2)中建议的改进已经实施,并在https://fnndsc.github.io/ami/#vr_singlepass

生效

AMI和XTK使用不同的技术进行体积渲染:

AMI支持:

  • 光线投射
  • MIP

XTK支持:

  • 基于纹理的

我建议只使用1个框架,具体取决于您的需求。

您是否看过AMI的体积渲染:https://fnndsc.github.io/ami/#vr_singlepass

可以使用许多技术来提高性能:

  • (1)仅在相机移动时渲染场景
  • (2)与场景交互时降低像素比率

AMI VR示例实现(1)。

实施(2):

使用setPixelRatio

初始化THREEJS渲染器
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():

// vrHelper.uniforms.uSteps.value = myStack.steps;
// vrHelper.interpolation = myStack.interpolation;
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(threeD.offsetWidth, threeD.offsetHeight);

在2个地方编辑onWheel():

// 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);

HTH,