I have a small problem when using projected textures for creating shadow imitation beneath characters. I would like to have only one projection but the texture gets projected through the object, on both sides.
And if the obj has multiple geoms or a more complex shape i could get unlimited number of projections whitch i dont want.
Can i somehow affect the distance haow far the textre gets projected or any other way to get only one projection on top of the object?
A small exmple to illustrate the problem.
from direct.directbase.DirectStart import *
from direct.actor import Actor
from pandac.PandaModules import *
from direct.task import Task
from direct.interval.IntervalGlobal import *
base.setBackgroundColor(0, 0, 0, 1)
proj = render.attachNewNode(LensNode('proj'))
#lens = OrthographicLens()
lens=PerspectiveLens()
lens.setFar(2.5)
#add two plins
#vert data
vdata = GeomVertexData('name',GeomVertexFormat.getV3(),Geom.UHDynamic)
#writers
vertex = GeomVertexWriter(vdata, 'vertex')
#verts
vertex.addData3f(1,1,0)
vertex.addData3f(1,-1,0)
vertex.addData3f(-1,-1,0)
vertex.addData3f(-1,1,0)
vertex.addData3f(2,2,-2)
vertex.addData3f(2,-2,-2)
vertex.addData3f(-2,-2,-2)
vertex.addData3f(-2,2,-2)
#create prims
prim1 = GeomTristrips(Geom.UHStatic)
prim1.addVertex(0)
prim1.addVertex(1)
prim1.addVertex(3)
prim1.addVertex(2)
prim1.closePrimitive()
prim2 = GeomTristrips(Geom.UHStatic)
prim2.addVertex(4)
prim2.addVertex(5)
prim2.addVertex(7)
prim2.addVertex(6)
prim2.closePrimitive()
#geom
geom=Geom(vdata)
geom.addPrimitive(prim1)
geom.addPrimitive(prim2)
node=GeomNode('gnode')
node.addGeom(geom)
geom.doublesideInPlace()
nodep = render.attachNewNode(node)
#projector
proj.node().setLens(lens)
proj.node().showFrustum()
proj.find('frustum').setColor(1, 0, 0, 1)
camModel = loader.loadModel('camera.egg')
camModel.reparentTo(proj)
proj.reparentTo(render)
proj.setPos(0,0, 5)
proj.setHpr(0, -90, 0)
tex = loader.loadTexture('maps/envir-reeds.png')
tex.setWrapU(Texture.WMBorderColor)
tex.setWrapV(Texture.WMBorderColor)
tex.setBorderColor(VBase4(1, 1, 1, 0))
ts = TextureStage('ts')
ts.setSort(1)
ts.setMode(TextureStage.MDecal)
nodep.projectTexture(ts, tex, proj)
base.disableMouse()
camera.setPos(0,-20, 10)
camera.setHpr(0, -25, 0)
inter=LerpHprInterval(nodep, 3, (0,0,360), (0,0,0))
inter.loop()
run()