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); }
public void add(VoxelGeometry geometry) { _list.Add(geometry); }
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; }