Example #1
0
        public void updateDraw(StaticShadowCaster shadowCaster)
        {
            var centerPos = Camera.main.transform.position / cellSize;
            int centerX   = (int)Mathf.Floor(centerPos.x + 0.5f);
            int centerZ   = (int)Mathf.Floor(centerPos.z + 0.5f);
            int shouldX   = getShouldPos(centerX, offsetX);
            int shouldZ   = getShouldPos(centerZ, offsetZ);

            bool lodChange = false;
            int  newlod    = centerX == shouldX && centerZ == shouldZ ? 0 : 1;

            if (newlod != lod)
            {
                lod       = newlod;
                lodChange = true;
            }

            ////if (lod == 0 || (shouldX == centerX && shouldZ == centerZ)) lodChange = true;
            if (lodChange || shouldX != currentX || shouldZ != currentZ)
            {
                currentX = shouldX;
                currentZ = shouldZ;

                var pos = testItem.position;
                pos.x             = currentX * cellSize;
                pos.z             = currentZ * cellSize;
                testItem.position = pos;



                if (lod == 0)
                {
                    currentLod0Index = index;
                    Shader.SetGlobalInt("_shadowmapLod0Index", currentLod0Index);
                }
                testItem.GetComponent <Renderer>().sharedMaterial.color = lod == 0?Color.blue :  color;
                shadowCaster.renderWithIndex(lod == 0?0:(index < currentLod0Index?index + 1: index), pos);
            }
        }
        // Use this for initialization
        void Start()
        {
            _shadowCaster = GetComponent <StaticShadowCaster>();
            cells         = new ShadowmapCell[3 * 3];
            for (int i = 0; i < cells.Length; i++)
            {
                int r        = i / 3;
                int c        = i % 3;
                var testItem = GameObject.CreatePrimitive(PrimitiveType.Cube);
                testItem.GetComponent <Collider>().enabled = false;
                testItem.transform.localScale = new Vector3(cellSize, 0.01f, cellSize);

                testItem.GetComponent <Renderer>().shadowCastingMode = ShadowCastingMode.Off;
                testItem.GetComponent <Renderer>().material.color    = new Color((float)r / 3, (float)c / 3,
                                                                                 0);
                testItem.transform.position = new Vector3(0, 1.4f, 0);
                cells[i] = new ShadowmapCell(c - 1, r - 1, testItem.transform, cellSize);
                testItem.GetComponent <Renderer>().enabled = false;
            }

            GetComponent <Camera>().orthographicSize = cellSize / 2 * Mathf.Sqrt(2);
        }