Получение глобального нормального от hitTest.face.normal - PullRequest
0 голосов
/ 30 апреля 2020

Я делаю хит-тест, чтобы создать плоскость сечения на грани лица. Чтобы получить нормальное глобальное значение, мне нужно переделать hitTest.face.normal. Кажется, что почти работает, но мой результат, кажется, немного отличается от фактической нормы, поэтому я думаю, что я делаю что-то не так:

const normalMatrix = new THREE.Matrix3().getNormalMatrix( this.hitTest.object.matrixWorld );
const normal = this.hitTest.face.normal.clone().applyMatrix3( normalMatrix )

this.SectionExtension.tool.setSectionPlane(normal, this.hitTest.point)

Как видно на на картинке моя конечная плоскость среза немного отклонена от фактической плоскости

Может кто-нибудь увидеть, что может быть не так при получении самолета, или у кого-нибудь есть лучший способ найти глобальную нормаль?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 11 мая 2020

Если кому-то будет интересно, то я нашел решение своей проблемы. Почему-то при запуске

const currentFragId = this.hitTest.fragId;
const renderProxy = this.viewer.impl.getRenderProxy(this.viewer.model,currentFragId);

Перед использованием нормаль помог мне получить правильный нормаль. Я не использую 'renderProxy' для чего-либо - но я предполагаю, что это каким-то образом помогает зрителю. Во всяком случае - это работает для меня!

0 голосов
/ 04 мая 2020

Не могли бы вы поделиться более подробной информацией о том, каким должно быть нормальное лицо? Вот фрагмент кода, показывающий, как контекстное меню зрителя Section Plane создает плоскость сечения на основе точки попадания лица. Это может помочь.

const selected = viewer.getSelection();
const intersection = viewer.impl.hitTest(status.canvasX, status.canvasY, false, selected);

// Ensure that the selected object is the on that recieved the context click.
if (intersection && intersection.face && selected.indexOf(intersection.dbId) !== -1) {
    sectionExtension.tool.setSectionPlane(section, intersection.face.normal, intersection.point);
}
...