X-Git-Url: https://git.jsancho.org/?p=guile-assimp.git;a=blobdiff_plain;f=src%2Fassimp.scm;fp=src%2Fassimp.scm;h=dad56342e5eff3afa8a23cbd42048090b615325c;hp=917a6853732dece010142646e1294684b19cca5f;hb=fe037abb54b99784fa30c9f8ffa1c594482b97bf;hpb=708fbd4d04091af33626837f4a5141d20748762d diff --git a/src/assimp.scm b/src/assimp.scm index 917a685..dad5634 100644 --- a/src/assimp.scm +++ b/src/assimp.scm @@ -22,10 +22,17 @@ #:use-module (assimp low-level material) #:use-module (assimp low-level matrix) #:use-module (assimp low-level mesh) + #:use-module (assimp low-level postprocess) #:use-module (assimp low-level scene) #:use-module (assimp low-level types) #:use-module (assimp low-level vector) - #:use-module (system foreign)) + #:use-module (system foreign) + #:re-export (ai-material-key + ai-process-steps + ai-process-convert-to-left-handed + ai-process-preset-target-realtime-fast + ai-process-preset-target-realtime-quality + ai-process-preset-target-realtime-max-quality)) ;;; Scenes @@ -134,6 +141,42 @@ ai-material-num-allocated) +(define-public (ai-get-material-color mat color-type) + (let ((pmat (unwrap-ai-material mat)) + (pkey (string->pointer (car color-type))) + (type (cadr color-type)) + (index (caddr color-type)) + (pout (parse-aiColor4D (make-list 4 0) #:reverse #t))) + (let ((res (aiGetMaterialColor pmat pkey type index pout))) + (if (< res 0) + res + (wrap-ai-color4d pout))))) + +(define-public (ai-get-material-float-array mat color-type max) + (let ((pmat (unwrap-ai-material mat)) + (pkey (string->pointer (car color-type))) + (type (cadr color-type)) + (index (caddr color-type)) + (pout (make-c-struct (make-list max float) '(0))) + (pmax (make-c-struct (list unsigned-int) (list max)))) + (let ((res (aiGetMaterialFloatArray pmat pkey type index pout pmax))) + (if (< res 0) + res + (parse-c-struct pout (make-list max float)))))) + +(define-public (ai-get-material-integer-array mat color-type max) + (let ((pmat (unwrap-ai-material mat)) + (pkey (string->pointer (car color-type))) + (type (cadr color-type)) + (index (caddr color-type)) + (pout (make-c-struct (make-list max int) '(0))) + (pmax (make-c-struct (list unsigned-int) (list max)))) + (let ((res (aiGetMaterialIntegerArray pmat pkey type index pout pmax))) + (if (< res 0) + res + (parse-c-struct pout (make-list max int)))))) + + ;;; Faces (define-conversion-type parse-aiFace -> ai-face @@ -287,8 +330,34 @@ (aiTransformVecByMatrix4 cvec cmat) (wrap-ai-vector3d cvec))) +(define-public (ai-multiply-matrix3 m1 m2) + (let ((cm1 (parse-aiMatrix3x3 (map cdr (ai-matrix3x3-contents m1)) #:reverse #t)) + (cm2 (parse-aiMatrix3x3 (map cdr (ai-matrix3x3-contents m2)) #:reverse #t))) + (aiMultiplyMatrix3 cm1 cm2) + (wrap-ai-matrix3x3 cm1))) + (define-public (ai-multiply-matrix4 m1 m2) (let ((cm1 (parse-aiMatrix4x4 (map cdr (ai-matrix4x4-contents m1)) #:reverse #t)) (cm2 (parse-aiMatrix4x4 (map cdr (ai-matrix4x4-contents m2)) #:reverse #t))) (aiMultiplyMatrix4 cm1 cm2) (wrap-ai-matrix4x4 cm1))) + +(define-public (ai-identity-matrix3) + (let ((cmat (parse-aiMatrix3x3 (make-list 9 0) #:reverse #t))) + (aiIdentityMatrix3 cmat) + (wrap-ai-matrix3x3 cmat))) + +(define-public (ai-identity-matrix4) + (let ((cmat (parse-aiMatrix4x4 (make-list 16 0) #:reverse #t))) + (aiIdentityMatrix4 cmat) + (wrap-ai-matrix4x4 cmat))) + +(define-public (ai-transpose-matrix3 mat) + (let ((cmat (parse-aiMatrix3x3 (map cdr (ai-matrix3x3-contents mat)) #:reverse #t))) + (aiTransposeMatrix3 cmat) + (wrap-ai-matrix3x3 cmat))) + +(define-public (ai-transpose-matrix4 mat) + (let ((cmat (parse-aiMatrix4x4 (map cdr (ai-matrix4x4-contents mat)) #:reverse #t))) + (aiTransposeMatrix4 cmat) + (wrap-ai-matrix4x4 cmat)))