hey gang

I'm trying to mess with a nurbs sphere and (eventually) distort it using a list of values.

right now, I'm failing.... got it to work with a regular sphere primitive, but that's a completely different beast... can someone please help? bad code below:

;--------

(clear)


(hint-frustum-cull)
;(hint-none)
;(wire-colour #(0 1 0))
(hint-wire)


(define dims 10)

(define shape
    (with-state
        (build-nurbs-sphere dims dims)
        )
    )

(with-primitive shape
    (pdata-add "n0" "v")
    (pdata-copy "n" "n0")
    )

(define r 1)


(define vals (build-list dims (lambda (n) (vmul (rndvec) 0.003))))

(define (bump p)

    (for [(c (in-range 1 8))]
        (set! r (+ 1 (remainder r dims)))

        (with-primitive p
            (let [(faces (/ (pdata-size) 4))]
                ;            (printf "faces: ~s\n" faces)
                (pdata-index-map! (lambda (i p n)
                        (let* [(face (quotient i 4))
                                (row (quotient face dims))
                                (col (remainder face dims))
                                (rv (list-ref vals col))]
                            ;(printf "row: ~a\n" row)
                            (cond [(= face 4)

                                    (vadd  p
                                        (vector
                                            (* (vx rv) (vx n))
                                            (* (vy rv) (vy n))
                                            (* (vz rv) (vz n))
                                            )
                                        )

                                    ]
                                [else p])
                            )
                        )
                    "p" "n0")
                )
            (recalc-normals 0)
            )
        )
    )

(every-frame (bump shape))





Reply via email to