Problem with uvīs / Lightmapping
Blitz3D Forums/Blitz3D Programming/Problem with uvīs / Lightmapping
| ||
Hello. Inspired by many very nice Screenshots around here iīm writing a little lightmapper. Lightmapping itself seems to work, the big problem is the right uv mapping ov a simple texture map - maybe iīm kind of blind right now, testing some days... The function reads prev. generated separate lightmap for a triangle out of the type tri\.. , puts the map into the texturemap (one for all tris then) and tryīs to generate the vertex uv-coords for the tri. Putting the maps into the big texture works, generating the uvīs seems to work too (the red dots in screenshot mark the uvīs) - but the mapped cube (yes, it is a cube...:( ) looks absolutely texture-distorted... Screeny: The Function: Function create_lightmap(meshobj,size#,lmsize#,set=0) ; getting ticount For sys.lmsystem=Each lmsystem tricount=sys\tris Next ;getting pixeldimension of texture mapw#=Float(tricount)*size+Float(tricount)*4 maph#=Float(size+4) mapxstep#=Float(1/mapw) mapystep#=Float(1/maph) x#=0 y#=0 lm=CreateTexture(mapw,maph) SetBuffer TextureBuffer(lm) For tri.triangle=Each triangle DebugLog "Tri: "+t+" X:"+x Color t*20,t*20,t*20 Rect x,y,size,size,1 ;CopyRect(0,0,size,size,x,0,TextureBuffer(tri\lightmap),TextureBuffer(lm)) ;Color 255,255,255 ;Rect x,0,size,size,0 For vert=0 To 2 u#=mapxstep*x+(tri\pu[vert]*(size*mapxstep)) v#=maxystep*y+(tri\pv[vert]*(size*mapystep)) DebugLog "VERTEX "+tri\vert[vert]+" Texturcoord: "+u*mapw+" "+v*maph+" - "+tri\pu[vert]+" "+tri\pv[vert] VertexTexCoords(tri\surface,tri\vert[vert],u,v,1,set) Color 255,0,0 marker(u*mapw,v*maph,3,t) Next DebugLog "" x=x+size+4 t=t+1 Next SetBuffer BackBuffer() TextureCoords lm,set EntityTexture(meshobj,lm,0,set) mapimage=CreateImage(mapw+20,maph+20) CopyRect(0,0,mapw+20,maph+20,0,0,TextureBuffer(lm),ImageBuffer(mapimage)) Return(lm) End Function Function marker(x#,y#,s#,t) Oval x-(s/2),y-(s/2),s,s,1 SeedRnd MilliSecs() d=Rand(5,0) ;Text x+d,y+d,t End Function The Cube is a bb3d-Entity, 1 Surface. Debuglog gives all values right ????? Please, if anyone has an idea, please help me... hopefully, cy... |
| ||
Sorry, got it - 5 minīs after posting:u#=(tri\pu[vert] * (size /lmsize) )+(x/lmsize) v#=(tri\pv[vert] * (size / lmsize) )+(y/lmsize) works... |