Tessellation Shaders

For those who may want to know how to tessellate a standard model loaded the standard way (loadModel()) :

  • Use the code provided by tobspr
  • Replace the following code :
 ## Create the patch
        form = GeomVertexFormat.getV3()
        vdata = GeomVertexData("vertices", form, Geom.UHStatic)
        vertexWriter = GeomVertexWriter(vdata, "vertex")
        vertexWriter.addData3f(0, 0, 0)
        vertexWriter.addData3f(1, 0, 0)
        vertexWriter.addData3f(1, 0, 1)
        vertexWriter.addData3f(0, 0, 1)
        patches = GeomPatches(3, Geom.UHStatic)
        patches.addVertex(0)
        patches.addVertex(1)
        patches.addVertex(3)
        patches.closePrimitive()
        patches.addConsecutiveVertices(1, 3)
        patches.closePrimitive()
        gm = Geom(vdata)
        gm.addPrimitive(patches)
        gn = GeomNode("model")
        gn.addGeom(gm)
        self.tesselatedQuad = render.attachNewNode(gn)

by :

model = loader.loadModel("XX-YOUR-MODEL-XXX") 
geomNodeCollection = model.findAllMatches('**/+GeomNode')
for nodePath in geomNodeCollection:
       geomNode = nodePath.node()
       for i in range(geomNode.getNumGeoms()):
             geomNode.modifyGeom(i).makePatchesInPlace()
                 	
self.tesselatedQuad = model
self.tesselatedQuad.setScale(5.0)
self.tesselatedQuad.reparentTo(render)
self.tesselatedQuad.setPos(-0.5, 0, -250.5)

Your model indeed needs to be “patched” in order for the tessellation shader to work.

Hope that helps.