forked from openvdb/fvdb-core
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvoxel_neighborhood.py
More file actions
47 lines (32 loc) · 1.22 KB
/
Copy pathvoxel_neighborhood.py
File metadata and controls
47 lines (32 loc) · 1.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# Copyright Contributors to the OpenVDB Project
# SPDX-License-Identifier: Apache-2.0
#
import fvdb.viz as fviz
import numpy as np
import polyscope as ps
import torch
from fvdb.utils.examples import load_dragon_mesh
from fvdb import Grid
def main():
device = "cuda"
vox_size = 0.0075
vox_origin = (0, 0, 0)
N = 1
[p] = load_dragon_mesh(mode="v", skip_every=N, device=torch.device(device))
index = Grid.from_points(p, vox_size, vox_origin)
primal_voxels = index.ijk
nhood = index.neighbor_indexes(primal_voxels, 1, 0)
ps.init()
for _ in range(10):
randvox = np.random.randint(nhood.shape[0])
voxijk = primal_voxels[randvox]
nbrs = primal_voxels[nhood[randvox][nhood[randvox] >= 0]]
print(nhood[randvox])
nhood_ijk = torch.cat([voxijk.unsqueeze(0), nbrs], dim=0)
vp, ve = fviz.grid_edge_network(index)
vi, vei = fviz.grid_edge_network(Grid.from_ijk(nhood_ijk, voxel_size=vox_size, origin=vox_origin))
ps.register_curve_network("vox", vp.cpu().numpy(), ve.cpu().numpy(), radius=0.0025)
ps.register_curve_network("nhd", vi.cpu().numpy(), vei.cpu().numpy(), radius=0.005)
ps.show()
if __name__ == "__main__":
main()