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

86 lines
2.0 KiB
C#

using System;
using OpenTK;
namespace org.niclasundharald.engine.graphics.primitives
{
public class Cube : WorldObject
{
public Cube(Vector3 position, float width)
{
Scale = Matrix4.CreateScale(width);
Position = position;
}
public override Model3D getModel3D()
{
return CubeModel.inst;
}
}
class CubeModel : Model3D {
public static Vector4[] colors = 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;
Vector3[] vertexes = new Vector3[36];
Model3D.setTriangle(vertexes, 0, a, b, c);
Model3D.setTriangle(vertexes, 1, c, d, a);
Model3D.setTriangle(vertexes, 2, f, e, h);
Model3D.setTriangle(vertexes, 3, h, g, f);
Model3D.setTriangle(vertexes, 4, e, a, d);
Model3D.setTriangle(vertexes, 5, d, h, e);
Model3D.setTriangle(vertexes, 6, b, f, g);
Model3D.setTriangle(vertexes, 7, g, c, b);
Model3D.setTriangle(vertexes, 8, a, e, f);
Model3D.setTriangle(vertexes, 9, f, b, a);
Model3D.setTriangle(vertexes, 10, g, h, d);
Model3D.setTriangle(vertexes, 11, d, c, g);
Vector4[] colors = new Vector4[ vertexes.Length ];
for (int n=0;n<colors.Length;n++){
colors[n] = CubeModel.colors[ n / 3 ];
}
bind( vertexes, colors );
}
}
}