ThunderVVV's picture
update
5f028d6
raw
history blame
2.06 kB
import numpy as np
def checkerboard_geometry(
length=12.0,
color0=[172/255, 172/255, 172/255],
color1=[215/255, 215/255, 215/255],
tile_width=0.5,
alpha=1.0,
up="y",
c1=0.0,
c2=0.0,
):
assert up == "y" or up == "z"
color0 = np.array(color0 + [alpha])
color1 = np.array(color1 + [alpha])
radius = length / 2.0
num_rows = num_cols = max(2, int(length / tile_width))
vertices = []
vert_colors = []
faces = []
face_colors = []
for i in range(num_rows):
for j in range(num_cols):
u0, v0 = j * tile_width - radius, i * tile_width - radius
us = np.array([u0, u0, u0 + tile_width, u0 + tile_width])
vs = np.array([v0, v0 + tile_width, v0 + tile_width, v0])
zs = np.zeros(4)
if up == "y":
cur_verts = np.stack([us, zs, vs], axis=-1) # (4, 3)
cur_verts[:, 0] += c1
cur_verts[:, 2] += c2
else:
cur_verts = np.stack([us, vs, zs], axis=-1) # (4, 3)
cur_verts[:, 0] += c1
cur_verts[:, 1] += c2
cur_faces = np.array(
[[0, 1, 3], [1, 2, 3], [0, 3, 1], [1, 3, 2]], dtype=np.int64
)
cur_faces += 4 * (i * num_cols + j) # the number of previously added verts
use_color0 = (i % 2 == 0 and j % 2 == 0) or (i % 2 == 1 and j % 2 == 1)
cur_color = color0 if use_color0 else color1
cur_colors = np.array([cur_color, cur_color, cur_color, cur_color])
vertices.append(cur_verts)
faces.append(cur_faces)
vert_colors.append(cur_colors)
face_colors.append(cur_colors)
vertices = np.concatenate(vertices, axis=0).astype(np.float32)
vert_colors = np.concatenate(vert_colors, axis=0).astype(np.float32)
faces = np.concatenate(faces, axis=0).astype(np.float32)
face_colors = np.concatenate(face_colors, axis=0).astype(np.float32)
return vertices, faces, vert_colors, face_colors