From 5ebdba6af0d55269980a64ce190ec29ccd9faaf3 Mon Sep 17 00:00:00 2001 From: jussi Date: Tue, 12 Dec 2023 23:39:08 +0200 Subject: [PATCH] 2D lightmap example. --- changelog | 1 + examples/2D_lights/main.lua | 241 ++++++++++++++++++++++++++++ examples/resources/images/LICENCE | 1 + examples/resources/images/light.png | Bin 0 -> 42299 bytes 4 files changed, 243 insertions(+) create mode 100644 examples/2D_lights/main.lua create mode 100644 examples/resources/images/light.png diff --git a/changelog b/changelog index 3bcf8d9..e90f80f 100644 --- a/changelog +++ b/changelog @@ -22,6 +22,7 @@ KEY CHANGES: - ADDED: Files management functions. - ADDED: More Model management functions. - ADDED: More Model animations management functions. + - ADDED: 2D lightmap example. DETAILED CHANGES: - REMOVED: DrawLineBezierQuad, DrawLineBezierCubic. diff --git a/examples/2D_lights/main.lua b/examples/2D_lights/main.lua new file mode 100644 index 0000000..9c033eb --- /dev/null +++ b/examples/2D_lights/main.lua @@ -0,0 +1,241 @@ +package.path = package.path..";"..RL.GetBasePath().."../resources/lib/?.lua" + +Util = require( "utillib" ) +Vector2 = require( "vector2" ) +Vector3 = require( "vector3" ) +Color = require( "color" ) + +-- Defines +local RESOLUTION = Vector2:new( 1280, 1024 ) +local TILE_SIZE_PX = 32 +local LIGHTRENDER_SIZE = 1024 -- Maxinum light size. +local SHADOW_FOV = 45 -- Camera fov for shadow rendering. +local WALL_MESH_HEIGHT = math.tan( RL.DEG2RAD * ( 90 - SHADOW_FOV / 2 ) ) * LIGHTRENDER_SIZE / TILE_SIZE_PX / 2 + +local monitor = 0 +local monitorPos = Vector2:new( RL.GetMonitorPosition( monitor ) ) +local monitorSize = Vector2:new( RL.GetMonitorSize( monitor ) ) +local winScale = 1 +local winSize = Vector2:new( RESOLUTION.x * winScale, RESOLUTION.y * winScale ) + +local tileTex = nil +local lightTex = nil +local lightTexSize = Vector2:new() +local framebuffer = nil +local lightMap = nil -- Final image of all lights. +local lightRender = nil -- RenderTexture for individual light and shadow rendering. +local ambientLight = Color:new( 40, 40, 40, 255 ) +local wallSegs = {} +local shadowMesh = nil +local lights = {} +local camera = nil -- 3D camera for shadow rendering. + +-- Init. + +local function addLight( pos, color, radius ) + table.insert( lights, { + pos = pos, + color = color, + radius = radius + } ) +end + +local function addWallSeg( p1, p2 ) + table.insert( wallSegs, { + p1 = p1, + p2 = p2 + } ) +end + +-- We will create 3D "wall" mesh for the shadows. +local function createShadowMesh() + addWallSeg( Vector2:new( 0, 0 ), Vector2:new( 500, 160 ) ) + addWallSeg( Vector2:new( 200, 230 ), Vector2:new( 400, 320 ) ) + addWallSeg( Vector2:new( 600, 500 ), Vector2:new( 800, 360 ) ) + addWallSeg( Vector2:new( 800, 360 ), Vector2:new( 900, 500 ) ) + addWallSeg( Vector2:new( 500, 400 ), Vector2:new( 460, 600 ) ) + addWallSeg( Vector2:new( 300, 600 ), Vector2:new( 360, 800 ) ) + addWallSeg( Vector2:new( 360, 800 ), Vector2:new( 550, 900 ) ) + addWallSeg( Vector2:new( 760, 600 ), Vector2:new( 900, 500 ) ) + addWallSeg( Vector2:new( 960, 500 ), Vector2:new( 1200, 420 ) ) + addWallSeg( Vector2:new( 840, 800 ), Vector2:new( 960, 950 ) ) + + -- Box. + addWallSeg( Vector2:new( 4 * 32, 15 * 32 ), Vector2:new( 5 * 32, 15 * 32 ) ) + addWallSeg( Vector2:new( 4 * 32, 15 * 32 ), Vector2:new( 4 * 32, 16 * 32 ) ) + addWallSeg( Vector2:new( 4 * 32, 16 * 32 ), Vector2:new( 5 * 32, 16 * 32 ) ) + addWallSeg( Vector2:new( 5 * 32, 15 * 32 ), Vector2:new( 5 * 32, 16 * 32 ) ) + + -- Create wall mesh. + local meshData = { vertices = {} } + + for _, s in ipairs( wallSegs ) do + local seg = { + p1 = Vector2:new( s.p1.x / TILE_SIZE_PX, s.p1.y / TILE_SIZE_PX ), + p2 = Vector2:new( s.p2.x / TILE_SIZE_PX, s.p2.y / TILE_SIZE_PX ) + } + table.insert( meshData.vertices, Vector3:new( seg.p1.x, WALL_MESH_HEIGHT, seg.p1.y ) ) + table.insert( meshData.vertices, Vector3:new( seg.p1.x, 0, seg.p1.y ) ) + table.insert( meshData.vertices, Vector3:new( seg.p2.x, 0, seg.p2.y ) ) + table.insert( meshData.vertices, Vector3:new( seg.p1.x, WALL_MESH_HEIGHT, seg.p1.y ) ) + table.insert( meshData.vertices, Vector3:new( seg.p2.x, 0, seg.p2.y ) ) + table.insert( meshData.vertices, Vector3:new( seg.p2.x, WALL_MESH_HEIGHT, seg.p2.y ) ) + end + shadowMesh = RL.GenMeshCustom( meshData, false ) +end + +function RL.init() + RL.SetWindowState( RL.FLAG_WINDOW_RESIZABLE ) + RL.SetWindowState( RL.FLAG_VSYNC_HINT ) + RL.SetWindowSize( winSize ) + RL.SetWindowPosition( { monitorPos.x + monitorSize.x / 2 - winSize.x / 2, monitorPos.y + monitorSize.y / 2 - winSize.y / 2 } ) + RL.SetWindowTitle( "2D Lights" ) + + framebuffer = RL.LoadRenderTexture( RESOLUTION ) + lightMap = RL.LoadRenderTexture( RESOLUTION ) + lightRender = RL.LoadRenderTexture( { LIGHTRENDER_SIZE, LIGHTRENDER_SIZE } ) + tileTex = RL.LoadTexture( RL.GetBasePath().."../resources/images/tile.png" ) + lightTex = RL.LoadTexture( RL.GetBasePath().."../resources/images/light.png" ) + lightTexSize = Vector2:new( RL.GetTextureSize( lightTex ) ) + + RL.SetTextureFilter( tileTex, RL.TEXTURE_FILTER_TRILINEAR ) + RL.SetTextureFilter( lightTex, RL.TEXTURE_FILTER_TRILINEAR ) + + createShadowMesh() + + addLight( Vector2:new( 230, 480 ), Color:new( RL.ORANGE ), 512 ) + addLight( Vector2:new( 600, 200 ), Color:new( RL.RED ), 512 ) + addLight( Vector2:new( 384, 520 ), Color:new( RL.GREEN ), 400 ) + addLight( Vector2:new( 880, 750 ), Color:new( RL.BLUE ), 300 ) + addLight( Vector2:new( 800, 500 ), Color:new( RL.PURPLE ), 512 ) + addLight( Vector2:new( 200, 760 ), Color:new( RL.WHITE ), 400 ) + + -- Stress test + + -- for i = 1, 300 do + -- addLight( Vector2:new( math.random( 20, RESOLUTION.x - 20 ), math.random( 20, RESOLUTION.y - 20 ) ), + -- Color:new( { math.random( 40, 255 ), math.random( 40, 255 ), math.random( 40, 255 ), 255 } ), + -- 128 + -- ) + -- end + + -- Camera for shadow rendering. + camera = RL.CreateCamera3D() + RL.SetCamera3DPosition( camera, { 0, 5, 0 } ) + RL.SetCamera3DTarget( camera, { 0, 0, -0.001 } ) + RL.SetCamera3DUp( camera, { 0, 1, 0 } ) + RL.SetCamera3DFovy( camera, SHADOW_FOV ) + + RL.SetMouseScale( { 1 / winScale, 1 / winScale } ) + -- Render both sides of the shadow. Could be usefull to set off to prevent self shadowing. + RL.rlDisableBackfaceCulling() +end + +-- Process. + +function RL.process( delta ) + lights[1].pos = Vector2:new( RL.GetMousePosition() ) +end + +-- Drawing. + +local function drawLight( light ) + RL.BeginTextureMode( lightRender ) + RL.ClearBackground( RL.BLANK ) + RL.DrawTexturePro( + lightTex, + { 0, 0, lightTexSize.x, lightTexSize.y }, + { LIGHTRENDER_SIZE / 2, LIGHTRENDER_SIZE / 2, light.radius * 2, light.radius * 2 }, + { light.radius, light.radius }, + 0.0, + light.color + ) + -- Draw shadows. + local cameraPos = Vector2:new( light.pos.x / TILE_SIZE_PX, light.pos.y / TILE_SIZE_PX ) + + RL.SetCamera3DPosition( camera, { 0, WALL_MESH_HEIGHT, 0 } ) + RL.SetCamera3DTarget( camera, { 0, 0, -0.0001 } ) + + RL.rlSetBlendFactors( RL.RL_ZERO, RL.RL_ONE_MINUS_SRC_COLOR, RL.RL_FUNC_ADD ) + RL.BeginBlendMode( RL.BLEND_CUSTOM ) + RL.BeginMode3D( camera ) + RL.DrawMesh( + shadowMesh, + RL.GetMaterialDefault(), + RL.MatrixMultiply( + RL.MatrixTranslate( { -cameraPos.x, 0, -cameraPos.y } ), + RL.MatrixScale( { 1, 1, -1 } ) -- Flip mesh. + ) + ) + RL.EndMode3D() + RL.EndBlendMode() + RL.EndTextureMode() + -- Draw light to lightmap. + RL.BeginTextureMode( lightMap ) + RL.BeginBlendMode( RL.BLEND_ADDITIVE ) + RL.DrawTexturePro( + RL.GetRenderTextureTexture( lightRender ), + { 0, 0, LIGHTRENDER_SIZE, LIGHTRENDER_SIZE }, + { light.pos.x, light.pos.y, LIGHTRENDER_SIZE, LIGHTRENDER_SIZE }, + { LIGHTRENDER_SIZE / 2, LIGHTRENDER_SIZE / 2 }, + 0.0, + light.color + ) + RL.EndBlendMode() + RL.EndTextureMode() +end + +local function drawLights() + RL.BeginTextureMode( lightMap ) + RL.ClearBackground( ambientLight ) + RL.EndTextureMode() + + for _, light in ipairs( lights ) do + drawLight( light ) + end +end + +function RL.draw() + RL.ClearBackground( RL.BLACK ) + + drawLights() + -- Draw to framebuffer. + RL.BeginTextureMode( framebuffer ) + RL.ClearBackground( RL.BLACK ) + -- Floor. + RL.DrawTextureRec( + tileTex, + { 0, 0, RESOLUTION.x, RESOLUTION.y }, + { 0, 0 }, + RL.WHITE + ) + -- Wall lines. + for _, seg in ipairs( wallSegs ) do + RL.DrawLine( seg.p1, seg.p2, 3.0, RL.BLACK ) + end + -- Lightmap. + RL.rlSetBlendFactors( RL.RL_DST_COLOR, RL.RL_SRC_COLOR, RL.RL_FUNC_ADD ) + RL.BeginBlendMode( RL.BLEND_CUSTOM ) + RL.DrawTexturePro( + RL.GetRenderTextureTexture( lightMap ), + { 0, 0, RESOLUTION.x, -RESOLUTION.y }, + { 0, 0, RESOLUTION.x, RESOLUTION.y }, + { 0, 0 }, + 0.0, + RL.WHITE + ) + RL.EndBlendMode() + RL.EndTextureMode() + + -- Draw framebuffer to window. + RL.DrawTexturePro( + RL.GetRenderTextureTexture( framebuffer ), + { 0, 0, RESOLUTION.x, -RESOLUTION.y }, + { 0, 0, winSize.x, winSize.y }, + { 0, 0 }, + 0.0, + RL.WHITE + ) + -- RL.DrawRectangle( { 0, 0, 96, 32 }, RL.BLACK ) + -- RL.DrawFPS( { 10, 10 } ) +end diff --git a/examples/resources/images/LICENCE b/examples/resources/images/LICENCE index 0f9b22d..414d253 100644 --- a/examples/resources/images/LICENCE +++ b/examples/resources/images/LICENCE @@ -7,6 +7,7 @@ snake.png Jussi Viitala CC0 ui_border.png Jussi Viitala CC0 ui_bgr.png Jussi Viitala CC0 gradient.png Jussi Viitala CC0 +light.png Jussi Viitala CC0 check-mark.png Delapouite Creative Commons 3.0 https://game-icons.net Resized circle.png Delapouite Creative Commons 3.0 https://game-icons.net Resized plain-circle.png Delapouite Creative Commons 3.0 https://game-icons.net Resized diff --git a/examples/resources/images/light.png b/examples/resources/images/light.png new file mode 100644 index 0000000000000000000000000000000000000000..cd017b31e1195d8af562a25b1d937509d613caa7 GIT binary patch literal 42299 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

-%BX8gHz$FdB@+(}U-!XwbVQPCl(`>!d;@?7c%V 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 bw_zDXN=fy9ZMNYVz&=iU58D4}=N