This is the result (my edited code above) on my 2.8GHz HyperThreading :
- 1 arrive char : 70 fps
- 10 wandering chars : 8 fps
Then I created 2 terrains, 1 for rendering, 1 for collision. The one for collision consists of a bunch af geomnodes, 1 geomnode built of simply 1 rectangle.
Result :
- 1 arrive char : 165 fps
- 10 wandering chars : 28 fps
in makeTerrain (scene.py):
# Now create a terrain model from the heightmap.
tnp = render.attachNewNode("Terrain")
data4Rendering = EggData()
vp = EggVertexPool('Terrain vertex pool')
# for collision geometries
tCollNP = tnp.attachNewNode("Terrain4Collision")
for i in range(0,len(midpoints)-1):
for j in range(0,len(midpoints)-1):
# vertexpool for 1 collision geomnode
vCollpool = EggVertexPool('TerrainCollision vpool')
bl = Point3D(i,j,midpoints[i][j])
tr = Point3D(i+1,j+1,midpoints[i+1][j+1])
br = Point3D(i+1,j,midpoints[i+1][j])
tl = Point3D(i,j+1,midpoints[i][j+1])
poly, polyColl = makeRectangle(vp,vCollpool,bl,tr,br,tl)
data4Rendering.addChild(poly)
# data for collision terrain, 1 rectangle per geomnode
data4Collision = EggData()
data4Collision.addChild(polyColl)
rectNode = loadEggData(data4Collision)
tCollNP.attachNewNode(rectNode)
pandaNode = loadEggData(data4Rendering)
tnp.attachNewNode(pandaNode)
return tnp, tCollNP
makeRectangle (scene.py):
def makeRectangle(vp,vCollpool,bl=None,tr=None,br=None,tl=None):
if bl is None: bl = Point3D(-10,-10,0)
if tr is None: tr = Point3D(10,10,0)
if br is None:
l = tr.getX() - bl.getX()
br = bl + Vec3D(l,0,0)
if tl is None:
w = tr.getY() - bl.getY()
tl = bl + Vec3D(0,w,0)
poly = EggPolygon()
polyColl = EggPolygon()
for corner in [bl,br,tr,tl]:
v = EggVertex()
v.setPos(corner)
vC = EggVertex()
vC.setPos(corner)
poly.addVertex(vp.addVertex(v))
polyColl.addVertex(vCollpool.addVertex(vC))
poly.recomputePolygonNormal() # Use faceted not smoothed lighting
return poly, polyColl
SteerTest (steer.py) :
# Make some terrain and colour, scale and position it.
tnp, terrain4Coll = makeTerrain(h=8)
tnp.setColor(0.6,0.8,0.5,1)
tnp.setPos(tnp,-50,-50,0)
tnp.setScale(3)
terrain4Coll.setCollideMask(floorMASK)
terrain4Coll.hide()
It’s BLAAZZZZIN’ now !