mirror of
https://github.com/tanema/light_world.lua.git
synced 2024-12-24 20:24:19 +00:00
51 lines
1.2 KiB
Lua
51 lines
1.2 KiB
Lua
|
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
|