rendered paste bodyusing Forever.Stars.NScene;
namespace Forever {
module Forever {
Cube(size : float * float * float) : list [NObject.Triangle] {
def (x, y, z) = (
size[0] / 2.0f,
size[1] / 2.0f,
size[2] / 2.0f
);
[
// Back
NObject.Triangle(
NObject.Point((-x, -y, -z)),
NObject.Point((+x, -y, -z)),
NObject.Point((+x, +y, -z))
),
NObject.Triangle(
NObject.Point((+x, +y, -z)),
NObject.Point((-x, +y, -z)),
NObject.Point((-x, -y, -z))
),
// Front
NObject.Triangle(
NObject.Point((-x, -y, +z)),
NObject.Point((+x, -y, +z)),
NObject.Point((+x, +y, +z))
),
NObject.Triangle(
NObject.Point((+x, +y, +z)),
NObject.Point((-x, +y, +z)),
NObject.Point((-x, -y, +z))
),
// Top
NObject.Triangle(
NObject.Point((-x, -y, -z)),
NObject.Point((-x, -y, +z)),
NObject.Point((+x, -y, +z))
),
NObject.Triangle(
NObject.Point((+x, -y, +z)),
NObject.Point((+x, -y, -z)),
NObject.Point((-x, -y, -z))
),
// Bottom
NObject.Triangle(
NObject.Point((-x, +y, -z)),
NObject.Point((-x, +y, +z)),
NObject.Point((+x, +y, +z))
),
NObject.Triangle(
NObject.Point((+x, +y, +z)),
NObject.Point((+x, +y, -z)),
NObject.Point((-x, +y, -z))
),
// Left
NObject.Triangle(
NObject.Point((-x, -y, -z)),
NObject.Point((-x, -y, +z)),
NObject.Point((-x, +y, +z))
),
NObject.Triangle(
NObject.Point((-x, +y, +z)),
NObject.Point((-x, +y, -z)),
NObject.Point((-x, -y, -z))
),
// Right
NObject.Triangle(
NObject.Point((+x, -y, -z)),
NObject.Point((+x, -y, +z)),
NObject.Point((+x, +y, +z))
),
NObject.Triangle(
NObject.Point((+x, +y, +z)),
NObject.Point((+x, +y, -z)),
NObject.Point((+x, -y, -z))
),
]
}
public Main() : void {
def unit = 1.0f;
def group = NObject.Group(
[
NObject.Transform(
Center=(0.0f, 0.0f, 0.0f),
Rotation=(0.0f, 0.5f, 0.2f, 0.7f),
Scale=(10.0f, 10.0f, 10.0f),
Object=NObject.Mesh(
Color=(1.0f, 1.0f, 1.0f, 1.0f),
Triangles=Cube(1.0f, 1.0f, 1.0f)
)
)
],
Callback=fun(obj : NObject) : NObject {
| Transform(center, rotation, scale, obj) =>
NObject.Transform(
center,
(
(rotation[0] + unit) % 360.0f,
rotation[1],
rotation[2],
rotation[3]
),
scale,
obj
)
| obj => obj
}
);
def backend = OpenGL(
NObject.Scene(
group
)
);
backend.Setup(500, 500);
backend.RenderScene();
}
}
}