Popraw mnie, jeśli się mylę, ale dlaczego po raz drugi policzyć frustum?
Pracuję nad złożonym projektem, a zaakceptowana odpowiedź nie jest dla mnie najlepszym rozwiązaniem. Nie widzę sensu przeliczania tego, co zostało obliczone. Dla mojego celu zmodyfikowałem kopię pliku three.js podnosząc flagę, jeśli coś zostało wykryte w kształcie stożka ściętego. Później po prostu sprawdzić na cel, jeżeli object.inFrustum === prawdziwej
Poniżej następujących linii
if (webglObjects && (object.frustumCulled === false || _frustum.intersectsObject(object) === true)) {
dodać
object.inFrustum = true;
także wtedy, gdy jeśli końce blokowe dodać flagę oposite
else {
object.inFrustum = false;
}
Mój końcowy wynik w r70, który działa idealnie:
if (webglObjects && (object.frustumCulled === false || _frustum.intersectsObject(object) === true)) {
object.inFrustum = true; // The line to add
for (var i = 0, l = webglObjects.length; i < l; i ++) {
var webglObject = webglObjects[i];
unrollBufferMaterial(webglObject);
webglObject.render = true;
if (_this.sortObjects === true) {
_vector3.setFromMatrixPosition(object.matrixWorld);
_vector3.applyProjection(_projScreenMatrix);
webglObject.z = _vector3.z;
}
}
} else { // Create second condition like that
object.inFrustum = false;
}
Chcę wiedzieć, czy stożek ścięty zawiera całą kostkę, ale nie działa przy użyciu tej metody ... jakiej metody mogę użyć? (Nie widzę żadnych wymienionych w [dokumentacja] (http://threejs.org/docs/#Reference/Math/Frustum)) – CodyBugstein
Możesz wziąć migawkę płótno obiektu w tym momencie, aby uzyskać planarna perspektywa obiektu. Znajdź linie tworzące migawkę wielokąta. Znasz już współrzędne matrycy frutum kamer. Teraz masz wielokąt wewnątrz lub na zewnątrz/zachodzenie na inny wielokąt. Użyj algorytmu wykrywania "Wielobok w wielokątach" (ang. Polygon in Polygon), aby uzyskać to, czego potrzebujesz! –