mirror of
https://github.com/facebookresearch/pytorch3d.git
synced 2026-03-07 04:36:00 +08:00
Summary: Torch CUDA extension for Marching Cubes - MC involving 3 steps: - 1st forward pass to collect vertices and occupied state for each voxel - Compute compactVoxelArray to skip non-empty voxels - 2nd pass to genereate interpolated vertex positions and faces by marching through the grid - In contrast to existing MC: - Bind each interpolated vertex with a global edge_id to address floating-point precision - Added deduplication process to remove redundant vertices and faces Benchmarks (ms): | N / V(^3) | python | C++ | CUDA | Speedup | | 2 / 20 | 12176873 | 24338 | 4363 | 2790x/5x| | 1 / 100 | - | 3070511 | 27126 | 113x | | 2 / 100 | - | 5968934 | 53129 | 112x | | 1 / 256 | - | 61278092 | 430900 | 142x | | 2 / 256 | - |125687930 | 856941 | 146x | Reviewed By: kjchalup Differential Revision: D39644248 fbshipit-source-id: d679c0c79d67b98b235d12296f383d760a00042a
295 lines
15 KiB
C
295 lines
15 KiB
C
/*
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#pragma once
|
|
using uint = unsigned int;
|
|
|
|
// A table mapping from cubeindex to a list of face configurations.
|
|
// Each list contains at most 5 faces, where each face is represented with
|
|
// 3 consecutive numbers
|
|
// Table adapted from http://paulbourke.net/geometry/polygonise/
|
|
//
|
|
#define X 255
|
|
const unsigned char _FACE_TABLE[256][16] = {
|
|
{X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X},
|
|
{0, 8, 3, X, X, X, X, X, X, X, X, X, X, X, X, X},
|
|
{0, 1, 9, X, X, X, X, X, X, X, X, X, X, X, X, X},
|
|
{1, 8, 3, 9, 8, 1, X, X, X, X, X, X, X, X, X, X},
|
|
{1, 2, 10, X, X, X, X, X, X, X, X, X, X, X, X, X},
|
|
{0, 8, 3, 1, 2, 10, X, X, X, X, X, X, X, X, X, X},
|
|
{9, 2, 10, 0, 2, 9, X, X, X, X, X, X, X, X, X, X},
|
|
{2, 8, 3, 2, 10, 8, 10, 9, 8, X, X, X, X, X, X, X},
|
|
{3, 11, 2, X, X, X, X, X, X, X, X, X, X, X, X, X},
|
|
{0, 11, 2, 8, 11, 0, X, X, X, X, X, X, X, X, X, X},
|
|
{1, 9, 0, 2, 3, 11, X, X, X, X, X, X, X, X, X, X},
|
|
{1, 11, 2, 1, 9, 11, 9, 8, 11, X, X, X, X, X, X, X},
|
|
{3, 10, 1, 11, 10, 3, X, X, X, X, X, X, X, X, X, X},
|
|
{0, 10, 1, 0, 8, 10, 8, 11, 10, X, X, X, X, X, X, X},
|
|
{3, 9, 0, 3, 11, 9, 11, 10, 9, X, X, X, X, X, X, X},
|
|
{9, 8, 10, 10, 8, 11, X, X, X, X, X, X, X, X, X, X},
|
|
{4, 7, 8, X, X, X, X, X, X, X, X, X, X, X, X, X},
|
|
{4, 3, 0, 7, 3, 4, X, X, X, X, X, X, X, X, X, X},
|
|
{0, 1, 9, 8, 4, 7, X, X, X, X, X, X, X, X, X, X},
|
|
{4, 1, 9, 4, 7, 1, 7, 3, 1, X, X, X, X, X, X, X},
|
|
{1, 2, 10, 8, 4, 7, X, X, X, X, X, X, X, X, X, X},
|
|
{3, 4, 7, 3, 0, 4, 1, 2, 10, X, X, X, X, X, X, X},
|
|
{9, 2, 10, 9, 0, 2, 8, 4, 7, X, X, X, X, X, X, X},
|
|
{2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, X, X, X, X},
|
|
{8, 4, 7, 3, 11, 2, X, X, X, X, X, X, X, X, X, X},
|
|
{11, 4, 7, 11, 2, 4, 2, 0, 4, X, X, X, X, X, X, X},
|
|
{9, 0, 1, 8, 4, 7, 2, 3, 11, X, X, X, X, X, X, X},
|
|
{4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, X, X, X, X},
|
|
{3, 10, 1, 3, 11, 10, 7, 8, 4, X, X, X, X, X, X, X},
|
|
{1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, X, X, X, X},
|
|
{4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, X, X, X, X},
|
|
{4, 7, 11, 4, 11, 9, 9, 11, 10, X, X, X, X, X, X, X},
|
|
{9, 5, 4, X, X, X, X, X, X, X, X, X, X, X, X, X},
|
|
{9, 5, 4, 0, 8, 3, X, X, X, X, X, X, X, X, X, X},
|
|
{0, 5, 4, 1, 5, 0, X, X, X, X, X, X, X, X, X, X},
|
|
{8, 5, 4, 8, 3, 5, 3, 1, 5, X, X, X, X, X, X, X},
|
|
{1, 2, 10, 9, 5, 4, X, X, X, X, X, X, X, X, X, X},
|
|
{3, 0, 8, 1, 2, 10, 4, 9, 5, X, X, X, X, X, X, X},
|
|
{5, 2, 10, 5, 4, 2, 4, 0, 2, X, X, X, X, X, X, X},
|
|
{2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, X, X, X, X},
|
|
{9, 5, 4, 2, 3, 11, X, X, X, X, X, X, X, X, X, X},
|
|
{0, 11, 2, 0, 8, 11, 4, 9, 5, X, X, X, X, X, X, X},
|
|
{0, 5, 4, 0, 1, 5, 2, 3, 11, X, X, X, X, X, X, X},
|
|
{2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, X, X, X, X},
|
|
{10, 3, 11, 10, 1, 3, 9, 5, 4, X, X, X, X, X, X, X},
|
|
{4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, X, X, X, X},
|
|
{5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, X, X, X, X},
|
|
{5, 4, 8, 5, 8, 10, 10, 8, 11, X, X, X, X, X, X, X},
|
|
{9, 7, 8, 5, 7, 9, X, X, X, X, X, X, X, X, X, X},
|
|
{9, 3, 0, 9, 5, 3, 5, 7, 3, X, X, X, X, X, X, X},
|
|
{0, 7, 8, 0, 1, 7, 1, 5, 7, X, X, X, X, X, X, X},
|
|
{1, 5, 3, 3, 5, 7, X, X, X, X, X, X, X, X, X, X},
|
|
{9, 7, 8, 9, 5, 7, 10, 1, 2, X, X, X, X, X, X, X},
|
|
{10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, X, X, X, X},
|
|
{8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, X, X, X, X},
|
|
{2, 10, 5, 2, 5, 3, 3, 5, 7, X, X, X, X, X, X, X},
|
|
{7, 9, 5, 7, 8, 9, 3, 11, 2, X, X, X, X, X, X, X},
|
|
{9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, X, X, X, X},
|
|
{2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, X, X, X, X},
|
|
{11, 2, 1, 11, 1, 7, 7, 1, 5, X, X, X, X, X, X, X},
|
|
{9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, X, X, X, X},
|
|
{5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, X},
|
|
{11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, X},
|
|
{11, 10, 5, 7, 11, 5, X, X, X, X, X, X, X, X, X, X},
|
|
{10, 6, 5, X, X, X, X, X, X, X, X, X, X, X, X, X},
|
|
{0, 8, 3, 5, 10, 6, X, X, X, X, X, X, X, X, X, X},
|
|
{9, 0, 1, 5, 10, 6, X, X, X, X, X, X, X, X, X, X},
|
|
{1, 8, 3, 1, 9, 8, 5, 10, 6, X, X, X, X, X, X, X},
|
|
{1, 6, 5, 2, 6, 1, X, X, X, X, X, X, X, X, X, X},
|
|
{1, 6, 5, 1, 2, 6, 3, 0, 8, X, X, X, X, X, X, X},
|
|
{9, 6, 5, 9, 0, 6, 0, 2, 6, X, X, X, X, X, X, X},
|
|
{5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, X, X, X, X},
|
|
{2, 3, 11, 10, 6, 5, X, X, X, X, X, X, X, X, X, X},
|
|
{11, 0, 8, 11, 2, 0, 10, 6, 5, X, X, X, X, X, X, X},
|
|
{0, 1, 9, 2, 3, 11, 5, 10, 6, X, X, X, X, X, X, X},
|
|
{5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, X, X, X, X},
|
|
{6, 3, 11, 6, 5, 3, 5, 1, 3, X, X, X, X, X, X, X},
|
|
{0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, X, X, X, X},
|
|
{3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, X, X, X, X},
|
|
{6, 5, 9, 6, 9, 11, 11, 9, 8, X, X, X, X, X, X, X},
|
|
{5, 10, 6, 4, 7, 8, X, X, X, X, X, X, X, X, X, X},
|
|
{4, 3, 0, 4, 7, 3, 6, 5, 10, X, X, X, X, X, X, X},
|
|
{1, 9, 0, 5, 10, 6, 8, 4, 7, X, X, X, X, X, X, X},
|
|
{10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, X, X, X, X},
|
|
{6, 1, 2, 6, 5, 1, 4, 7, 8, X, X, X, X, X, X, X},
|
|
{1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, X, X, X, X},
|
|
{8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, X, X, X, X},
|
|
{7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, X},
|
|
{3, 11, 2, 7, 8, 4, 10, 6, 5, X, X, X, X, X, X, X},
|
|
{5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, X, X, X, X},
|
|
{0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, X, X, X, X},
|
|
{9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, X},
|
|
{8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, X, X, X, X},
|
|
{5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, X},
|
|
{0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, X},
|
|
{6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, X, X, X, X},
|
|
{10, 4, 9, 6, 4, 10, X, X, X, X, X, X, X, X, X, X},
|
|
{4, 10, 6, 4, 9, 10, 0, 8, 3, X, X, X, X, X, X, X},
|
|
{10, 0, 1, 10, 6, 0, 6, 4, 0, X, X, X, X, X, X, X},
|
|
{8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, X, X, X, X},
|
|
{1, 4, 9, 1, 2, 4, 2, 6, 4, X, X, X, X, X, X, X},
|
|
{3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, X, X, X, X},
|
|
{0, 2, 4, 4, 2, 6, X, X, X, X, X, X, X, X, X, X},
|
|
{8, 3, 2, 8, 2, 4, 4, 2, 6, X, X, X, X, X, X, X},
|
|
{10, 4, 9, 10, 6, 4, 11, 2, 3, X, X, X, X, X, X, X},
|
|
{0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, X, X, X, X},
|
|
{3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, X, X, X, X},
|
|
{6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, X},
|
|
{9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, X, X, X, X},
|
|
{8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, X},
|
|
{3, 11, 6, 3, 6, 0, 0, 6, 4, X, X, X, X, X, X, X},
|
|
{6, 4, 8, 11, 6, 8, X, X, X, X, X, X, X, X, X, X},
|
|
{7, 10, 6, 7, 8, 10, 8, 9, 10, X, X, X, X, X, X, X},
|
|
{0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, X, X, X, X},
|
|
{10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, X, X, X, X},
|
|
{10, 6, 7, 10, 7, 1, 1, 7, 3, X, X, X, X, X, X, X},
|
|
{1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, X, X, X, X},
|
|
{2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, X},
|
|
{7, 8, 0, 7, 0, 6, 6, 0, 2, X, X, X, X, X, X, X},
|
|
{7, 3, 2, 6, 7, 2, X, X, X, X, X, X, X, X, X, X},
|
|
{2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, X, X, X, X},
|
|
{2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, X},
|
|
{1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, X},
|
|
{11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, X, X, X, X},
|
|
{8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, X},
|
|
{0, 9, 1, 11, 6, 7, X, X, X, X, X, X, X, X, X, X},
|
|
{7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, X, X, X, X},
|
|
{7, 11, 6, X, X, X, X, X, X, X, X, X, X, X, X, X},
|
|
{7, 6, 11, X, X, X, X, X, X, X, X, X, X, X, X, X},
|
|
{3, 0, 8, 11, 7, 6, X, X, X, X, X, X, X, X, X, X},
|
|
{0, 1, 9, 11, 7, 6, X, X, X, X, X, X, X, X, X, X},
|
|
{8, 1, 9, 8, 3, 1, 11, 7, 6, X, X, X, X, X, X, X},
|
|
{10, 1, 2, 6, 11, 7, X, X, X, X, X, X, X, X, X, X},
|
|
{1, 2, 10, 3, 0, 8, 6, 11, 7, X, X, X, X, X, X, X},
|
|
{2, 9, 0, 2, 10, 9, 6, 11, 7, X, X, X, X, X, X, X},
|
|
{6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, X, X, X, X},
|
|
{7, 2, 3, 6, 2, 7, X, X, X, X, X, X, X, X, X, X},
|
|
{7, 0, 8, 7, 6, 0, 6, 2, 0, X, X, X, X, X, X, X},
|
|
{2, 7, 6, 2, 3, 7, 0, 1, 9, X, X, X, X, X, X, X},
|
|
{1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, X, X, X, X},
|
|
{10, 7, 6, 10, 1, 7, 1, 3, 7, X, X, X, X, X, X, X},
|
|
{10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, X, X, X, X},
|
|
{0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, X, X, X, X},
|
|
{7, 6, 10, 7, 10, 8, 8, 10, 9, X, X, X, X, X, X, X},
|
|
{6, 8, 4, 11, 8, 6, X, X, X, X, X, X, X, X, X, X},
|
|
{3, 6, 11, 3, 0, 6, 0, 4, 6, X, X, X, X, X, X, X},
|
|
{8, 6, 11, 8, 4, 6, 9, 0, 1, X, X, X, X, X, X, X},
|
|
{9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, X, X, X, X},
|
|
{6, 8, 4, 6, 11, 8, 2, 10, 1, X, X, X, X, X, X, X},
|
|
{1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, X, X, X, X},
|
|
{4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, X, X, X, X},
|
|
{10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, X},
|
|
{8, 2, 3, 8, 4, 2, 4, 6, 2, X, X, X, X, X, X, X},
|
|
{0, 4, 2, 4, 6, 2, X, X, X, X, X, X, X, X, X, X},
|
|
{1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, X, X, X, X},
|
|
{1, 9, 4, 1, 4, 2, 2, 4, 6, X, X, X, X, X, X, X},
|
|
{8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, X, X, X, X},
|
|
{10, 1, 0, 10, 0, 6, 6, 0, 4, X, X, X, X, X, X, X},
|
|
{4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, X},
|
|
{10, 9, 4, 6, 10, 4, X, X, X, X, X, X, X, X, X, X},
|
|
{4, 9, 5, 7, 6, 11, X, X, X, X, X, X, X, X, X, X},
|
|
{0, 8, 3, 4, 9, 5, 11, 7, 6, X, X, X, X, X, X, X},
|
|
{5, 0, 1, 5, 4, 0, 7, 6, 11, X, X, X, X, X, X, X},
|
|
{11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, X, X, X, X},
|
|
{9, 5, 4, 10, 1, 2, 7, 6, 11, X, X, X, X, X, X, X},
|
|
{6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, X, X, X, X},
|
|
{7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, X, X, X, X},
|
|
{3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, X},
|
|
{7, 2, 3, 7, 6, 2, 5, 4, 9, X, X, X, X, X, X, X},
|
|
{9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, X, X, X, X},
|
|
{3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, X, X, X, X},
|
|
{6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, X},
|
|
{9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, X, X, X, X},
|
|
{1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, X},
|
|
{4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, X},
|
|
{7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, X, X, X, X},
|
|
{6, 9, 5, 6, 11, 9, 11, 8, 9, X, X, X, X, X, X, X},
|
|
{3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, X, X, X, X},
|
|
{0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, X, X, X, X},
|
|
{6, 11, 3, 6, 3, 5, 5, 3, 1, X, X, X, X, X, X, X},
|
|
{1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, X, X, X, X},
|
|
{0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, X},
|
|
{11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, X},
|
|
{6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, X, X, X, X},
|
|
{5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, X, X, X, X},
|
|
{9, 5, 6, 9, 6, 0, 0, 6, 2, X, X, X, X, X, X, X},
|
|
{1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, X},
|
|
{1, 5, 6, 2, 1, 6, X, X, X, X, X, X, X, X, X, X},
|
|
{1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, X},
|
|
{10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, X, X, X, X},
|
|
{0, 3, 8, 5, 6, 10, X, X, X, X, X, X, X, X, X, X},
|
|
{10, 5, 6, X, X, X, X, X, X, X, X, X, X, X, X, X},
|
|
{11, 5, 10, 7, 5, 11, X, X, X, X, X, X, X, X, X, X},
|
|
{11, 5, 10, 11, 7, 5, 8, 3, 0, X, X, X, X, X, X, X},
|
|
{5, 11, 7, 5, 10, 11, 1, 9, 0, X, X, X, X, X, X, X},
|
|
{10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, X, X, X, X},
|
|
{11, 1, 2, 11, 7, 1, 7, 5, 1, X, X, X, X, X, X, X},
|
|
{0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, X, X, X, X},
|
|
{9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, X, X, X, X},
|
|
{7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, X},
|
|
{2, 5, 10, 2, 3, 5, 3, 7, 5, X, X, X, X, X, X, X},
|
|
{8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, X, X, X, X},
|
|
{9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, X, X, X, X},
|
|
{9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, X},
|
|
{1, 3, 5, 3, 7, 5, X, X, X, X, X, X, X, X, X, X},
|
|
{0, 8, 7, 0, 7, 1, 1, 7, 5, X, X, X, X, X, X, X},
|
|
{9, 0, 3, 9, 3, 5, 5, 3, 7, X, X, X, X, X, X, X},
|
|
{9, 8, 7, 5, 9, 7, X, X, X, X, X, X, X, X, X, X},
|
|
{5, 8, 4, 5, 10, 8, 10, 11, 8, X, X, X, X, X, X, X},
|
|
{5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, X, X, X, X},
|
|
{0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, X, X, X, X},
|
|
{10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, X},
|
|
{2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, X, X, X, X},
|
|
{0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, X},
|
|
{0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, X},
|
|
{9, 4, 5, 2, 11, 3, X, X, X, X, X, X, X, X, X, X},
|
|
{2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, X, X, X, X},
|
|
{5, 10, 2, 5, 2, 4, 4, 2, 0, X, X, X, X, X, X, X},
|
|
{3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, X},
|
|
{5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, X, X, X, X},
|
|
{8, 4, 5, 8, 5, 3, 3, 5, 1, X, X, X, X, X, X, X},
|
|
{0, 4, 5, 1, 0, 5, X, X, X, X, X, X, X, X, X, X},
|
|
{8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, X, X, X, X},
|
|
{9, 4, 5, X, X, X, X, X, X, X, X, X, X, X, X, X},
|
|
{4, 11, 7, 4, 9, 11, 9, 10, 11, X, X, X, X, X, X, X},
|
|
{0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, X, X, X, X},
|
|
{1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, X, X, X, X},
|
|
{3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, X},
|
|
{4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, X, X, X, X},
|
|
{9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, X},
|
|
{11, 7, 4, 11, 4, 2, 2, 4, 0, X, X, X, X, X, X, X},
|
|
{11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, X, X, X, X},
|
|
{2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, X, X, X, X},
|
|
{9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, X},
|
|
{3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, X},
|
|
{1, 10, 2, 8, 7, 4, X, X, X, X, X, X, X, X, X, X},
|
|
{4, 9, 1, 4, 1, 7, 7, 1, 3, X, X, X, X, X, X, X},
|
|
{4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, X, X, X, X},
|
|
{4, 0, 3, 7, 4, 3, X, X, X, X, X, X, X, X, X, X},
|
|
{4, 8, 7, X, X, X, X, X, X, X, X, X, X, X, X, X},
|
|
{9, 10, 8, 10, 11, 8, X, X, X, X, X, X, X, X, X, X},
|
|
{3, 0, 9, 3, 9, 11, 11, 9, 10, X, X, X, X, X, X, X},
|
|
{0, 1, 10, 0, 10, 8, 8, 10, 11, X, X, X, X, X, X, X},
|
|
{3, 1, 10, 11, 3, 10, X, X, X, X, X, X, X, X, X, X},
|
|
{1, 2, 11, 1, 11, 9, 9, 11, 8, X, X, X, X, X, X, X},
|
|
{3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, X, X, X, X},
|
|
{0, 2, 11, 8, 0, 11, X, X, X, X, X, X, X, X, X, X},
|
|
{3, 2, 11, X, X, X, X, X, X, X, X, X, X, X, X, X},
|
|
{2, 3, 8, 2, 8, 10, 10, 8, 9, X, X, X, X, X, X, X},
|
|
{9, 10, 2, 0, 9, 2, X, X, X, X, X, X, X, X, X, X},
|
|
{2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, X, X, X, X},
|
|
{1, 10, 2, X, X, X, X, X, X, X, X, X, X, X, X, X},
|
|
{1, 3, 8, 9, 1, 8, X, X, X, X, X, X, X, X, X, X},
|
|
{0, 9, 1, X, X, X, X, X, X, X, X, X, X, X, X, X},
|
|
{0, 3, 8, X, X, X, X, X, X, X, X, X, X, X, X, X},
|
|
{X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X}};
|
|
#undef X
|
|
|
|
// Table mapping each edge to the corresponding cube vertices offsets
|
|
const uint _EDGE_TO_VERTICES[12][2] = {
|
|
{0, 1},
|
|
{1, 5},
|
|
{4, 5},
|
|
{0, 4},
|
|
{2, 3},
|
|
{3, 7},
|
|
{6, 7},
|
|
{2, 6},
|
|
{0, 2},
|
|
{1, 3},
|
|
{5, 7},
|
|
{4, 6},
|
|
};
|
|
|
|
// Table mapping from 0-7 to v0-v7 in cube.vertices
|
|
const int _INDEX_TABLE[8] = {0, 1, 5, 4, 2, 3, 7, 6};
|