class MD5Example
init : () ->
@top_node = new PXL.Node()
# Add a normal camera
@c = new PXL.Camera.MousePerspCamera new PXL.Math.Vec3(0,0,25)
@top_node.add @c
@ambientlight = new PXL.Light.AmbientLight new PXL.Colour.RGB(0.1, 0.1, 0.1)
@light = new PXL.Light.PointLight new PXL.Math.Vec3(0.0,10.0,10.0), new PXL.Colour.RGB(0.5,0.3,0.3)
@light2 = new PXL.Light.PointLight new PXL.Math.Vec3(-10.0,5.0,10.0), new PXL.Colour.RGB(0.0,0.9,0.9)
cuboid = new PXL.Geometry.Cuboid new PXL.Math.Vec3 1,1,1
cuboid_node = new PXL.Node cuboid, new PXL.Material.NormalMaterial()
cuboid_node.matrix.translate @light.pos
@top_node.add @light
@top_node.add @ambientlight
@top_node.add cuboid_node
# Create a promise that resolves if the MD5 Model loads correctly
@promise = new PXL.Util.Promise()
@promise.then () =>
g.matrix.rotate new PXL.Math.Vec3(1,0,0), -0.5 * PXL.Math.PI
g.matrix.scale new PXL.Math.Vec3 0.1, 0.1, 0.1
@top_node.add g
# Create shaders once everything has loaded
uber = new PXL.GL.UberShader(@top_node)
@top_node.add uber
@g = g
GL.enable(GL.CULL_FACE)
GL.cullFace(GL.BACK)
GL.enable(GL.DEPTH_TEST)
# Create a new model, passing in the promise
g = new PXL.Import.MD5Model "../models/hellknight/hellknight.md5mesh", @promise
draw : () ->
GL.clearColor(0.95, 0.95, 0.95, 1.0)
GL.clear(GL.COLOR_BUFFER_BIT | GL.DEPTH_BUFFER_BIT)
@top_node.draw()
# Move the bone around if we've loaded the model
if @g?
bone = @g.skeleton.getBoneByName "luparm"
q = PXL.Math.Quaternion.fromRotations 0,0.001,0
bone.rotate q
example = new MD5Example()
params =
canvas : 'webgl-canvas'
context : example
init : example.init
draw : example.draw
debug : true
cgl = new PXL.App params