| 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) |
| cur_verts[:, 0] += c1 |
| cur_verts[:, 2] += c2 |
| else: |
| cur_verts = np.stack([us, vs, zs], axis=-1) |
| 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) |
| 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 |