class ShapesExample
init : () ->
# Create the top node and add our camera
@top_node = new PXL.Node()
@c = new PXL.Camera.MousePerspCamera new PXL.Math.Vec3(0,0,25)
@top_node.add @c
# Create a cuboid with a basic material
# then translate the cube a little
cube_node = new PXL.Node new PXL.Geometry.Cuboid(new PXL.Math.Vec3(1,2,1))
cube_node.add new PXL.Material.BasicColourMaterial new PXL.Colour.RGB(1,0,0)
cube_node.matrix.translate new PXL.Math.Vec3(1,1,3)
# Create a cylinder with a basic material
# then translate it a litle
cylinder_node = new PXL.Node new PXL.Geometry.Cylinder(1,5,2,4)
cylinder_node.add new PXL.Material.BasicColourMaterial new PXL.Colour.RGB(0,1,0)
cylinder_node.matrix.translate new PXL.Math.Vec3(-1,0,-3)
# Create a sphere but add a per-vertex colour
sphere_node = new PXL.Node new PXL.Geometry.Sphere(1,12,new PXL.Colour.RGBA(0,0,1,1))
sphere_node.add new PXL.Material.VertexColourMaterial()
# Alter the first 27 vertices to be red
for i in [0..27]
sphere_node.geometry.vertices[i].c = new PXL.Colour.RGBA(1,0,0,1)
# Add all the nodes to the top node and call our ubershader
@top_node.add(cube_node).add(cylinder_node).add(sphere_node)
uber = new PXL.GL.UberShader @top_node
@top_node.add uber
# Basic GL Functions
GL.enable(GL.CULL_FACE)
GL.cullFace(GL.BACK)
GL.enable(GL.DEPTH_TEST)
# Create an angle in radians from degrees
angle = PXL.Math.degToRad 1
@rmatrix = new PXL.Math.Matrix4()
# Create a rotation matrix
@rmatrix.rotate new PXL.Math.Vec3(1,0,0), angle
@rmatrix.rotate new PXL.Math.Vec3(0,1,0), angle
@rmatrix.rotate new PXL.Math.Vec3(0,0,1), angle
draw : () ->
# Clear and draw our shapes
GL.clearColor(0.95, 0.95, 0.95, 1.0)
GL.clear(GL.COLOR_BUFFER_BIT | GL.DEPTH_BUFFER_BIT)
@top_node.draw()
# for each child node, multiply its matrix by the rotation matrix
for n in @top_node.children
n.matrix.mult @rmatrix
example = new ShapesExample()
params =
canvas : 'webgl-canvas'
context : example
init : example.init
draw : example.draw
debug : true
cgl = new PXL.App params