__global__ void kernelInsertMetaPointCloud(Voxel* voxelmap, const MetaPointCloudStruct* meta_point_cloud, VoxelType* voxel_types, const Vector3ui *map_dim, const float voxel_side_length) { const Vector3ui dimensions = (*map_dim); for (uint32_t i = blockIdx.x * blockDim.x + threadIdx.x; i < meta_point_cloud->accumulated_cloud_size; i += blockDim.x * gridDim.x) { uint32_t voxel_type_index = i / meta_point_cloud->cloud_sizes[0]; const Vector3ui integer_coordinates = mapToVoxels(voxel_side_length, meta_point_cloud->clouds_base_addresses[0][i]); // printf("Point @(%f,%f,%f)\n", // meta_point_cloud->clouds_base_addresses[0][i].x, // meta_point_cloud->clouds_base_addresses[0][i].y, // meta_point_cloud->clouds_base_addresses[0][i].z); //check if point is in the range of the voxel map if ((integer_coordinates.x < dimensions.x) && (integer_coordinates.y < dimensions.y) && (integer_coordinates.z < dimensions.z)) { Voxel* voxel = &voxelmap[getVoxelIndex(map_dim, integer_coordinates.x, integer_coordinates.y, integer_coordinates.z)]; voxel->insert(voxel_types[voxel_type_index]); // printf("Inserted Point @(%u,%u,%u) with type %u into the voxel map \n", // integer_coordinates.x, // integer_coordinates.y, // integer_coordinates.z, // voxel_types[voxel_type_index]); } else { printf("Point (%f,%f,%f) is not in the range of the voxel map \n", meta_point_cloud->clouds_base_addresses[0][i].x, meta_point_cloud->clouds_base_addresses[0][i].y, meta_point_cloud->clouds_base_addresses[0][i].z); } } }
__global__ void kernelInsertGlobalPointCloud(Voxel* voxelmap, const Vector3ui *map_dim, const float voxel_side_length, Vector3f* points, const std::size_t sizePoints, const uint32_t voxel_type) { const Vector3ui dimensions = (*map_dim); for (uint32_t i = blockIdx.x * blockDim.x + threadIdx.x; i < sizePoints; i += blockDim.x * gridDim.x) { const Vector3ui integer_coordinates = mapToVoxels(voxel_side_length, points[i]); //check if point is in the range of the voxel map if ((integer_coordinates.x < dimensions.x) && (integer_coordinates.y < dimensions.y) && (integer_coordinates.z < dimensions.z)) { Voxel* voxel = &voxelmap[getVoxelIndex(map_dim, integer_coordinates.x, integer_coordinates.y, integer_coordinates.z)]; voxel->insert(voxel_type); } else { printf("Point (%u,%u,%u) is not in the range of the voxel map \n", points[i].x, points[i].y, points[i].z); } } }