Here is a chunk of code that will convert a matrix already created and textured to a single object textured the same.
enjoy!
requirements:
IanM's Matrix dlls installed
REM Project: matrixobjectfunctions
REM Created: 2/23/2012 11:37:55 AM
REM
REM ***** Main Source File *****
REM
`apparently there is not a get matrix tile command...so i made this
`to follow your matrix command
global dim getmatrixtile(10,10)
`demo matrix being drawn
set ambient light 80
set display mode 800,600,32
ink rgb(0,255,0),0
box 1,1,99,99
ink rgb(255,0,0),0
circle 25,30,10
circle 75,30,10
line 25,50,40,60
line 40,60,60,60
line 60,60,75,50
ink rgb(0,255,0),0
box 101,101,199,199
ink rgb(255,0,0),0
circle 125,130,10
circle 175,130,10
line 125,170,140,160
line 140,160,160,160
line 160,160,175,170
get image 1,0,0,500,500
`test matrix
make matrix 1,1000,1000,10,10
prepare matrix texture 1,1,5,5
position matrix 1,0,0,0
randomize matrix 1,100
for x=0 to 9 step 1
for y=0 to 9 step 1
a=int(rnd(1))
if a=0 then set matrix tile 1,x,y,1:getmatrixtile(x+1,y+1)=1
if a=1 then set matrix tile 1,x,y,7:getmatrixtile(x+1,y+1)=7
next y
next x
update matrix 1
sync on
sync rate 60
position camera 500,500,0
point camera 500,0,500
yrotate camera 0
do
set cursor 1,1:print "press spacekey to make an object from it"
if spacekey()=1 then goto done1
sync
loop
done1:
`these need to be setup exactly how you prepared your texture
`for this example it was split up 5x5 (whatever was used for the prepare matrix texture command)
imgx1=5
imgz1=5
`need the exact courds of the actual matrix that was created.....
`however you could change the 1000,1000 to be bigger or smaller
`you do need to keep the tiles amount the same however.
`this was the original made
`[make matrix 1,1000,1000,10,10]
`[prepare matrix texture 1,1,5,5]
makeobjectfrommatrix(1,1,1000,1000,10,10,imgx1,imgz1)
delete matrix 1
`this is the image you would have used with the prepare matrix texture command
texture object 1,1
position camera 500,500,0
point camera 500,0,500
yrotate camera 0
`save object here if you want it saved as a dbo
`save object "blah.dbo",1
do
set cursor 1,1:print "this is the resulting matrix object":
sync
loop
function makeobjectfrommatrix(objectnumber,matrixnumber,xsize,zsize,numtilesx,numtilesz,imgx,imgz)
`this command works perfectly
local vertcnt = 0
local indexcnt = 0
local sizeofx# = 0.0
local sizeofz# = 0.0
local imgsizex# = 0.0
local imgsizez# = 0.0
local strtx# = 0.0
local strtz# = 0.0
local endx#=0.0
local endz#=0.0
if object exist(objectnumber)=1 then exitfunction
if matrix exist(matrixnumber)=0 then exitfunction
vertcnt=(numtilesx*numtilesz)*4
indexcnt=(numtilesx*numtilesz)*6
make object new objectnumber,vertcnt,indexcnt,338
lock vertexdata for limb objectnumber, 0
sizeofx#=(xsize/numtilesx)
sizeofz#=(zsize/numtilesz)
`get image tile sizes
imgsizex#=(1.0/(imgx+0.0))
imgsizez#=(1.0/(imgz+0.0))
usingvert=0
usingindex=0
for x=1 to numtilesx step 1
for y=1 to numtilesz step 1
`front face tris
set vertexdata position usingvert,(sizeofx#*x),get matrix height(matrixnumber,x,y),(sizeofz#*y):set vertexdata normals usingvert,0,1,0
set vertexdata position usingvert+1,(sizeofx#*x)-sizeofx#,get matrix height(matrixnumber,x-1,y),(sizeofz#*y):set vertexdata normals usingvert+1,0,1,0
set vertexdata position usingvert+2,(sizeofx#*x),get matrix height(matrixnumber,x,y-1),(sizeofz#*y)-sizeofz#:set vertexdata normals usingvert+2,0,1,0
set vertexdata position usingvert+3,(sizeofx#*x)-sizeofx#,get matrix height(matrixnumber,x-1,y-1),(sizeofz#*y)-sizeofz#:set vertexdata normals usingvert+3,0,1,0
tileis=getmatrixtile(x,y)
count=0
strtx#=0.0
strtz#=0.0
for g1=1 to imgx step 1
for g2=1 to imgz step 1
count=count+1
if count=tileis then strtx#=((imgsizex#*g1+0.0)-imgsizex#):strtz#=((imgsizez#*g2+0.0)-imgsizez#)
next g2
next g1
endx#=strtx#+imgsizex#+0.0
endz#=strtz#+imgsizez#+0.0
set vertexdata uv usingvert,strtx#,strtz#
set vertexdata uv usingvert+1,endx#,strtz#
set vertexdata uv usingvert+2,strtx#,endz#
set vertexdata uv usingvert+3,endx#,endz#
`set indexdata usingindex,usingvert+3
`set indexdata usingindex+1,usingvert+1
`set indexdata usingindex+2,usingvert+2
set indexdata usingindex,usingvert+3
set indexdata usingindex+1,usingvert+0
set indexdata usingindex+2,usingvert+2
`set indexdata usingindex+3,usingvert+2
`set indexdata usingindex+4,usingvert+1
`set indexdata usingindex+5,usingvert
set indexdata usingindex+3,usingvert+1
set indexdata usingindex+4,usingvert+0
set indexdata usingindex+5,usingvert+3
usingindex=usingindex+6
usingvert=usingvert+4
next y
next x
unlock vertexdata
set object normals objectnumber
set object ambient objectnumber,100
endfunction
function makematrix(objectnumber,xsize,zsize,numtilesx,numtilesz)
`makes a blank object matrix
`this needs to be expanded on to work well
`WIP
`This is not used in this sample but is the building blocks of the object
local vertcnt = 0
local indexcnt = 0
local sizeofx# = 0.0
local sizeofz# = 0.0
if object exist(objectnumber)=1 then exitfunction
vertcnt=(numtilesx*numtilesz)*4
indexcnt=(numtilesx*numtilesz)*6
make object new objectnumber,vertcnt,indexcnt,338
lock vertexdata for limb objectnumber, 0
sizeofx#=(xsize/numtilesx)
sizeofz#=(zsize/numtilesz)
usingvert=0
usingindex=0
for x=1 to numtilesx step 1
for y=1 to numtilesz step 1
`front face tris
set vertexdata position usingvert,(sizeofx#*x),0,(sizeofz#*y):set vertexdata normals usingvert,0,0,1
set vertexdata position usingvert+1,(sizeofx#*x)-sizeofx#,0,(sizeofz#*y):set vertexdata normals usingvert+1,0,0,1
set vertexdata position usingvert+2,(sizeofx#*x),0,(sizeofz#*y)-sizeofz#:set vertexdata normals usingvert+2,0,0,1
set vertexdata position usingvert+3,(sizeofx#*x)-sizeofx#,0,(sizeofz#*y)-sizeofz#:set vertexdata normals usingvert+3,0,0,1
set vertexdata uv usingvert,0,0
set vertexdata uv usingvert+1,1,0
set vertexdata uv usingvert+2,0,1
set vertexdata uv usingvert+3,1,1
`set indexdata usingindex,usingvert+3
`set indexdata usingindex+1,usingvert+1
`set indexdata usingindex+2,usingvert+2
`set indexdata usingindex+3,usingvert+2
`set indexdata usingindex+4,usingvert+1
`set indexdata usingindex+5,usingvert
set indexdata usingindex,usingvert+3
set indexdata usingindex+1,usingvert+0
set indexdata usingindex+2,usingvert+2
set indexdata usingindex+3,usingvert+1
set indexdata usingindex+4,usingvert+0
set indexdata usingindex+5,usingvert+3
usingindex=usingindex+6
usingvert=usingvert+4
next y
next x
unlock vertexdata
set object normals objectnumber
endfunction
