2013-09-02 4 views
1

Я использую Xtk, чтобы сделать виджет для измерения расстояний в томе. На сцене есть четыре объекта: объем, две сферы - куб. куб помещается в начале координат и сферы переводятся 30 единиц вдоль X и оси Y, каждый в противоположном направлении, как показано ниже:Неверный объемный ограничитель

https://docs.google.com/file/d/0B2oRl7iWfVvTaXAyckNTOC04RlE/edit?usp=sharing

куба и сферы размещены в правильном положении, но проблема возникает тогда, когда объем включен в сцене, изменение системы координат и перевод происхождения:

https://docs.google.com/file/d/0B2oRl7iWfVvTR3BJdk13Zm9BdTQ/edit?usp=sharing

resetBoundingBox() функция вызывается сразу после render(), но это не имеет никакого значения. Даже я попытался добавить сначала объекты, а затем тома в рендеринг без результата.

Сферы также можно перетаскивать, и на эту функцию также влияет изменение системы corrdinate, поскольку в момент начала движения сферы это преобразуется в отношении положения мыши.

Почему перевод происходит? Кажется, что объем влияет на сцену, сбрасывая resetBoundingBox().

ответ

0

Я думаю, что это происходит потому, что вы полагаете, что объем сосредоточен на (0, 0, 0), что является неправильным предположением.

1- Подсчитать реальный объем центр из коробки объема ограничивающего

var volume = new X.volume(); 
... 
var center = [volume.bbox[0] + (volume.bbox[1]-volume.bbox[0])/2, 
       volume.bbox[2] + (volume.bbox[3]-volume.bbox[2])/2, 
       volume.bbox[4] + (volume.bbox[5]-volume.bbox[4])/2 
       ] 
... 

2- Применить этот центр в качестве перевода на объекты сцены

Надеется, что это помогает

+0

Недостает разделение между 2 в вычитании. Это было бы примерно так: 'var center = [volume.bbox [0] + (volume.bbox [1] -volume.bbox [0])/2, volume.bbox [2] + (volume.bbox [3] -volume.bbox [2])/2, volume.bbox [4] + (volume.bbox [5] -volume.bbox [4])/2 ] ' Я не знал' У X.volume' был определен такой getter (bbox). Он не указан в ссылке API. Спасибо за информацию. – JPOV

+0

Спасибо, что подобрал опечатку, я ее исправил – Nicolas

0

вы должны вызвать resetBoundingBox() в onShowtime обратного вызова, как этот

r.onShowtime = function() { 

    r.resetBoundingBox(); 

} 

r.add(volume); 

Это связано с центрирующим сцену. Что-то, что должно быть необязательным в новой версии XTK.

+0

Спасибо, это сработало ! Но теперь объем отображается с переводом. Фактически, я провел несколько тестов с демонстрационными версиями Xtk с страницы github, и, похоже, это зависит от данных. В ** демо 10 ** Я создаю сферу в начале координат, она была хорошо отображена (оба сфера и объем были центрированы в начале координат), но в ** демо 11 ** сфера отображается в начале координат, но объем теперь (используя ваше решение). – JPOV

+0

Операции перевода не влияют на объемы. – JPOV

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