hey y'all

Giving back to the list - I wrote some code to generate circles (working on ellipses next). Here it is in progress... will post a better version later when I adapt it to ellipses. For now, I learned quite a bit about creating primitives. It could use some texture data as well, but what the heck... I'm still new to scheme. In fact, I spent way too much time thinking of how to build the vertices list recursively (or functionally) using some elegant scheme but in the end wound up doing it the way I would do it in Java or C++. Good that scheme is flexible.

Cheers
Evan



;----- return a vector on a circle based on index

(define (calc-xyz index max-index r)
    (let*
        ( [angle (* 6.28312 (/ index (- max-index 1)))]
          [x (* (cos angle) r)]
          [y (* (sin angle) r)] )

        ;(display (vector x y 0))(newline)
        (vector x y 0))
    )


(define (build-ellipse rmin rmaj num-verts)
    (define p (build-polygons (* 3 num-verts) 'triangle-list))
    (with-primitive p
         (for ([i (in-range 0 (* 3 num-verts) 3) ])
                     (pdata-set! "p" i (vector 0 0 0))
                     (pdata-set! "n" i (vector 0 0 -1))
(pdata-set! "p" (+ i 1) (calc-xyz (/ i 3) num- verts rmin))
                     (pdata-set! "n" (+ i 1) (vector 0 0 -1))
(pdata-set! "p" (+ i 2) (calc-xyz (+ (/ i 3) 1) num-verts rmin))
                     (pdata-set! "n" (+ i 2) (vector 0 0 -1)))
         (poly-convert-to-indexed)
     )
 p)


;---- this is handy for printing out all vertices

(define (show-pdata prm)
    (with-primitive prm
        (for ([i (in-range (pdata-size))])
                (display (pdata-ref "p" i))(newline))
    )

)


; (pdata-set! Name vertnumber vector)

Reply via email to