0

品質の異なる2つのボリューム(.nrrd)があります。ユーザーはレイヤーを閲覧できます。キーが押された場合、ボリュームのスライスをより良い品質でロードしたいと思います。

私のボリュームはこれに似ています:レッスン10 xtk

私が見つけた:

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

しかし、ある種のファイル(.jpg、.dcm)を適用しても、何も起こりません。

これは、スライスを変更して子の内部に入り、テクスチャを変更するための正しいアプローチですか?

または、選択したスライスをオブジェクトとして個別にロードし、それを「低品質ボリューム」に何らかの方法で適用する必要がありますか?


編集: これは私がこれまでに試したことです(私はdcmsではエラーが発生しますがjpgではエラーが発生しません):

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

「truehostname/112.jpg」を出力します

Firebugの.jpgを調べると、ヘッダーは問題ありませんが、答えは「null」です。

console.log(volume.children [2] .children [0]);を検査するとき ファイアバグで

.texture.fileはhostname/112.jpgに設定されます

「ネットワーク」に移動すると、.jpgが正常に転送されました

ここに画像の説明を入力してください

ここに画像の説明を入力してください


ここに画像の説明を入力してください

112.jpgとlevel.jpgは同じであることに注意してください。最初の1つはr.onShowtimeにロードされ、もう1つはキーが押されたイベントでロードされます。


編集3: volume.children [2] .children [0]は「X.slice」タイプですよね?

これが私のアプローチです:jsFiddle

これは私の実際の問題であり、まだ機能していません:jsFiddle

4

1 に答える 1

1

うーん。

object.modified()の呼び出しが、ファイルセッター(および他のインジェクトクラスのセッター)にないようです。ヘーンが内部的に何かを変えたいと思ったらいつ来るか見てみましょう、しかし今のところあなたはそれを自分で呼んでみてください。

テクスチャの変更後に追加を試みることができます:

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

そしてそれが機能しない場合は、さらに:

renderer.render();

編集: それは奇妙です、私は同様のコードを実行し、それは何かをしました。javascriptコンソール(Firefox、Chrome、...に1つあります)を開いてそのようなことを試して、発生したエラーを教えてください。

 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();
   }
 }

ボリュームがロードされない前に、slicesX、slicesY ...が存在しないため、onShowtimeで呼び出すことが重要です。

Edit2: ねえ、

あなたが追加した情報のおかげで、私はポイントを持っていると思います!renderer3Dのrender()メソッドには、texture._dirtyフラグのテストがあり、フレームワークの外部から変更することはできません。さらに、テクスチャを使用した最初のレンダリングではそのフラグがfalseになり、新しいテクスチャをロードしても、現在のXTKではそのフラグがtrueに戻らないようです。したがって、loader.load(texture、object)メソッドに追加する必要があると思います。Githubで問題を作成し、Haehnがそれについてどう思うかを確認します。

于 2012-06-19T08:17:19.453 に答える