PandaSteer 2

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()

:smiley: It’s BLAAZZZZIN’ now !