From 24dc612ae56d5bfbde20c54b5a7ed12f0457a95f Mon Sep 17 00:00:00 2001 From: Yaski Date: Fri, 27 Apr 2012 17:10:10 +0600 Subject: [PATCH] Omni cull catch --- .../engine3d/shadows/OmniLightShadow.as | 39 ++++++++++++++----- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/src/alternativa/engine3d/shadows/OmniLightShadow.as b/src/alternativa/engine3d/shadows/OmniLightShadow.as index 624f7d3..87086e7 100644 --- a/src/alternativa/engine3d/shadows/OmniLightShadow.as +++ b/src/alternativa/engine3d/shadows/OmniLightShadow.as @@ -216,7 +216,7 @@ package alternativa.engine3d.shadows { var castersCount:int = _casters.length; // calculating some transformation matrices - // TODO: not transform invisible objects + // TODO: skip invisible objects for (i = 0; i < castersCount; i++) { caster = _casters[i]; @@ -249,6 +249,14 @@ package alternativa.engine3d.shadows { // проверяем, есть ли видимые кастеры попадающие на грань куба actualCastersCount = 0; + numCulled = 0; + + var flipX:Boolean = edgeCamera.scaleX < 0; + var flipY:Boolean = edgeCamera.scaleY < 0; + edgeCamera.scaleX = 1; + edgeCamera.scaleY = 1; + edgeCamera.composeTransforms(); + for (j = 0; j < castersCount; j++) { caster = _casters[j]; @@ -264,6 +272,11 @@ package alternativa.engine3d.shadows { calculateVisibility(caster, edgeCamera); } } +// trace("face:" + i + " culled:" + numCulled + " rest:" + actualCastersCount); + + if (flipX) edgeCamera.scaleX = -1; + if (flipY) edgeCamera.scaleY = -1; + edgeCamera.composeTransforms(); if (actualCastersCount > 0) { // Настройка параметров рендеринга: @@ -272,7 +285,7 @@ package alternativa.engine3d.shadows { context.clear(1, 0, 0, 0.0); // Пробегаемся по кастерам - for (j = 0; j = 0) { + actualCasters[actualCastersCount] = root; + actualCastersCount++ + } // Если есть дочерние объекты, // Проверяем их на кулинг @@ -370,7 +390,6 @@ package alternativa.engine3d.shadows { } } - private function collectDraws(context:Context3D, caster:Object3D, edgeCamera:Camera3D):void{ // если объект является мешем, собираем для него дроуколы var mesh:Mesh = caster as Mesh;