1
0
Fork 0
mirror of https://git.coom.tech/drummyfish/small3dlib.git synced 2024-11-23 20:59:58 +01:00

Add visibility

This commit is contained in:
Miloslav Číž 2019-06-03 13:08:08 +02:00
parent cc2e1f08ef
commit bf79f1437e
4 changed files with 71 additions and 20 deletions

View file

@ -20,6 +20,8 @@ if len(sys.argv) < 2:
quit() quit()
FILENAME = "" FILENAME = ""
PALETTE = ""
USE_PALETTE = False
NAME = "texture" NAME = "texture"
GUARDS = False GUARDS = False
OUT_WIDTH = 64 OUT_WIDTH = 64
@ -34,17 +36,34 @@ for s in sys.argv:
GUARDS = True GUARDS = True
elif s[:2] == "-n": elif s[:2] == "-n":
NAME = s[2:] NAME = s[2:]
elif s[:2] == "-p":
PALETTE = s[2:]
USE_PALETTE = True
else: else:
FILENAME = s FILENAME = s
imageArray = []
paletteColors = []
paletteArray = []
image = Image.open(FILENAME).convert("RGB") image = Image.open(FILENAME).convert("RGB")
pixels = image.load() pixels = image.load()
if len(PALETTE) > 0:
palette = Image.open(PALETTE).convert("RGB")
pixelsPal = palette.load()
for y in range(palette.size[1]):
for x in range(palette.size[0]):
c = pixelsPal[x,y]
paletteColors.append(c)
paletteArray.append(c[0])
paletteArray.append(c[1])
paletteArray.append(c[2])
image2 = Image.new("RGB",(OUT_WIDTH,OUT_HEIGHT),color="white") image2 = Image.new("RGB",(OUT_WIDTH,OUT_HEIGHT),color="white")
pixels2 = image2.load() pixels2 = image2.load()
imageArray = []
for y in range(OUT_HEIGHT): for y in range(OUT_HEIGHT):
for x in range(OUT_WIDTH): for x in range(OUT_WIDTH):
coord = ( coord = (
@ -53,27 +72,38 @@ for y in range(OUT_HEIGHT):
pixel = pixels[coord] pixel = pixels[coord]
imageArray.append(pixel) if USE_PALETTE:
closestIndex = 0
closestDiff = 1024
# find the index of the closest color:
for i in range(len(paletteColors)):
c = paletteColors[i]
diff = abs(pixel[0] - c[0]) + abs(pixel[1] - c[1]) + abs(pixel[2] - c[2])
if diff < closestDiff:
closestIndex = i
closestDiff = diff
imageArray.append(closestIndex)
pixels2[x,y] = paletteColors[closestIndex]
else:
imageArray.append(pixel[0])
imageArray.append(pixel[1])
imageArray.append(pixel[2])
pixels2[x,y] = pixel pixels2[x,y] = pixel
#----------------------- #-----------------------
if GUARDS: def printArray(array, name, sizeString):
print("#ifndef " + NAME.upper() + "_TEXTURE_H") print("uint8_t " + name + "[" + sizeString + "] = {")
print("#define " + NAME.upper() + "_TEXTURE_H\n")
print("#define " + NAME.upper() + "_WIDTH " + str(OUT_WIDTH))
print("#define " + NAME.upper() + "_HEIGHT " + str(OUT_HEIGHT))
print("")
print("uint8_t " + NAME + "Texture[" + NAME.upper() + "_WIDTH * " + NAME.upper() + "_HEIGHT * 3] = {")
arrayString = "" arrayString = ""
lineLen = 0 lineLen = 0
for v in imageArray: for v in array:
for c in v: item = str(v) + ","
item = str(c) + ","
lineLen += len(item) lineLen += len(item)
@ -84,7 +114,19 @@ for v in imageArray:
arrayString += item arrayString += item
print(arrayString[:-1]) print(arrayString[:-1])
print("}; // " + NAME + "Texture") print("}; // " + name + "\n")
if GUARDS:
print("#ifndef " + NAME.upper() + "_TEXTURE_H")
print("#define " + NAME.upper() + "_TEXTURE_H\n")
if USE_PALETTE:
printArray(paletteArray,NAME + "Palette",str(len(paletteArray)))
printArray(imageArray,NAME + "Texture",NAME.upper() + "_WIDTH * " + NAME.upper() + "_HEIGHT * 3")
print("#define " + NAME.upper() + "_WIDTH " + str(OUT_WIDTH))
print("#define " + NAME.upper() + "_HEIGHT " + str(OUT_HEIGHT))
if GUARDS: if GUARDS:
print("\n#endif // guard") print("\n#endif // guard")

View file

@ -453,6 +453,7 @@ typedef struct
- 0 none - 0 none
- 1 clock-wise - 1 clock-wise
- 2 counter clock-wise */ - 2 counter clock-wise */
int8_t visible; /**< Can be used to easily hide the model. */
} S3L_DrawConfig; } S3L_DrawConfig;
void S3L_initDrawConfig(S3L_DrawConfig *config); void S3L_initDrawConfig(S3L_DrawConfig *config);
@ -1042,6 +1043,7 @@ void S3L_initPixelInfo(S3L_PixelInfo *p) // TODO: maybe non-pointer for p
void S3L_initDrawConfig(S3L_DrawConfig *config) void S3L_initDrawConfig(S3L_DrawConfig *config)
{ {
config->backfaceCulling = 1; config->backfaceCulling = 1;
config->visible = 1;
} }
static inline void S3L_PIXEL_FUNCTION(S3L_PixelInfo *pixel); // forward decl static inline void S3L_PIXEL_FUNCTION(S3L_PixelInfo *pixel); // forward decl
@ -1797,6 +1799,9 @@ void S3L_drawScene(S3L_Scene scene)
for (modelIndex = 0; modelIndex < scene.modelCount; ++modelIndex) for (modelIndex = 0; modelIndex < scene.modelCount; ++modelIndex)
{ {
if (!scene.models[modelIndex].config.visible)
continue;
#if S3L_SORT != 0 #if S3L_SORT != 0
if (S3L_sortArrayLength >= S3L_MAX_TRIANGES_DRAWN) if (S3L_sortArrayLength >= S3L_MAX_TRIANGES_DRAWN)
break; break;

View file

@ -12,7 +12,7 @@
#define S3L_FLAT 0 #define S3L_FLAT 0
#define S3L_STRICT_NEAR_CULLING 0 #define S3L_STRICT_NEAR_CULLING 0
#define S3L_PERSPECTIVE_CORRECTION 0 #define S3L_PERSPECTIVE_CORRECTION11
#define S3L_SORT 0 #define S3L_SORT 0
#define S3L_Z_BUFFER 1 #define S3L_Z_BUFFER 1

View file

@ -8,6 +8,10 @@ features:
- back-to-front (slower, better memory efficiency) DONE - back-to-front (slower, better memory efficiency) DONE
- front-to-back (faster, but needs 1bit stencil buffer) DONE - front-to-back (faster, but needs 1bit stencil buffer) DONE
- dithered barycentric interpolation function that is faster than normal
interpolation -- it will randomly picky one of three values, with greater
probabilities at greater coords
- option to disable baycentric coordinates computing DONE - option to disable baycentric coordinates computing DONE
- Z-buffer: - Z-buffer: