**slaps forehead**

i thought you were posting the script from your blog example...
guess that's why skimming emails before replying is not recommended :)

thanks Dave, you da man!

cheers
Evan




On Feb 2, 2010, at 12:18 PM, Dave Griffiths wrote:

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






Reply via email to