Just realized I posted this in a topic titled with β[SOLVED]β so no one may notice. So Im creatign a new thread. I got most of the code from the Meshdrawer example given in another thread, I just added code so it woudl run stand-alone. Well , i thought it would
The beam example is exactly what Iβm trying to do, so I added some panda models and a beam.tga file I had, but when I run the code below - I donβt see anything when I hold down shift - am I missing something?
import direct.directbase.DirectStart
from direct.showbase import DirectObject
from direct.task import Task
from direct.actor.Actor import Actor
from pandac.PandaModules import *
class world(DirectObject.DirectObject):
def __init__(self):
self.accept("shift", self.handleShift, [1])
self.accept("shift-up", self.handleShift, [0])
self.panda1 = Actor("models/panda-model",{"walk": "models/panda-walk4"})
self.panda1.setScale(0.005, 0.005, 0.005)
self.panda1.setPos(-8, 42, 0)
self.panda2 = Actor("models/panda-model",{"walk": "models/panda-walk4"})
self.panda2.setScale(0.005, 0.005, 0.005)
self.panda2.setPos(8, 42, 0)
self.panda1.reparentTo(render)
self.panda2.reparentTo(render)
def handleShift(self, arg):
if arg == 1:
source = self.panda1
target = self.panda2
self.createBeam(source, target)
else:
self.deleteBeam()
def createBeam(self, source, target):
self.beammd = MeshDrawer()
self.beammd.setBudget(2)
self.mdbeamgennode = self.beammd.getRoot()
self.mdbeamgennode.reparentTo(render)
beamtex = loader.loadTexture("beam.tga")
self.mdbeamgennode.setTexture(beamtex)
self.mdbeamgennode.setTransparency(True)
self.mdbeamgennode.setPos(0,0,0)
self.mdbeamgennode.setDepthWrite(False)
self.mdbeamgennode.setTwoSided(True)
self.mdbeamgennode.setLightOff(True)
taskMgr.add(self.drawBeam, "drawBeamTask", extraArgs=[source,target], appendTask=True)
def drawBeam(self, source, target, task):
t = globalClock.getFrameTime()
self.beammd.begin(base.cam,render)
# MeshDrawer expects Vec3(x,y,z), but getPos() returns a VBase3, that's why we use Vec3(object.getPos()) to convert the format. self.beammd.segment(Vec3(source.getPos()),Vec3(target.getPos()),Vec4(0,0,1.0,1.0),0.05*sin(t*20)+0.1,Vec4(0.2,1.0,1.0,1.0))
# segment: start, stop, frame, size, color
self.beammd.end()
return task.cont
def deleteBeam(self):
self.mdbeamgennode.removeNode()
taskMgr.remove("drawBeamTask")
# run the sample
g = world()
run()