3ds model -- texture change

Keywords: Attribute

The previous function still can't load all the TGA textures. We convert the TGA that can't be displayed into a file format that can be displayed, and then change the texture file name in 3ds.

There are two steps,

1. Convert TGA to BMP (loss of transparency)

2. Modifying texture file names in 3ds

Here we use a platform breaking qb64 to transform.

First, generate all TGA list batch files (bats)

@rem generate list.txt
@echo off
for %%i in (*.TGA) do echo %%i>>list.txt
list.txt:

BHOUSEF.TGA
BHOUSEL.TGA
BHOUSER.TGA
DOWN.TGA
DOWNF.TGA
DOWNR.TGA
farTree.tga
farTree_back.tga
farTree_back_2.TGA
farTree_back_3.TGA
farTree_back_4.TGA
HOUSE.TGA
LHOUSE.TGA
middleTree.TGA
TOWER1.TGA
TOWER2.TGA
//MS tree.tga
TGB to bmp (qb64)
OPEN "list.txt" FOR INPUT AS #1'TGA list
PRINT "start"
DO WHILE NOT EOF(1)
    LINE INPUT #1, a $'a file
    PRINT a$
    i& = _LOADIMAGE(a$, 32) ' load TGA 32-bit image
    b$ = UCASE$(a$) 'Lowercase to uppercase
    k = INSTR(b$, ".TGA") 'Extension location
    b$ = LEFT$(a$, k - 1) 'Remove extension
    PRINT b$
    SaveImage i&, b$ 'Guarantee become .BMP File (extension in SaveImage China Canada)
    'SaveImage 0, "screenshot" 'Save the entire program screen as "screenshot.bmp"

LOOP
END

SUB SaveImage (image AS LONG, filename AS STRING)
bytesperpixel& = _PIXELSIZE(image&)
IF bytesperpixel& = 0 THEN PRINT "Text modes unsupported!": END
IF bytesperpixel& = 1 THEN bpp& = 8 ELSE bpp& = 24
x& = _WIDTH(image&)
y& = _HEIGHT(image&)
b$ = "BM????QB64????" + MKL$(40) + MKL$(x&) + MKL$(y&) + MKI$(1) + MKI$(bpp&) + MKL$(0) + "????" + STRING$(16, 0) 'Part BMP Header information (????Later)
IF bytesperpixel& = 1 THEN
    FOR c& = 0 TO 255 ' read BGR color settings from JPG image + 1 byte spacer(CHR$(0))
        cv& = _PALETTECOLOR(c&, image&) ' color attribute to read.
        b$ = b$ + CHR$(_BLUE32(cv&)) + CHR$(_GREEN32(cv&)) + CHR$(_RED32(cv&)) + CHR$(0) 'spacer byte
    NEXT
END IF
MID$(b$, 11, 4) = MKL$(LEN(b$)) ' Image pixel data offset( BMP Head)
lastsource& = _SOURCE
_SOURCE image&
IF ((x& * 3) MOD 4) THEN padder$ = STRING$(4 - ((x& * 3) MOD 4), 0)
FOR py& = y& - 1 TO 0 STEP -1 ' read JPG image pixel color data
    r$ = ""
    FOR px& = 0 TO x& - 1
        c& = POINT(px&, py&) 'POINT 32 bit values are large LONG values
        IF bytesperpixel& = 1 THEN r$ = r$ + CHR$(c&) ELSE r$ = r$ + LEFT$(MKL$(c&), 3)
    NEXT px&
    d$ = d$ + r$ + padder$
NEXT py&
_SOURCE lastsource&
MID$(b$, 35, 4) = MKL$(LEN(d$)) ' Image size( BMP Head)
b$ = b$ + d$ ' Total file bytes used to create files
MID$(b$, 3, 4) = MKL$(LEN(b$)) ' Full file size( BMP Head)
IF LCASE$(RIGHT$(filename$, 4)) <> ".bmp" THEN ext$ = ".bmp"
f& = FREEFILE
OPEN filename$ + ext$ FOR OUTPUT AS #f&: CLOSE #F & 'delete existing file
OPEN filename$ + ext$ FOR BINARY AS #f&
PUT #f&, , b$
CLOSE #f&
END SUB
Generated bmp:


The first step is done.



Posted by RiBlanced on Fri, 17 Apr 2020 09:32:42 -0700