2012-06-18 1 views
0

У меня есть два тома (.nrrd) разных качеств. пользователь может просматривать слои. если нажата клавиша Я хочу загрузить кусочек тома с лучшим качеством.применить новый слой к кусочку тома webgl

мой объем похож на этот: 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); 

выводит «истинное имя хоста/112.jpg»

когда я проверить .jpg в поджигатель заголовок в порядке, но ответ «нулевой»

когда я инспектировать console.log (объем. дети [2] .children [0]); с поджигатель

.texture.file устанавливается на имя хоста/112.jpg

, когда я иду в "сеть" .jpg было передано успешно

enter image description here

enter image description here


enter image description here

обратите внимание, что 112.jpg и level.jpg совпадают. первый загружается в r.onShowtime, а другой загружается при событии с нажатой клавишей.


EDIT 3: volume.children [2] .children [0] имеет тип "X.slice", не так ли?

вот мой подход: jsFiddle

и это мой фактический вопрос и до сих пор не работает: jsFiddle

+0

Почему ответ «null»? я могу щелкнуть по ссылке, и появится изображение. я должен ждать событие с загруженным изображением или что-то в этом роде? – p0rter

+0

alright я попытался связать его с image.onload, как здесь: http://stackoverflow.com/questions/5933230/javascript-image-onload, но это не изменило поведения – p0rter

ответ

1

Mhh ..

Я думаю, что призыв к object.modified() отсутствует в файловый установщик (и в других сеттерах из классов инъекций). Посмотрим, когда придет Хейн, если он хочет что-то изменить внутренне, но на данный момент вы могли бы попытаться назвать это самим?

Вы можете попробовать добавить после изменения текстуры:

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

И если он не работает, кроме того:

renderer.render(); 

Edit: Это странно, я сделал аналогичный код, и он что-то сделал. Можете ли вы попробовать что-то подобное, открыв вашу консоль 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 ... не существует.

Edit2: Эй,

Благодаря информацию вы добавили я думаю, что у меня есть точка! В методе render() нашего renderer3D есть тест на флагов texture._dirty, который вы не можете изменить извне рамки. Кроме того, 1-й рендеринг с текстурой делает этот флаг ложным, а загрузка новой текстуры, похоже, не возвращает этот флаг в true в текущем XTK. Поэтому, я думаю, мы должны добавить его в метод loader.load (texture, object). Я расскажу о Гитубе и посмотрю, что Хэн думает об этом!

+0

спасибо. Я добавил его в свой код, но он не изменил текстуру/срез. – p0rter

+1

На самом деле я не понимаю, почему есть другой «.children» -array. есть объем -> ось -> срез. поэтому в соответствии с этим мне нужно изменить текстуру в ** volume.children [2] .children [0] ** не так ли? но это тоже не сработало ... – p0rter

+1

Третий вызов дочерним действиям вызывает границы среза: объем> ось> срез> границы. См. Мои изменения, мне нужна дополнительная информация! – Ricola3D

Смежные вопросы