Claro esta que puede adquirir lib externas, pero la verdad lo que se trata es de que aprendamos a desarrollarlas nosotros mismos.
Existen dos tipos de sombras, unas llamadas volumetricas y otras llamadas cartográficas, yo por ahora explicaré cómo hacer las cartográficas, iniciativa que tome debido a varios usuarios que me escribieron respecto a la duda.
En teoría los elementos que intervienen en una sombra cartográfica son dos cámaras, una que visualiza el mundo desde la perspectiva del jugador y otra que hace de foco de luz, la que hace de foco, el contenido que visualiza lo dibuja en buffer de la textura usada para trabajo esa sombra.
Graphics3d 800,600,32,0.
Setbuffer backbuffer().
Global xscale#=1*(.8/3).
Global sombra = createtexture (256,256,16+32).
===============================
Ambientlight 64,64,64.
Global cámara = createcamera ().
Global terreno = createcube ().
Global sol = createlight().
Positionentity cámara, 0,6,-12.
Scaleentity terreno, 50,1,50.
Rotateentity sol, 90,0,0.
Global cubo = createcube ().
Positionentity cubo,0,4,0.
Entitycolor cubo,255,0,0.
==================================
Global s_cámara = createcamera ().
Cameraviewport s_camara,0,0,256,256.
Cameraprojmode s_camara,2.
Camerazom s_camara.3.
Positionentity s_camara,0,200,0.
Hideentity s_camara.
Entitytexture terreno,sombra.
Repeat tturnentity cubo,1.1,0 tpointentity s_camara,cubo tactualizar() trenderworld t tflip t.
Until keyhit(1).
End.
Function actualizar() tsetbuffer texturebuffer(sombra) tcolor 255,255,255 trect 0,0,texturewidth(sombra)+1,textureheight(sombra)+1 tsetbuffer backbuffer() tshowentity s_camara thideentity cámara tentitycolor cubo,64,64,64 tentityfx cubo,1+8 t trenderworld() tcopyrect 0,0,256,256,0,0,backbuffer(),texturebuffer(sombra) tentitycolor cubo,255,0,0 tentityfx cubo,0 t tfor s=1 todo countsurfaces(terreno) surf=getsurface (terreno, s) for v=0 todo countvértices(surf)-1 tformpoint vertexx(surf),vertexy(surf),vertexz(surf),terreno,s_camara vertextexcords surf, (tformedx()/xscale#)/32+0.5,1-((tformedy()/xscale#)/32+.5) next tnext t t t thideentity s_camara tshowentity cámara t t.
End function.
.
Espero esto sea de utilidad. Un saludo.