local width = 7 local height = 7 local distance = 5 local amplitude = 2 local x = 0 function getHeadsetMatrix() local fx, fy, fz, fangle, fax, fay, faz = lovr.headset.getPose("head") return lovr.math.newMat4(lovr.math.vec3(fx, fy, fz), lovr.math.vec3(1, 1, 1), lovr.math.quat(fangle, fax, fay, faz)) end function drawGrid(pass, headMatrix) local offset = math.sin(x)*amplitude for i=-0.5,0.5,0.05 do local startVect = headMatrix*lovr.math.newVec3(width*-1+offset, height*i, -distance) local endVect = headMatrix*lovr.math.newVec3(width*1+offset, height*i, -distance) pass:line(startVect, endVect) end for i=-0.5,0.5,0.05 do local startVect = headMatrix*lovr.math.newVec3(width*i+offset, height*-1, -distance) local endVect = headMatrix*lovr.math.newVec3(width*i+offset, height*1, -distance) pass:line(startVect, endVect) end end function lovr.draw(pass) local headMatrix = getHeadsetMatrix() x = x + 0.05 pass:setColor(0, 1, 0) drawGrid(pass, headMatrix) local center = headMatrix * lovr.math.newVec3(math.sin(x)*amplitude, 0.0, -distance) pass:circle(center, 0.05, 0, 0, 0, 1, 'fill') end