87 lines
2.0 KiB
C#
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();
|
|
}
|
|
|
|
}
|
|
}
|