[Fluxus] voxels and blobby commits
evan.raskob [lists]
lists at lowfrequency.org
Tue Feb 2 04:28:39 PST 2010
**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))
>>>
>>>
>>>
>>
>
More information about the Fluxus
mailing list