Fixed shading
This commit is contained in:
parent
770d5c02b2
commit
cc7892cb69
@ -21,9 +21,12 @@ MAP_WIN_HEIGHT = MAP_SIZE * MAP_SCALE
|
|||||||
|
|
||||||
# Textures cfg
|
# Textures cfg
|
||||||
TEXTURES = [
|
TEXTURES = [
|
||||||
"../assets/texture_wall1.png",
|
|
||||||
"../assets/texture_wall2.png",
|
|
||||||
"../assets/texture_wall3.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
|
TEXTURE_SIZE = 64
|
||||||
|
|
||||||
@ -34,7 +37,6 @@ RAYCAST_RESOLUTION_SCALING = 4
|
|||||||
RAYCAST_RENDER_WIDTH = int(RAYCAST_WIN_WIDTH / RAYCAST_RESOLUTION_SCALING)
|
RAYCAST_RENDER_WIDTH = int(RAYCAST_WIN_WIDTH / RAYCAST_RESOLUTION_SCALING)
|
||||||
RAYCAST_RENDER_HEIGHT = int(RAYCAST_WIN_HEIGHT / RAYCAST_RESOLUTION_SCALING)
|
RAYCAST_RENDER_HEIGHT = int(RAYCAST_WIN_HEIGHT / RAYCAST_RESOLUTION_SCALING)
|
||||||
DOF = 2*MAP_SIZE # Depth Of Field
|
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)
|
CEILING_COLOR = sdl2.ext.Color(0,128,255,255)
|
||||||
FLOOR_COLOR = sdl2.ext.Color(0,128,0,255)
|
FLOOR_COLOR = sdl2.ext.Color(0,128,0,255)
|
||||||
|
|
||||||
@ -341,7 +343,7 @@ class Main:
|
|||||||
color = self.textures[texIndex][texColumn + textureColumnPixel * TEXTURE_SIZE]
|
color = self.textures[texIndex][texColumn + textureColumnPixel * TEXTURE_SIZE]
|
||||||
# Calculate color resulting from texture pixel value + shading
|
# Calculate color resulting from texture pixel value + shading
|
||||||
if shading:
|
if shading:
|
||||||
color = color * (-SHADING_COLOR)
|
color = self.shade(color)
|
||||||
|
|
||||||
# Clipping
|
# Clipping
|
||||||
lineEnd = textureSegmentEnd
|
lineEnd = textureSegmentEnd
|
||||||
@ -371,6 +373,18 @@ class Main:
|
|||||||
for idx in range(startIdx, endY * RAYCAST_WIN_WIDTH + x, RAYCAST_WIN_WIDTH):
|
for idx in range(startIdx, endY * RAYCAST_WIN_WIDTH + x, RAYCAST_WIN_WIDTH):
|
||||||
self.raycast_u32_pixels[idx] = color
|
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):
|
def dist(self, ax, ay, bx, by):
|
||||||
return math.sqrt((bx-ax)*(bx-ax) + (by-ay)*(by-ay))
|
return math.sqrt((bx-ax)*(bx-ax) + (by-ay)*(by-ay))
|
||||||
|
|
||||||
@ -385,7 +399,8 @@ class Main:
|
|||||||
# Convert to sdl2-friendly format
|
# Convert to sdl2-friendly format
|
||||||
converted = []
|
converted = []
|
||||||
for i in range(0, len(pixels), 3):
|
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
|
return converted
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user