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:
parent
cc2e1f08ef
commit
bf79f1437e
4 changed files with 71 additions and 20 deletions
78
img2array.py
78
img2array.py
|
@ -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")
|
arrayString = ""
|
||||||
|
|
||||||
print("#define " + NAME.upper() + "_WIDTH " + str(OUT_WIDTH))
|
lineLen = 0
|
||||||
print("#define " + NAME.upper() + "_HEIGHT " + str(OUT_HEIGHT))
|
|
||||||
print("")
|
|
||||||
print("uint8_t " + NAME + "Texture[" + NAME.upper() + "_WIDTH * " + NAME.upper() + "_HEIGHT * 3] = {")
|
|
||||||
arrayString = ""
|
|
||||||
|
|
||||||
lineLen = 0
|
for v in array:
|
||||||
|
item = str(v) + ","
|
||||||
for v in imageArray:
|
|
||||||
for c in v:
|
|
||||||
item = str(c) + ","
|
|
||||||
|
|
||||||
lineLen += len(item)
|
lineLen += len(item)
|
||||||
|
|
||||||
|
@ -83,8 +113,20 @@ 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")
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
4
todo.txt
4
todo.txt
|
@ -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:
|
||||||
|
|
Loading…
Reference in a new issue