Пример #1
0
        void GenerateGeometry(GraphicsDevice device, int DensityFieldSize)
        {
            byte[] DensityField;
            byte   IsoValue = 127;

            DensityField = new byte[DensityFieldSize * DensityFieldSize * DensityFieldSize];
            Vector3 center = Vector3.One * DensityFieldSize * 0.5f;
            Vector3 minPos = center;
            Vector3 maxPos = center;

            float radius = DensityFieldSize / 2;

            for (int x = 0; x < DensityFieldSize; x++)
            {
                for (int y = 1; y < (DensityFieldSize - 1); y++)
                {
                    for (int z = 0; z < DensityFieldSize; z++)
                    {
                        Vector3 pos = new Vector3(x, y, z);

                        float density = MathHelper.Clamp(1.0f - (pos - center).Length() / radius, 0, 1);
                        if (density > 0.0f)
                        {
                            pos    = (pos / DensityFieldSize) * 2.0f - Vector3.One;
                            minPos = Vector3.Min(pos, minPos);
                            maxPos = Vector3.Max(pos, maxPos);
                        }
                        DensityField[x + (y + z * DensityFieldSize) * DensityFieldSize] = (byte)(density * 255.0f);
                    }
                }
            }

            Geometry = new VoxelGeometry();
            Geometry.GenerateGeometry(device, ref DensityField, IsoValue, DensityFieldSize, DensityFieldSize, DensityFieldSize, DensityFieldSize - 1, DensityFieldSize - 1, DensityFieldSize - 1, 0, 0, 0, 2.0f / (float)(DensityFieldSize - 1), Matrix.Identity);
        }
Пример #2
0
 public void add(VoxelGeometry geometry)
 {
     _list.Add(geometry);
 }
Пример #3
0
		void InitSector()
		{
			int i;


			solid_geometry = new VoxelGeometry();
			transparent_geometry = new VoxelGeometry();
			custom_geometry = new VoxelGeometry();

			//Pos_x = 0; Pos_y = 0; Pos_z = 0;
			Handle_x = Handle_y = Handle_z = 0;
			ZoneType = 0;
			ZoneVersion = 0;
			GeneratorVersion = 0;
			RingNum = 65535;
#if VOXEL_CULLER
			Culling = 0;
#endif
			Data = new VoxelData( Size_x * Size_y * Size_z );

			for( int r = 0; r < 6; r++ )
			{
				near_sectors[r] = null;
			}
			Flag_Render_Dirty = true;
			Flag_HighPriorityRefresh = false;
			Flag_Void_Regular = true;
			Flag_Void_Transparent = true;
			Flag_IsVisibleAtLastRendering = false;
			Flag_DeletePending = false;
			Flag_NeedFullCulling = false;
			Flag_KeepInMemory = false;
			Flag_IsModified = ModifiedFieldFlags.NONE;
			Flag_IsSlowGeneration = false;
			Flag_IsActiveVoxels = false;
			Flag_IsActiveLowRefresh = false;
			Flag_NeedSortedRendering = false;
			PartialCulling = 0;
			RefreshWaitCount = 0;
			LowRefresh_Mask = 0x0F;
		}