123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- function lovr.load()
- -- shadow shader
- shadowVertex = 'unlit'
- shadowFragment = [[
- Constants {
- vec4 left;
- vec4 right;
- vec4 head;
- };
- vec4 lovrmain() {
- vec4 shadowColor;
- if (
- (length( left.xz - PositionWorld.xz) < left.w && left.y > PositionWorld.y) ||
- (length(right.xz - PositionWorld.xz) < right.w && right.y > PositionWorld.y) ||
- (length( head.xz - PositionWorld.xz) < head.w && head.y > PositionWorld.y)
- ) {
- shadowColor = vec4(.25, .625, 1, 1);
- } else {
- shadowColor = vec4(1, 1, 1, 1);
- }
- return shadowColor * Color * getPixel(ColorTexture, UV);
- }
- ]]
- shadowShader = lovr.graphics.newShader(shadowVertex, shadowFragment)
- -- grass texture
- grassTextureWidth = 256
- grassImage = lovr.data.newImage(grassTextureWidth, grassTextureWidth)
- for x = 0, grassTextureWidth - 1 do
- for y = 0, grassTextureWidth - 1 do
- grassImage:setPixel(x, y,
- lovr.math.noise(x + .5, y + .5 + 0) / 2,
- lovr.math.noise(x + .5, y + .5 + 16) / 2 + .5,
- lovr.math.noise(x + .5, y + .5 + 32) / 2
- )
- end
- end
- grassTexture = lovr.graphics.newTexture(grassImage)
- -- boxes
- boxes = {}
- for i = 1, 5 do
- table.insert(boxes, {
- x = lovr.math.random() / 2,
- y = lovr.math.random() / 2 + .5,
- z = lovr.math.random() / 2,
- width = lovr.math.random() / 3,
- height = lovr.math.random() / 3,
- depth = lovr.math.random() / 3,
- r = lovr.math.random(),
- g = lovr.math.random(),
- b = lovr.math.random()
- })
- end
- -- sky
- lovr.graphics.setBackgroundColor(0,.5,1)
- end
- function lovr.update()
- left = vec3(lovr.headset.getPosition('left'))
- right = vec3(lovr.headset.getPosition('right'))
- head = vec3(mat4(lovr.headset.getPose('head')):translate(0, -.1, -.1))
- end
- function lovr.draw(pass)
- -- grass
- pass:setShader(shadowShader)
- pass:send('left', { left.x, left.y, left.z, .05}) -- x, y, z, radius
- pass:send('right', {right.x, right.y, right.z, .05})
- pass:send('head', { head.x, head.y, head.z, .1 })
- pass:setMaterial(grassTexture)
- pass:setSampler('nearest')
- pass:box(0, 0, 0, 10, 1, 10)
- pass:setMaterial()
- pass:setSampler()
- pass:setShader()
- -- boxes
- pass:setShader(shadowShader)
- pass:send('left', { left.x, left.y, left.z, .05}) -- x, y, z, radius
- pass:send('right', {right.x, right.y, right.z, .05})
- pass:send('head', { head.x, head.y, head.z, .1 })
- for _, box in pairs(boxes) do
- pass:setColor(box.r, box.g, box.b)
- pass:box(box.x, box.y, box.z, box.width, box.height, box.depth)
- end
- pass:setShader()
- -- hands
- pass:setColor(.9, .7, .1)
- pass:sphere(vec3(lovr.headset.getPosition('left')), .05)
- pass:sphere(vec3(lovr.headset.getPosition('right')), .05)
- end
|