GridGeometry function
Checkerboard with xstrips X ystrips fields of dim xlen X ylen centered around the origin
Implementation
GeometryBuilder GridGeometry(
int xstrips, int ystrips, double xlen, double ylen) {
final double xoffset = xlen * 0.5;
final double yoffset = ylen * 0.5;
final double xdelta = xlen / xstrips;
final double ydelta = xlen / ystrips;
VM.Vector3 normal = VM.Vector3(0.0, 0.0, 1.0);
List<VM.Vector3> vertices =
List.generate((xstrips + 1) * (ystrips + 1), (i) => VM.Vector3.zero());
List<VM.Vector3> normals =
List.generate((xstrips + 1) * (ystrips + 1), (i) => VM.Vector3.zero());
List<VM.Vector2> uvs =
List.generate((xstrips + 1) * (ystrips + 1), (i) => VM.Vector2.zero());
int index(int x, int y) {
return x * (xstrips + 1) + y;
}
for (int x = 0; x <= xstrips; ++x) {
for (int y = 0; y <= ystrips; ++y) {
final int ii = index(x, y);
vertices[ii] =
VM.Vector3(x * xdelta - xoffset, y * ydelta - yoffset, 0.0);
normals[ii] = normal;
uvs[ii] = VM.Vector2(x / xstrips, y / ystrips);
}
}
GeometryBuilder gb = GeometryBuilder();
gb.AddVertices(vertices);
for (int x = 0; x < xstrips; ++x) {
for (int y = 0; y < ystrips; ++y) {
gb.AddFace4(
index(x, y), index(x + 1, y), index(x + 1, y + 1), index(x, y + 1));
}
}
gb.EnableAttribute(aTexUV);
gb.AddAttributesVector2(aTexUV, uvs);
gb.EnableAttribute(aNormal);
gb.AddAttributesVector3(aNormal, normals);
return gb;
}