Code archives/3D Graphics - Misc/UV Spy
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
Track down disobedient texture-triangles | |||||
; UV Spy 1.0 by CSP ; ; Sometimes I have problems with some Triangles after the UV Mapping Works. ; EG sometimes there are some Tris which are mapped by the wrong texture parts and I cannot ; figure out where those Triangles are located on the Texture Bitmap. ; This is where UV_Spy comes in handy: simply click the nasty Triangle and it ; will be marked on a Reference Texture which then can be used as a blended Layer ; in any Painting App to correct the wrong mapped Triangle on the Texture Bitmap. ; ATM it works only with one Surface, but it might be modified to work with multiple ; Textures. meshname$="fighter.3ds" ; this Model will be loaded and investigated texname$="fighter_tex.bmp" ; this is the Models Texture (must be declared anyway) Graphics3D 640,480,16,2 SetBuffer BackBuffer() Global camera=CreateCamera() CameraClsColor camera,50,50,50 TranslateEntity camera,0,0,-30 light=CreateLight() Global ttx0,tty0,ttx1,tty1,ttx2,tty2 Global mesh=LoadMesh(meshname$) Global tex=LoadTexture(texname$) Global texsize=TextureWidth(tex) EntityTexture mesh,tex EntityPickMode mesh,2 ay#=0 az#=0 ; ####################################### MAIN ##################################### While Not KeyDown(1) If KeyDown(54) If KeyDown(208) Then TranslateEntity mesh,0,.1,0 If KeyDown(200) Then TranslateEntity mesh,0,-.1,0 Else If KeyDown(208) Then TranslateEntity mesh,0,0,.1 If KeyDown(200) Then TranslateEntity mesh,0,0,-.1 EndIf If KeyDown(54) If KeyDown(203) Then az=az+.25 If KeyDown(205) Then az=az-.25 Else If KeyDown(203) Then ay=ay+.25 If KeyDown(205) Then ay=ay-.25 EndIf RotateEntity mesh,0,ay,az mx=MouseX() my=MouseY() p=DrawUV(mx,my) RenderWorld() If p<>0 ; preview selected Triangle Color 255,255,255 Line ttx0,tty0,ttx1,tty1 Line ttx1,tty1,ttx2,tty2 Line ttx2,tty2,ttx0,tty0 EndIf Color 255,255,255 Text 0,0, "up/down=zoom, (up/down)+rightShift=move-Y" Text 0,16,"left/right=turn-Y, (left/right)+rightShift=turn-Z" Text 0,32,"Esc=End, LMB=permanently draw Triangle" Text 0,48,p Flip Wend ; ################################################################################## Cls yes$=Input("save UV_spy.bmp ? (Y/N)") If Upper$(yes$)="Y" SaveBuffer(TextureBuffer(tex),"UV_spy.bmp") EndIf End Function DrawUV(mx,my) p=CameraPick(camera,mx,my) If p<>0 ; picked position px#=PickedX() py#=PickedY() pz#=PickedZ() s=PickedSurface() t=PickedTriangle() ; vertices of picked triangle x0#=VertexX(s,TriangleVertex(s,t,0)) x1#=VertexX(s,TriangleVertex(s,t,1)) x2#=VertexX(s,TriangleVertex(s,t,2)) y0#=VertexY(s,TriangleVertex(s,t,0)) y1#=VertexY(s,TriangleVertex(s,t,1)) y2#=VertexY(s,TriangleVertex(s,t,2)) z0#=VertexZ(s,TriangleVertex(s,t,0)) z1#=VertexZ(s,TriangleVertex(s,t,1)) z2#=VertexZ(s,TriangleVertex(s,t,2)) ;------- ; UVW of picked triangle u0#=VertexU(s,TriangleVertex(s,t,0)) u1#=VertexU(s,TriangleVertex(s,t,1)) u2#=VertexU(s,TriangleVertex(s,t,2)) v0#=VertexV(s,TriangleVertex(s,t,0)) v1#=VertexV(s,TriangleVertex(s,t,1)) v2#=VertexV(s,TriangleVertex(s,t,2)) w0#=VertexW(s,TriangleVertex(s,t,0)) w1#=VertexW(s,TriangleVertex(s,t,1)) w2#=VertexW(s,TriangleVertex(s,t,2)) ;------- ; world positon of tris TFormPoint x0,y0,z0,mesh,0 tx0#=TFormedX() ty0#=TFormedY() tz0#=TFormedZ() TFormPoint x1,y1,z1,mesh,0 tx1#=TFormedX() ty1#=TFormedY() tz1#=TFormedZ() TFormPoint x2,y2,z2,mesh,0 tx2#=TFormedX() ty2#=TFormedY() tz2#=TFormedZ() If MouseDown(1) ; definitively mark UV Triangle on Texture Color 255,0,0 SetBuffer TextureBuffer(tex) Line u0*texsize,v0*texsize,u1*texsize,v1*texsize Line u2*texsize,v2*texsize,u1*texsize,v1*texsize Line u0*texsize,v0*texsize,u2*texsize,v2*texsize SetBuffer BackBuffer() EndIf If p<>0 ; screen coords for a Triangle Preview CameraProject camera,tx0,ty0,tz0 ttx0=ProjectedX() tty0=ProjectedY() CameraProject camera,tx1,ty1,tz1 ttx1=ProjectedX() tty1=ProjectedY() CameraProject camera,tx2,ty2,tz2 ttx2=ProjectedX() tty2=ProjectedY() EndIf EndIf Return p End Function |
Comments
None.
Code Archives Forum