That's what that script does. You can make it into a function if you like? :)
cheers, dave On Tue, 2010-02-02 at 12:15 +0000, evan.raskob [lists] wrote: > This is great but when do we get the holy grail of poly->voxels?? :) > > > > > On Feb 2, 2010, at 10:04 AM, Dave Griffiths wrote: > > > Hi all, > > > > I've added a (voxel->blobby) command to so we can use the marching > > cubes > > meshing algorithm to create polygon solids from voxels. I've also > > updated the documentation a little for the voxels. > > > > I also stumbled across some strange new effects: > > http://www.pawfal.org/dave/blog/category/accidental-art/ > > > > Here is a script for converting polygons into voxels - thus completing > > the circle: > > > > (clear) > > (clear-colour 0.5) > > > > ; load the polygon object > > (define poly (with-state > > (scale 2) ; make it fit nicely within the voxels area > > (load-primitive "bot.obj"))) > > > > ; apply the fitting transform > > (with-primitive poly (apply-transform)) > > > > ; make some voxels > > (define v > > (with-state > > (blend-mode 'src-alpha 'one) > > (hint-nozwrite) > > (texture (load-texture "splat.png")) > > ; move around the polygon object > > (scale 8) > > (translate (vector -0.5 -0.5 -0.5)) > > (build-voxels 50 50 50))) > > > > ; utils - need to put these somewhere else > > (define (voxels-index x y z) > > (+ x (* y (voxels-width)) (* z (voxels-width) (voxels-height)))) > > > > (define (voxels-pos i) > > (vdiv (vector (modulo i (voxels-width)) > > (modulo (quotient i (voxels-width)) (voxels-height)) > > (quotient i (* (voxels-width) (voxels-height)))) (voxels- > > width))) > > > > ; for each voxel, check for odd or even intersection counts against > > the poly > > (with-primitive v > > (pdata-index-map! > > (lambda (i c) > > (let ((p (vtransform (voxels-pos i) (get-transform)))) > > (if (odd? (length (with-primitive poly (geo/line- > > intersect (vector 0 1 -1000) p)))) > > (vector 1 1 1 1) ; inside > > (vector 0 0 0 0)))) ; outside > > "c") > > ; the rest of this is to make it look pretty for previewing > > (voxels-calc-gradient) > > (pdata-copy "g" "c") > > (pdata-map! > > (lambda (c) > > (if (< (vmag c) 0.1) > > (vector 0 0 0 0) c)) > > "c")) > > > > (destroy poly) > > > > ; convert to a blobby > > (define bp > > (with-state > > (hint-unlit) ; again all this > > (colour 1) ; just for > > (hint-wire) ; preview rendering > > (voxels->blobby v))) > > (destroy v) > > > > (define pp (blobby->poly bp)) > > (destroy bp) > > > > (with-primitive pp > > (recalc-normals 1)) > > > > > > >
