Why aren't these dynamic shadows UV-mapping right?

Blitz3D Forums/Blitz3D Programming/Why aren't these dynamic shadows UV-mapping right?

I fixed it so the shadow stretches with distance. The shadow also fades out, which is a nice way to go from not casting a shadow to casting one:

Graphics3D 800,600,16,2 
SetBuffer BackBuffer() 

l=CreateLight()

Global cam=CreateCamera()
MoveEntity cam,0,20,-80

m=LoadMesh("C:\Program Files\Blitz3D\Samples\Blitz 3D Samples\mak\castle\markio\mariorun.x")
PositionMesh m,0,-MeshHeight(m)/2,0
PositionEntity m,0,MeshHeight(m)/2,0
EntityColor m,100,100,100 

b=CreateCube()
ScaleMesh b,100,.5,100
PositionEntity b,0,-1,0
t=LoadTexture("C:\Program Files\Blitz3D\Samples\Blitz 3D Samples\mak\castle\castle\gothic3.jpg")
ScaleTexture t,0.1,0.1
EntityTexture b,t

;================================================
;Shadow caster type
;================================================
Type ShadowCaster
Field camera
Field w,h
Field texture
Field shadowmesh
Field magnification#
Field shadowsize#
End Type

;================================================
;Create a shadow caster entity
;================================================
s.shadowcaster=New shadowcaster
s\camera=CreateCamera()
HideEntity s\camera
s\w=256
s\h=256
s\texture=CreateTexture(s\w,s\h)
s\shadowmesh=createquad()
s\magnification#=12
s\shadowsize#=10
EntityFX s\shadowmesh,9
EntityBlend s\shadowmesh,2
EntityTexture s\shadowmesh,s\texture
CameraClsColor s\camera,255,255,255
CameraViewport s\camera,0,0,s\w,s\h
CameraFogMode s\camera,1
CameraFogRange s\camera,0,0
PositionEntity s\camera,0,30,0

;================================================
;Loop
;================================================
While Not KeyHit(1) 
MoveEntity m,KeyDown(205)-KeyDown(203),0,KeyDown(200)-KeyDown(208)
HideEntity b
UpdateShadowCaster s,m
ShowEntity b
PointEntity cam,m
RenderWorld
CopyRect 0,0,s\w,s\h,0,0,TextureBuffer(s\texture),BackBuffer()
Flip
Wend 
End

;================================================
;Update shadows caster entity
;================================================
Function UpdateShadowCaster(s.shadowcaster,rec)

ShowEntity rec
HideEntity s\shadowmesh
HideEntity cam
ShowEntity s\camera
PointEntity s\camera,rec
EntityColor rec,0,0,0
zoom#=EntityDistance(s\camera,rec)/s\magnification
CameraZoom s\camera,zoom
CameraClsMode s\camera,1,1
fog=EntityDistance(s\camera,rec)*2+50
CameraFogColor s\camera,fog,fog,fog
RenderWorld
EntityColor rec,255,255,255
HideEntity s\camera
ShowEntity cam
CopyRect 0,0,s\w,s\h,0,0,BackBuffer(),TextureBuffer(s\texture) 

ShowEntity s\shadowmesh
surf=GetSurface(s\shadowmesh,1)
nx#=EntityX(rec,1)-EntityX(s\camera,1)
ny#=EntityY(rec,1)-EntityY(s\camera,1)
nz#=EntityZ(rec,1)-EntityZ(s\camera,1)
PositionEntity s\shadowmesh,EntityX(rec,1),0,EntityZ(rec,1)
RotateEntity s\shadowmesh,0,0,0
AlignToVector s\shadowmesh,nx,0,nz,3
AlignToVector s\shadowmesh,0,1,0,2
CameraProject s\camera,EntityX(rec,1),0,EntityZ(rec,1)
y=ProjectedY()

stretch#=PointDistance(EntityX(rec,1),0,EntityZ(rec,1),EntityX(s\camera,1),0,EntityZ(s\camera,1))
stretch=stretch/5.0
ScaleEntity s\shadowmesh,s\shadowsize,1,s\shadowsize+stretch
MoveEntity s\shadowmesh,0,0,(Float(y)/Float(s\h)-.5)*s\shadowsize*2+stretch

End Function

Function CreateQuad()
mesh=CreateMesh()
surf=CreateSurface(mesh)
AddVertex surf,-1,0,-1,0,1
AddVertex surf,-1,0,1,0,0
AddVertex surf,1,0,1,1,0
AddVertex surf,1,0,-1,1,1
AddTriangle surf,0,1,2
AddTriangle surf,2,3,0
Return mesh
End Function