main.lua 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. -- Surround yourself with monkeys, efficiently
  2. function lovr.load()
  3. MONKEYS = 500
  4. -- Create some random transforms
  5. local transforms = {}
  6. local random, randomNormal = lovr.math.random, lovr.math.randomNormal
  7. for i = 1, MONKEYS do
  8. local position = vec3(randomNormal(8), randomNormal(8), randomNormal(8))
  9. local orientation = quat(random(2 * math.pi), random(), random(), random())
  10. local scale = vec3(.75)
  11. transforms[i] = mat4(position, scale, orientation)
  12. end
  13. -- Put them in a buffer
  14. transformBuffer = lovr.graphics.newBuffer('mat4', transforms)
  15. -- Make a shader that uses transforms from a buffer
  16. shader = lovr.graphics.newShader([[
  17. uniform Transforms {
  18. mat4 transforms[500];
  19. };
  20. vec4 lovrmain() {
  21. return Projection * View * transforms[InstanceIndex] * VertexPosition;
  22. }
  23. ]], 'normal')
  24. monkey = lovr.graphics.newModel('monkey.obj')
  25. end
  26. -- Draw many copies of the model with 1 draw, taking transforms from the buffer
  27. function lovr.draw(pass)
  28. pass:setBlendMode()
  29. pass:setCullMode('back')
  30. pass:setShader(shader)
  31. pass:send('Transforms', transformBuffer)
  32. pass:draw(monkey, mat4(), MONKEYS)
  33. end