diff --git a/v2/raycaster.py b/v2/raycaster.py index 2cc1674..c3bb2df 100755 --- a/v2/raycaster.py +++ b/v2/raycaster.py @@ -21,9 +21,12 @@ MAP_WIN_HEIGHT = MAP_SIZE * MAP_SCALE # Textures cfg TEXTURES = [ - "../assets/texture_wall1.png", - "../assets/texture_wall2.png", "../assets/texture_wall3.png", + "../assets/texture_wall3.png", + "../assets/texture_wall3.png", +# "../assets/texture.png", +# "../assets/texture.png", +# "../assets/texture.png", ] TEXTURE_SIZE = 64 @@ -34,7 +37,6 @@ RAYCAST_RESOLUTION_SCALING = 4 RAYCAST_RENDER_WIDTH = int(RAYCAST_WIN_WIDTH / RAYCAST_RESOLUTION_SCALING) RAYCAST_RENDER_HEIGHT = int(RAYCAST_WIN_HEIGHT / RAYCAST_RESOLUTION_SCALING) DOF = 2*MAP_SIZE # Depth Of Field -SHADING_COLOR = 128 + (128 << 8) + (128 << 16) # Color to subtract to obtain shading (128 in every channel) CEILING_COLOR = sdl2.ext.Color(0,128,255,255) FLOOR_COLOR = sdl2.ext.Color(0,128,0,255) @@ -341,7 +343,7 @@ class Main: color = self.textures[texIndex][texColumn + textureColumnPixel * TEXTURE_SIZE] # Calculate color resulting from texture pixel value + shading if shading: - color = color * (-SHADING_COLOR) + color = self.shade(color) # Clipping lineEnd = textureSegmentEnd @@ -371,6 +373,18 @@ class Main: for idx in range(startIdx, endY * RAYCAST_WIN_WIDTH + x, RAYCAST_WIN_WIDTH): self.raycast_u32_pixels[idx] = color + def shade(self, color): + # Obtain channels + b = color & 0b000000000000000011111111 + g = color >> 8 & 0b000000000000000011111111 + r = color >> 16 & 0b000000000000000011111111 + # Dim channels (and limit to 255, because python doesn't have a fixed byte length) + b = (b >> 1) + g = (g >> 1) + r = (r >> 1) + # Compose color + return b + (g << 8) + (r << 16) + def dist(self, ax, ay, bx, by): return math.sqrt((bx-ax)*(bx-ax) + (by-ay)*(by-ay)) @@ -385,7 +399,8 @@ class Main: # Convert to sdl2-friendly format converted = [] for i in range(0, len(pixels), 3): - converted.append(pixels[i] + (pixels[i+1] << 8) + (pixels[i+2] << 16)) + # PNG is RGB, SDL surface is BGR + converted.append(pixels[i+2] + (pixels[i+1] << 8) + (pixels[i] << 16)) # BGR return converted