public GpuShape(VoxelCell[,,] shape) { Shape = new GpuShapeInfo { Bounds = DiscreteBounds.Of(shape), Voxels = Gpu.Default.Allocate(Flatten(shape)) }; }
public GpuSpaceBufferContext(uint buffer, DiscreteBounds bounds) { CUDAInterop.cuGLRegisterBufferObject(buffer); _buffer = buffer; _devicePointer = new deviceptr <VoxelFace>(GetDevicePointer()); _bounds = bounds; }
public GpuSpace(DiscreteBounds bounds) { _buffer = Gl.GenBuffer(); _texture = Gl.GenTexture(); Bounds = bounds; Gl.BindBuffer(BufferTarget.TextureBuffer, _buffer); Gl.BufferData(BufferTarget.TextureBuffer, (uint)Marshal.SizeOf <VoxelFace>() * (uint)bounds.Length, null, BufferUsage.DynamicDraw); }
private static VoxelCell[] Flatten(VoxelCell[,,] shape) { var bounds = DiscreteBounds.Of(shape); var flatShape = new VoxelCell[bounds.Length]; foreach (var coordinates in bounds) { flatShape[bounds.Index(coordinates)] = shape.At(coordinates); } return(flatShape); }
public static GpuShape LoadShape(string path, DiscreteBounds size, int borderSize) { var normalizedBounds = new Bounds { MinX = size.MinX + borderSize, MinY = size.MinY + borderSize, MinZ = size.MinZ + borderSize, MaxX = size.MaxX - borderSize, MaxY = size.MaxY - borderSize, MaxZ = size.MaxZ - borderSize, }; var stlShape = StlReader.LoadShape(path); var normalizedShape = ShapeNormalizer.NormalizeShape(stlShape, normalizedBounds); var voxelizedShape = VoxelSpaceBuilder.Build(normalizedShape, size); return(new GpuShape(voxelizedShape)); }
public void Load() { _gpuShape = ShapeLoader.LoadShape("./Examples/ball.stl", DiscreteBounds.OfSize(30, 30, 30), 5); }
public void Initialize() { _box = new Box(); _gpuSpace = new GpuSpace(DiscreteBounds.OfSize(30, 30, 30)); _program = new ShadingProgram(); }