【问题标题】:apply new layer to a slice of a volume webgl将新层应用于卷 webgl 的切片
【发布时间】:2012-07-05 20:14:20
【问题描述】:

我有两卷不同质量的卷 (.nrrd)。用户可以浏览图层。如果某个键被按下 我想以更好的质量加载卷的切片。

我的音量和这个差不多:lesson 10 xtk

我找到了:

volume.children[2].children[0].children[0].texture.file = "http://path/to/file.ext";

但如果我应用某种文件(.jpg、.dcm),则不会发生任何事情。

这是将切片更改为进入子级并更改纹理的正确方法吗?

或者我应该将选定的切片作为一个对象单独加载并以某种方式将其应用于“低质量体积”?


编辑: 这是我迄今为止尝试过的(我在 dcms 上遇到错误,但在 jpgs 上没有):

if (event.keyCode == 83) {  // "s"-button
    volume.children[2].children[0].children[0].texture.file = "http://localhost:3000/112.jpg";
    volume.children[2].children[0].children[0].modified();
    r.render();
}

edit2: 这是我的 r.onShowtime = function() {}

volume.children[2].children[0].texture.file = 'http://localhost:3000/112.jpg';
volume.children[2].children[0].visible = true; // to activate the first layer
volume.children[2].children[0].modified();
console.log(volume.children[2].children[0].visible +" "+ volume.children[2].children[0].texture.file);

它输出 "true hostname/112.jpg"

当我在 firebug 中检查 .jpg 时,标题是好的,但答案是“null”

当我用萤火虫检查 console.log(volume.children[2].children[0]);

.texture.file 设置为 hostname/112.jpg

当我进入“网络”时,.jpg 已成功传输


请注意 112.jpg 和 level.jpg 是一样的。第一个在 r.onShowtime 中加载,另一个在按键事件中加载。


编辑 3:volume.children[2].children[0] 属于“X.slice”类型,不是吗?

这是我的方法:jsFiddle

这是我的实际问题,但仍然无法正常工作:jsFiddle

【问题讨论】:

标签: webgl volume slice xtk


【解决方案1】:

嗯..

我认为文件设置器(以及注入类的其他设置器)中缺少对 object.modified() 的调用。让我们看看 Haehn 什么时候会来,如果他想在内部改变一些东西,但目前你可以尝试自己打电话吗?

你可以尝试修改纹理后添加:

volume.children[2].children[0].children[0].modified();

如果它不起作用,另外:

renderer.render();

编辑: 很奇怪,我做了一个类似的代码,它做了一些事情。您能否通过打开您的 javascript 控制台(Firefox、Chrome、...有一个)尝试类似的操作并告诉我您遇到的错误?

 renderer.onShowtime = {
   for (var i=0 ; i< volume.children[2].children.length ; i++) {
     volume.children[2].children[i].texture.file="myimage.jpeg";
     volume.children[2].children[i].modified();
   }
 }

在 onShowtime 中调用它很重要,因为在未加载卷之前,slicesX、slicesY... 不存在。

编辑2: 嘿,

感谢您添加的信息,我想我明白了!在我们的 renderer3D 的 render() 方法中,有一个关于 texture._dirty 标志的测试,你不能从框架外部进行更改。此外,带有纹理的第一次渲染使该标志为假,并且加载新纹理似乎不会将该标志设置回当前 XTK 中的真。所以,我认为,我们必须将它添加到 loader.load(texture, object) 方法中。我会在 Github 上做一个 issue,看看 Haehn 是怎么想的!

【讨论】:

  • 谢谢。我将它添加到我的代码中,但它没有改变纹理/切片。
  • 实际上我不明白为什么还有另一个“.children”-array。有体积 -> 轴 -> 切片。所以据此我必须更改 volume.children[2].children[0] 中的纹理,不是吗?但这也没有用...
  • 第三次调用孩子实际上调用了切片的边界:Volume>axis>slice>borders。查看我的帖子编辑,我需要更多信息!
  • 可能没有.texture的设置器吗?添加二传手会关闭我的问题吗? api.goxtk.com/slice.html
  • 关于 Edit2 : Mhh.. XTK 加载器使用 XHR (XMLHttpRequest) 从服务器获取文件,默认情况下此类请求具有相同的来源策略。不幸的是,Firefox 只是阻止了响应(并准确地说明了您所写的内容,没有错误),您还有其他浏览器来测试它吗?例如 Chrome 就更明确了。但奇怪的是,X.loader 应该抛出一个错误“加载失败”......你是在 localhost 中运行你的测试吗?使用 wamp 或等价物?
猜你喜欢
  • 2017-03-17
  • 1970-01-01
  • 2021-06-03
  • 2023-04-04
  • 2019-09-18
  • 1970-01-01
  • 2018-09-07
  • 2016-11-06
  • 2021-08-16
相关资源
最近更新 更多