mesh
parent
id
- (make-c-struct ffi-core:vector3df position)
- (make-c-struct ffi-core:vector3df rotation)
- (make-c-struct ffi-core:vector3df scale)
+ (ffi-core:vector3df->pointer position)
+ (ffi-core:vector3df->pointer rotation)
+ (ffi-core:vector3df->pointer scale)
(bool->integer also-add-if-mesh-pointer-zero))))
(if (null-pointer? node) #f node)))
(let ((camera (ffi-scene:add-camera-scene-node
scene-manager
parent
- (make-c-struct ffi-core:vector3df position)
- (make-c-struct ffi-core:vector3df lookat)
+ (ffi-core:vector3df->pointer position)
+ (ffi-core:vector3df->pointer lookat)
id
(bool->integer make-active))))
(if (null-pointer? camera) #f camera)))
(bool->integer invert-mouse)
(bool->integer make-active)))
-(define (add-custom-scene-node! parent
- scene-manager
- id
- custom-render)
- (ffi-scene:add-custom-scene-node
- parent
- scene-manager
- id
- (procedure->pointer void custom-render '())))
+(define* (add-custom-scene-node! scene-manager
+ render
+ get-bounding-box
+ get-material-count
+ get-material
+ #:key
+ (parent %null-pointer)
+ (id -1)
+ (position '(0 0 0))
+ (rotation '(0 0 0))
+ (scale '(1 1 1)))
+ (let ((c-get-bounding-box
+ (lambda ()
+ (ffi-core:aabbox3df->pointer (get-bounding-box))))
+ (c-get-material
+ (lambda (i)
+ (ffi-core:material->pointer (get-material i)))))
+ (ffi-scene:add-custom-scene-node
+ scene-manager
+ parent
+ id
+ (ffi-core:vector3df->pointer position)
+ (ffi-core:vector3df->pointer rotation)
+ (ffi-core:vector3df->pointer scale)
+ (procedure->pointer void render '())
+ (procedure->pointer '* c-get-bounding-box '())
+ (procedure->pointer uint32 get-material-count '())
+ (procedure->pointer '* c-get-material (list uint32)))))
(define* (add-octree-scene-node scene-manager mesh
#:key
(define (set-position! node newpos)
(ffi-scene:set-position
node
- (make-c-struct ffi-core:vector3df newpos)))
+ (ffi-core:vector3df->pointer newpos)))