Browse Source

Update monkeys;

bjorn 5 years ago
parent
commit
d0ecbde4c4
1 changed files with 14 additions and 12 deletions
  1. 14 12
      examples/Instancing/main.lua

+ 14 - 12
examples/Instancing/main.lua

@@ -1,23 +1,23 @@
--- Surround yourself with 1000 monkeys, efficiently
+-- Surround yourself with monkeys, efficiently
 
 function lovr.load()
   MONKEYS = 1000
 
   -- Create a ShaderBlock to store positions for lots of models
   block = lovr.graphics.newShaderBlock('uniform', {
-    modelPositions = { 'mat4', MONKEYS }
+    modelTransforms = { 'mat4', MONKEYS }
   }, { usage = 'static' })
 
   -- Write some random transforms to the block
   local transforms = {}
+  local random, randomNormal = lovr.math.random, lovr.math.randomNormal
   for i = 1, MONKEYS do
-    local transform = lovr.math.mat4()
-    local random, randomNormal = lovr.math.random, lovr.math.randomNormal
-    transform:translate(randomNormal(8), randomNormal(8), randomNormal(8))
-    transform:rotate(random(2 * math.pi), random(), random(), random())
-    transforms[i] = transform
+    local position = vec3(randomNormal(8), randomNormal(8), randomNormal(8))
+    local orientation = quat(random(2 * math.pi), random(), random(), random())
+    local scale = vec3(.75)
+    transforms[i] = mat4(position, scale, orientation)
   end
-  block:send('modelPositions', transforms)
+  block:send('modelTransforms', transforms)
 
   -- Create the shader, injecting the shader code for the block
   shader = lovr.graphics.newShader(
@@ -25,7 +25,7 @@ function lovr.load()
     out vec3 vNormal;
     vec4 position(mat4 projection, mat4 transform, vec4 vertex) {
       vNormal = lovrNormal;
-      return projection * transform * modelPositions[lovrInstanceID] * vertex;
+      return projection * transform * modelTransforms[lovrInstanceID] * vertex;
     }
   ]], [[
     in vec3 vNormal;
@@ -36,13 +36,15 @@ function lovr.load()
 
   -- Bind the block to the shader
   shader:sendBlock('ModelBlock', block)
+
   model = lovr.graphics.newModel('monkey.obj')
+  lovr.graphics.setCullingEnabled(true)
+  lovr.graphics.setBlendMode(nil)
 end
 
--- Draw the model 1000 times, using positions from the shader block
+-- Draw many copies of the model using instancing, with transforms from the shader block
 function lovr.draw()
-  lovr.graphics.setCullingEnabled(true)
   lovr.graphics.setShader(shader)
-  model:draw(lovr.math.mat4(), MONKEYS)
+  model:draw(mat4(), MONKEYS)
   lovr.graphics.setShader()
 end