All pastes #987794 Raw Edit

Mine

public text v1 · immutable
#987794 ·published 2008-04-16 23:42 UTC
rendered paste body
using 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();
		}
	}
}