using System; using OpenTK; using org.budnhead.core; namespace org.budnhead.graphics.primitives { public class Cube : WorldObject { public Cube(Vector3 position, float width) { Scale.Value = Matrix4.CreateScale(width); Position.Value = position; } public override Model3D getModel3D() { return CubeModel.inst; } } class CubeModel : Model3D { public static Vector4[] ccolors = new Vector4[]{ new Vector4(1.0f,0.0f,0.0f,1.0f), new Vector4(1.0f,0.0f,0.0f,1.0f), new Vector4(1.0f,0.0f,0.0f,1.0f), new Vector4(1.0f,1.0f,0.0f,1.0f), new Vector4(0.0f,0.9f,0.0f,1.0f), new Vector4(0.0f,0.9f,0.0f,1.0f), new Vector4(0.0f,0.9f,0.0f,1.0f), new Vector4(0.0f,0.9f,1.0f,1.0f), new Vector4(0.0f,0.0f,1.0f,1.0f), new Vector4(0.0f,0.0f,1.0f,1.0f), new Vector4(0.0f,0.0f,1.0f,1.0f), new Vector4(1.0f,0.0f,1.0f,1.0f) }; public static CubeModel inst = new CubeModel(); public CubeModel(){ Vector3 dx, dy, dz; Vector3 a, b, c, d, e, f, g, h; dx = (Vector3.UnitX / 2); dy = (Vector3.UnitY / 2); dz = (Vector3.UnitZ / 2); a = - dx - dy - dz; b = dx - dy - dz; c = dx + dy - dz; d = - dx + dy - dz; e = - dx - dy + dz; f = dx - dy + dz; g = dx + dy + dz; h = - dx + dy + dz; prepareBuffers(12); Model3D.setTriangle(vertexes, 0, c, b, a); Model3D.setTriangle(vertexes, 1, a, d, c); Model3D.setTriangle(vertexes, 2, h, e, f); Model3D.setTriangle(vertexes, 3, f, g, h); Model3D.setTriangle(vertexes, 4, d, a, e); Model3D.setTriangle(vertexes, 5, e, h, d); Model3D.setTriangle(vertexes, 6, g, f, b); Model3D.setTriangle(vertexes, 7, b, c, g); Model3D.setTriangle(vertexes, 8, f, e, a); Model3D.setTriangle(vertexes, 9, a, b, f); Model3D.setTriangle(vertexes, 10, d, h, g); Model3D.setTriangle(vertexes, 11, g, c, d); for (int n=0;n