3ds模型--换纹理

前面的函数还是不能加载所有的TGA纹理,我们把不能显示的TGA转化成可以显示的文件格式,然后修改3ds中的纹理文件名。

分成二步,

1。把TGA转化为bmp(会丢失透明度)

2。修改3ds中的纹理文件名

这里用一个垮平台的qb64来转化。

先来生成所有的TGA列表  批文件(bat)

@rem 生成 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
中景树.tga
TGB转为bmp (qb64)
OPEN "list.txt" FOR INPUT AS #1 'TGA列表
PRINT "start"
DO WHILE NOT EOF(1)
    LINE INPUT #1, a$ '一个文件
    PRINT a$
    i& = _LOADIMAGE(a$, 32) ' 载入TGA为 32 位的 image
    b$ = UCASE$(a$) '小写转大写
    k = INSTR(b$, ".TGA") '扩展名位置
    b$ = LEFT$(a$, k - 1) '去掉扩展名
    PRINT b$
    SaveImage i&, b$ '保成为 .BMP 文件(扩展名在SaveImage中加)
    'SaveImage 0, "screenshot" '将整个程序屏幕保存为 "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) '部分BMP头信息(????稍后填写)
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$)) ' 图像的像素数据的偏移(BMP头)
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$)) ' 图像大小(BMP头)
b$ = b$ + d$ ' 总的文件字节用于创建文件
MID$(b$, 3, 4) = MKL$(LEN(b$)) ' 全文件的大小(BMP头)
IF LCASE$(RIGHT$(filename$, 4)) <> ".bmp" THEN ext$ = ".bmp"
f& = FREEFILE
OPEN filename$ + ext$ FOR OUTPUT AS #f&: CLOSE #f& ' 删除现有文件
OPEN filename$ + ext$ FOR BINARY AS #f&
PUT #f&, , b$
CLOSE #f&
END SUB
生成的bmp:


第一步完成。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值