utility.lua 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. function addBox(pass,scene,model, x, z)
  2. local boxSize = 1
  3. local boxHeight = scene.height*0.5
  4. pass:setColor(1,1,1)
  5. if model then
  6. pass:monkey(vec3(x, 0.5, z), vec3(boxSize, boxSize, boxSize))
  7. else
  8. pass:box(vec3(x, boxHeight/2, z), vec3(boxSize, boxHeight, boxSize))
  9. end
  10. end
  11. function addBoxes(scene, pass, model)
  12. local s = scene
  13. --staggered boxes
  14. local loops = 18
  15. for i = 1, loops do
  16. local offset = (i/loops)* (scene.size/2)
  17. addBox(pass,scene,model, scene.size/2-offset, -scene.size/2+offset)
  18. addBox(pass,scene,model, -scene.size/2+offset, -scene.size/2+offset)
  19. addBox(pass,scene,model, -scene.size/2+offset, scene.size/2-offset)
  20. addBox(pass,scene,model, scene.size/2-offset, scene.size/2-offset)
  21. end
  22. --edge boxes
  23. addBox(pass,scene,model, scene.size/2-1, -scene.size/2+1)
  24. addBox(pass,scene,model, -scene.size/2+1, -scene.size/2+1)
  25. addBox(pass, scene,model,-scene.size/2+1, scene.size/2-1)
  26. addBox(pass,scene, model,scene.size/2-1, scene.size/2-1)
  27. end
  28. function createRotatedBoundingOrthographicView(camAngle, scene,pass)
  29. local t = lovr.timer.getTime() * 0.01
  30. local tDeg = math.deg(t)
  31. tDeg = camAngle
  32. local position = vec3(0, 0, 0)
  33. --padding for edges
  34. local wPadding, hPadding = 1, 1
  35. --formula for getting a bounding box from
  36. -- https://stackoverflow.com/questions/51462800/get-bounds-of-rotated-rectangle/51463527#51463527
  37. --width and height of the scene
  38. local w, h = scene.size + wPadding, scene.height + hPadding
  39. --rotational angle
  40. local rotatedWidth = w * math.abs(math.cos(tDeg)) + h * math.abs(math.sin(tDeg))
  41. local rotatedHeight = w * math.abs(math.sin(tDeg)) + h * math.abs(math.cos(tDeg))
  42. local size = vec3(rotatedWidth, rotatedHeight, scene.size + wPadding)
  43. local rotation = quat(tDeg, 0, 0, 1)
  44. pass:setColor(1, .8, 1,0.3)
  45. pass:box(mat4(position, size, rotation))
  46. end