2015-01-21 3 views
0

Как получить обрезанные координаты через порт представления, здесь прикрепленное изображение может четко показать, что мне нужно., фиксирующий граничное значение объекта (THREE.Line)

enter image description here

моя потребность красный цвет отмечены координаты, может ли один дать свое предложение на то же самое. THREE.Line, я использовал его один объект (с THREE.LinePieces он построен)

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

+0

Вы должны указать пространство, в котором вы хотите, координаты: пространство мира, пространство клипа, пространство NDC или пространство экрана. – WestLangley

ответ

0

Вы можете создать усеченный от вашей проекции камеры матрицы.

var frustum = new THREE.Frustum(); 
var projectionScreenMatrix = new THREE.Matrix4(); 
projectionScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse); 
frustum.setFromMatrix(projectionScreenMatrix); 

то у вас есть усеченный с 6 самолетов frustum.planes.

Вы можете перебирать самолеты и найти точку пересечения с линией с помощью:

var plane; 
var line = ...your line piece... 
var intersect; 
var intersects = []; 
for(var i = 0; i < frustum.planes.length; i++){ 
    plane = frustum.planes[i]; 
    intersect = plane.intersectLine(line); 
    if(intersect === undefined || intersect.equals(line.start)){ 
     continue; 
    } 
    intersects.push(intersect); 
} 

Проблема здесь в том, что линия должна быть типа THREE.Line3, так что вы должны преобразовать объекты типа THREE.LinesPieces к нескольким объектам введите THREE.Line3 и проверьте все отдельно.

Этот код не проверен, а представляет собой концепцию, позволяющую вам понять, как справиться с этой проблемой.

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