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.