2013-07-12 1 views
6

Я разрабатываю приложение с three.js, но я столкнулся с этой проблемой, и я не могу найти решение. Я хочу определить, какие сетки видны прямо сейчас в зависимости от того, где камера в данный момент нацеливается, поэтому я могу обновлять свои объекты (данные поступают из службы) или нет, в зависимости от того, отображаются ли они в окне просмотра.Определить, видна ли сетка в окне просмотра в соответствии с текущей камерой

Я использую THREE.js в режиме CANVAS (я нашел решение с использованием WebGL, которое говорит, что если объекты визуализированы или нет, но мне нужен CANVAS для этого проекта).

Я пытаюсь найти, если three.js устанавливает как-то свойство указать, является ли объект видимым или нет (в настоящее время на экране, а не во всем мире 3D), но я не могу его найти. Ячейки имеют свойство visible:, но это всегда верно, даже если камера не нацелена на этот объект.

+0

исследования усеченного выбраковки –

ответ

14

Это код, вы после:

var frustum = new THREE.Frustum(); 
var cameraViewProjectionMatrix = new THREE.Matrix4(); 

// every time the camera or objects change position (or every frame) 

camera.updateMatrixWorld(); // make sure the camera matrix is updated 
camera.matrixWorldInverse.getInverse(camera.matrixWorld); 
cameraViewProjectionMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse); 
frustum.setFromMatrix(cameraViewProjectionMatrix); 

// frustum is now ready to check all the objects you need 

console.log(frustum.intersectsObject(object)); 
+0

Спасибо! Я попробую это и дам вам знать, если это сработает. – Julian

+0

im пытается код, но im получает «неопределенный метод» с помощью камерыViewProjectionMatrix.multiplyMatrices, вы знаете, почему? было ваше намерение использовать .multiply (a, b)? Благодарю. – Julian

+1

О, нононо, мне плохо. Использование старой версии three.js (rev 54). Я обновлю. – Julian