budnhead/org.budnhead/graphics/primitives/Cube.cs

87 lines
2.0 KiB
C#

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<colors.Length;n++){
this.colors[n] = CubeModel.ccolors[ n / 3 ];
}
computeNormals();
rebind();
}
}
}