From 03d706c0cb9809e72da092cc46cba2207b8b8848 Mon Sep 17 00:00:00 2001 From: unknown <115050813@qq.com> Date: Sat, 13 Apr 2024 17:28:12 +0800 Subject: [PATCH] feat: clean line alias on tile border --- lib/src/main/resources/Shader/Tiled.frag | 24 +++++++++++++++++-- lib/src/main/resources/Shader/Tiled.vert | 16 +++++-------- .../jmecn/tiled/app/TmxLoaderExample.java | 2 +- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/lib/src/main/resources/Shader/Tiled.frag b/lib/src/main/resources/Shader/Tiled.frag index 3858f18..882b40e 100644 --- a/lib/src/main/resources/Shader/Tiled.frag +++ b/lib/src/main/resources/Shader/Tiled.frag @@ -13,13 +13,33 @@ uniform vec4 m_Color; uniform sampler2D m_ColorMap; #endif -varying vec2 texCoord; +#ifdef USE_TILESET_IMAGE +uniform vec2 m_ImageSize; +uniform vec4 m_TileSize;//(width, height, margin, space) +varying vec2 v_TilePos; +#endif + +varying vec2 v_TexCoord; + +vec2 getTileUVClamped(vec2 tilePos, vec2 tileSize, vec2 imageSize) { + vec2 pixel = v_TexCoord * tileSize + tilePos; + vec2 min = vec2(tilePos + 0.5); + vec2 max = vec2(tilePos + tileSize - 0.5); + vec2 uv = clamp(pixel, min, max) / imageSize; + uv.y = 1.0 - uv.y; + return uv; +} void main(){ vec4 color = vec4(1.0); #ifdef HAS_COLOR_MAP - vec2 uv = texCoord; + vec2 uv = v_TexCoord; + + #ifdef USE_TILESET_IMAGE + uv = getTileUVClamped(v_TilePos, m_TileSize.xy, m_ImageSize.xy); + #endif + color *= texture2D(m_ColorMap, uv); #endif diff --git a/lib/src/main/resources/Shader/Tiled.vert b/lib/src/main/resources/Shader/Tiled.vert index e99ccfc..3172971 100644 --- a/lib/src/main/resources/Shader/Tiled.vert +++ b/lib/src/main/resources/Shader/Tiled.vert @@ -3,25 +3,21 @@ attribute vec3 inPosition; attribute vec2 inTexCoord; -attribute vec4 inColor; #ifdef USE_TILESET_IMAGE +// use texcoord2 as tile position attribute vec3 inTexCoord2; -uniform vec2 m_ImageSize; -uniform vec4 m_TileSize; +// pass it to fragment shader +varying vec2 v_TilePos; #endif -varying vec2 texCoord; +varying vec2 v_TexCoord; void main() { - texCoord = inTexCoord; + v_TexCoord = inTexCoord; #ifdef USE_TILESET_IMAGE - // calculate the UV coordinates for the tileset image - vec2 tilePos = inTexCoord2.xy; - vec2 uv = (texCoord * m_TileSize.xy + tilePos) / m_ImageSize.xy; - uv.y = 1.0 - uv.y; - texCoord = uv; + v_TilePos = inTexCoord2.xy; #endif vec3 position = inPosition; diff --git a/lib/src/test/java/io/github/jmecn/tiled/app/TmxLoaderExample.java b/lib/src/test/java/io/github/jmecn/tiled/app/TmxLoaderExample.java index 9de0db3..6a10c85 100644 --- a/lib/src/test/java/io/github/jmecn/tiled/app/TmxLoaderExample.java +++ b/lib/src/test/java/io/github/jmecn/tiled/app/TmxLoaderExample.java @@ -26,7 +26,7 @@ public void simpleInitApp() { TiledMapAppState tiledMap = stateManager.getState(TiledMapAppState.class); tiledMap.setMap(map); - tiledMap.setViewColumn(20); + //tiledMap.setViewColumn(20); } public static void main(String[] args) {