0

我想我已经熟悉这个库了。

1)我想像第10 课 那样进行体积渲染

我想检查用户是否按下“v”并运行一个函数

这是我尝试过的:

window.onload = function() {

    var r = new X.renderer3D();
    r.init();

    var volume = new X.volume();
    volume.file = 'http://lessons.goXTK.com/data/avf.nrrd';
    var vr = false;

    function vRender() {
        if (vr) {
            volume.volumeRendering = true;
            volume.opacity = 0.15;
            r.render();
        }
    }


    r.interactor.onKey = function(event) {
        if (event.keyCode == 86) {
            vr = true;
            vRender();
        }
    }

    r.add(volume);
    r.camera.position = [120, 80, 160];
    r.render();

};

2)我怎样才能抓住一个切片层或禁用三个轴中的两个?它的工作方式与我尝试过的类似吗?

var volume = new X.volume();
volume.file = 'http://lessons.goXTK.com/data/avf.nrrd';

volume.sliceX.visible = false;
volume.sliceZ.visible = false;

任何帮助,将不胜感激!

4

2 回答 2

1

1)我刚刚尝试了您的代码,它几乎可以完美运行。(不幸的是 onKey 事件在 JSFiddle 中不起作用,所以我不能发布小提琴)。

我刚刚添加了volume.modified()行来触发 aX.event.ModifiedEvent并确保切片和体积渲染之间的切换正确发生。

  function vRender() {

    if (vr) {

      volume.volumeRendering = true;
      volume.opacity = 0.15;
      **volume.modified();**
      r.render();
    }
  }


  r.interactor.onKey = function(event) {

    if (event.keyCode == 86) {
      vr = true;
      vRender();
    }
  };
于 2012-05-31T15:50:16.120 回答
1

2)

是的,以类似的方式是可能的。查看 JSFiddle

http://jsfiddle.net/haehn/qxMtk/

不同之处在于volume._sliceX它不可用(在编译期间不导出),因此您必须通过孩子。每个X.volume都有 3 个孩子 0,1,2,它们是 X,Y,Z 切片。

此外,必须先创建卷(在由 发起的解析期间发生r.render()),然后才能访问子项,因此我们必须在其中onShowtime或之后进行操作。

于 2012-05-31T15:39:29.027 回答