I am doing something wrong. This code results in a flat grey poly over the 8,8 square instead of a “highlight”. Where have I gone wrong?
from direct.showbase.ShowBase import ShowBase
from direct.task.Task import Task
from random import random,randint
from panda3d.core import *
from panda3d.egg import *
loadPrcFileData("editor-startup", "show-frame-rate-meter #t")
loadPrcFileData("editor-startup", "sync-video #f")
class GridData(object):
def __init__(self, width, height):
self.width = width
self.height = height
self.state = [False for x in range(width*height)]
class GridView(object):
def __init__(self, gridData):
self.gridData = gridData
self.eggTex = EggTexture("tex", Filename("0.png"))
self.eggTex2 = EggTexture("tex2", Filename("1.png"))
self.generate()
def generate(self):
gridData = self.gridData
self.data = EggData()
vp = EggVertexPool("grid")
self.data.addChild(vp)
for z in range(gridData.height):
for x in range(gridData.width):
poly = EggPolygon("%d_%d" % (x,z))
self.data.addChild(poly)
v = EggVertex()
v.setPos(Point3D(x, 0, z))
v.setUv(Point2D(0,0))
poly.addVertex(vp.addVertex(v))
v = EggVertex()
v.setPos(Point3D(x+1, 0, z))
v.setUv(Point2D(1,0))
poly.addVertex(vp.addVertex(v))
v = EggVertex()
v.setPos(Point3D(x+1, 0, z+1))
v.setUv(Point2D(1,1))
poly.addVertex(vp.addVertex(v))
v = EggVertex()
v.setPos(Point3D(x, 0, z+1))
v.setUv(Point2D(0,1))
poly.addVertex(vp.addVertex(v))
indx = z*gridData.width+x
if gridData.state[indx] == False:
poly.setTexture(self.eggTex)
else:
poly.setTexture(self.eggTex2)
self.data.recomputePolygonNormals()
def highlightSq(self, x, z):
gridData = self.gridData
hIndx = z*(gridData.width+1)+x
self.highlightData = EggData()
vp = EggVertexPool("highlight")
self.highlightData.addChild(vp)
poly = EggPolygon()
self.highlightData.addChild(poly)
v = EggVertex()
v.setPos(Point3D(x, -.1, z))
v.setUv(Point2D(0,0))
poly.addVertex(vp.addVertex(v))
v = EggVertex()
v.setPos(Point3D(x+1, -.1, z))
v.setUv(Point2D(1,0))
poly.addVertex(vp.addVertex(v))
v = EggVertex()
v.setPos(Point3D(x+1, -.1, z+1))
v.setUv(Point2D(1,1))
poly.addVertex(vp.addVertex(v))
v = EggVertex()
v.setPos(Point3D(x, -.1, z+1))
v.setUv(Point2D(0,1))
poly.addVertex(vp.addVertex(v))
poly.setColor(VBase4(.5,.5,.5,1))
self.highlightData.recomputePolygonNormals()
def getHighlightNodePath(self):
node = loadEggData(self.highlightData)
nodepath = NodePath(node)
nodepath.setName("highlight")
return nodepath
def getNodePath(self):
node = loadEggData(self.data)
node.setIntoCollideMask(BitMask32.bit(1))
nodepath = NodePath(node)
nodepath.setName("grid_node")
return nodepath
class MyApp(ShowBase):
def __init__(self):
ShowBase.__init__(self)
self.disableMouse()
self.gridData = GridData(10,10)
self.gridView = GridView(self.gridData)
node = self.gridView.getNodePath()
node.reparentTo(self.render)
self.gridView.highlightSq(8,8)
node = self.gridView.getHighlightNodePath()
node.reparentTo(self.render)
node.node().setAttrib(ColorBlendAttrib.make(ColorBlendAttrib.MAdd))
self.setupLights()
self.camera.setPos(5,-15,-4)
self.camera.setHpr(0,30,0)
def setupLights(self):
plight = PointLight('plight')
plight.setColor(VBase4(1, 1, 1, 1))
plight.setAttenuation(Point3(0, 0, 0.2))
plnp = self.render.attachNewNode(plight)
plnp.setPos(5, -2, 5)
self.render.setLight(plnp)
alight = AmbientLight('alight')
alight.setColor(VBase4(0.2, 0.2, 0.2, 1))
alnp = self.render.attachNewNode(alight)
self.render.setLight(alnp)
app = MyApp()
app.run()