height_map = {} function height_map.toNormalMap(heightMap, strength) local imgData = heightMap:getData() local imgData2 = love.image.newImageData(heightMap:getWidth(), heightMap:getHeight()) local red, green, blue, alpha local x, y local matrix = {} matrix[1] = {} matrix[2] = {} matrix[3] = {} strength = strength or 1.0 for i = 0, heightMap:getHeight() - 1 do for k = 0, heightMap:getWidth() - 1 do for l = 1, 3 do for m = 1, 3 do if k + (l - 1) < 1 then x = heightMap:getWidth() - 1 elseif k + (l - 1) > heightMap:getWidth() - 1 then x = 1 else x = k + l - 1 end if i + (m - 1) < 1 then y = heightMap:getHeight() - 1 elseif i + (m - 1) > heightMap:getHeight() - 1 then y = 1 else y = i + m - 1 end local red, green, blue, alpha = imgData:getPixel(x, y) matrix[l][m] = red end end red = (255 + ((matrix[1][2] - matrix[2][2]) + (matrix[2][2] - matrix[3][2])) * strength) / 2.0 green = (255 + ((matrix[2][2] - matrix[1][1]) + (matrix[2][3] - matrix[2][2])) * strength) / 2.0 blue = 192 imgData2:setPixel(k, i, red, green, blue) end end return love.graphics.newImage(imgData2) end return height_map