Пример #1
0
        public void BuildVertices()
        {
            var mesh = GetMesh();

            mesh.Clear(false);

            Bounds.Clear();

            var step = Terrain.NormalStep;

            if (Terrain.Normals == SgtTerrain.NormalType.QuadStep)
            {
                var verts = (2 << Terrain.Subdivisions) + 1;
                var scale = 1 << Depth;

                step = 1.0f / (verts * scale);
            }

            SgtTerrainCompute.BeginFace(Terrain.ForceCPU);
            SgtTerrainCompute.SetFaceCorners(Side, CornerBL, CornerBR, CornerTL);
            SgtTerrainCompute.SetMain(Terrain.Radius, step, Terrain.NormalStrength, Terrain.HeightMap, Terrain.HeightScale);
            SgtTerrainCompute.SetDetail(Terrain.MaskMap, Terrain.DetailTiling, Terrain.DetailMapA, Terrain.DetailScaleA, Terrain.DetailMapB, Terrain.DetailScaleB);
            SgtTerrainCompute.DispatchFace(mesh, Terrain.Subdivisions, ref Bounds, Terrain.CenterMesh);

            Terrain.PositionChanged(Terrain.transform, this);

            //mesh.RecalculateBounds();
        }
        public SgtTerrainCompute.Output SampleLocalOutput(SgtVector3D localPoint)
        {
            SgtTerrainCompute.BeginPoint(ForceCPU);
            SgtTerrainCompute.SetMain(Radius, NormalStep, NormalStrength, HeightMap, HeightScale);
            SgtTerrainCompute.SetDetail(MaskMap, DetailTiling, DetailMapA, DetailScaleA, DetailMapA, DetailScaleB);

            return(SgtTerrainCompute.DispatchPoint((Vector3)localPoint));
        }