Skip to content

Instantly share code, notes, and snippets.

@maasencioh
Last active March 12, 2017 20:04
Show Gist options
  • Save maasencioh/4a5f3e7cfb3744c500c73a0bdaaee7fa to your computer and use it in GitHub Desktop.
Save maasencioh/4a5f3e7cfb3744c500c73a0bdaaee7fa to your computer and use it in GitHub Desktop.
Tetrahedron
class Tetrahedron extends PlatonicSolid {
float ang = radians(120);
Tetrahedron() {
super();
}
public ArrayList<PVector> generateVertices () {
ArrayList<PVector> verticesArray = new ArrayList<PVector>();
verticesArray.add(new PVector(0, 0, radius));
verticesArray.add(new PVector(radius * sin(ang) * cos(0), radius * sin(ang) * sin(0), radius * cos(ang)));
verticesArray.add(new PVector(radius * sin(ang) * cos(ang), radius * sin(ang) * sin(ang), radius * cos(ang)));
verticesArray.add(new PVector(radius * sin(ang) * cos(2*ang), radius * sin(ang) * sin(2*ang), radius * cos(ang)));
return verticesArray;
}
// compute both solid vertices and pshape
public void buildShape() {
vertices = generateVertices();
shape = createShape();
shape.beginShape(TRIANGLES);
// first face
shape.vertex(vertices.get(0).x, vertices.get(0).y, vertices.get(0).z);
shape.vertex(vertices.get(1).x, vertices.get(1).y, vertices.get(1).z);
shape.vertex(vertices.get(2).x, vertices.get(2).y, vertices.get(2).z);
// second face
shape.vertex(vertices.get(1).x, vertices.get(1).y, vertices.get(1).z);
shape.vertex(vertices.get(2).x, vertices.get(2).y, vertices.get(2).z);
shape.vertex(vertices.get(3).x, vertices.get(3).y, vertices.get(3).z);
// third face
shape.vertex(vertices.get(0).x, vertices.get(0).y, vertices.get(0).z);
shape.vertex(vertices.get(1).x, vertices.get(1).y, vertices.get(1).z);
shape.vertex(vertices.get(3).x, vertices.get(3).y, vertices.get(3).z);
// fourth face
shape.vertex(vertices.get(0).x, vertices.get(0).y, vertices.get(0).z);
shape.vertex(vertices.get(2).x, vertices.get(2).y, vertices.get(2).z);
shape.vertex(vertices.get(3).x, vertices.get(3).y, vertices.get(3).z);
shape.endShape();
}
// transfer geometry every frame
public void drawImmediate() {
vertices = generateVertices();
beginShape(TRIANGLES);
// first face
vertex(vertices.get(0).x, vertices.get(0).y, vertices.get(0).z);
vertex(vertices.get(1).x, vertices.get(1).y, vertices.get(1).z);
vertex(vertices.get(2).x, vertices.get(2).y, vertices.get(2).z);
// second face
vertex(vertices.get(1).x, vertices.get(1).y, vertices.get(1).z);
vertex(vertices.get(2).x, vertices.get(2).y, vertices.get(2).z);
vertex(vertices.get(3).x, vertices.get(3).y, vertices.get(3).z);
// third face
vertex(vertices.get(0).x, vertices.get(0).y, vertices.get(0).z);
vertex(vertices.get(1).x, vertices.get(1).y, vertices.get(1).z);
vertex(vertices.get(3).x, vertices.get(3).y, vertices.get(3).z);
// fourth face
vertex(vertices.get(0).x, vertices.get(0).y, vertices.get(0).z);
vertex(vertices.get(2).x, vertices.get(2).y, vertices.get(2).z);
vertex(vertices.get(3).x, vertices.get(3).y, vertices.get(3).z);
endShape();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment