I don’t know about the zbuffer… two things that come to my mind…
with probing planes:
from vedo import *
msh = merge(Sphere(r=0.5), Sphere(r=0.5).x(1).scale(0.8)) # whatever mesh
step = 0
planes = []
for i in range(8):
step += 0.1
p = Grid(resx=100, resy=100).scale(2).pos(0.5,-1, -0.5+step)
planes.append(p)
planes = merge(planes).wireframe(0).c("grey5")
cplanes = planes.clone().cutWithBox(msh).cutWithMesh(msh, invert=1).triangulate()
show([[msh, planes], [cplanes, f"volume: {cplanes.area()*0.1}"]], N=2, axes=1)
or you can use vtkOBBTree.IntersectWithLine()
from a grid of points on your plane to the mesh and then multiply by the size of the grid element… I don’t know if it’s faster.