From 766688e9c0423e70231337e2b61d3b1bec0c94d8 Mon Sep 17 00:00:00 2001 From: John Connors Date: Sun, 13 Jul 2008 15:35:12 +0100 Subject: [PATCH] More work on md2 file loading --- file-md2.lisp | 53 +++++++++++++++++++++++++---------------------------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/file-md2.lisp b/file-md2.lisp index ffeb547..1c2008d 100644 --- a/file-md2.lisp +++ b/file-md2.lisp @@ -247,21 +247,17 @@ (defun parse-md2-frames (offset n size nverts stream) (file-position stream offset) - (format *debug-io* "~A Frames~%" n) (let ((frames (iterate (for i from 0 below n) - (format *debug-io* "Parsing frame ~A~%" i) (file-position stream (+ offset (* i size))) - (format *debug-io* "File read from ~X~%" (file-position stream)) (collecting (let ((header (read-value 'md2-frame-header stream))) - (format *debug-io* "Header Name ~A~%" (babel::octets-to-string (null-terminate (name-of header))) (let ((vertices (iterate (for j from 0 below nverts) (collecting (read-value 'md2-vertex stream))))) - (cons header vertices)))))))) + (cons header vertices))))))) frames)) (defun process-vertices (scale translation vertices) @@ -287,40 +283,41 @@ (iterate (for tri in tris) (collecting (cons - (list :vertices - (aref (vertex-indices-of tri) 0) - (aref (vertex-indices-of tri) 1) - (aref (vertex-indices-of tri) 2)) + (list :vertices + (aref (vertex-indices-of tri) 0) + (aref (vertex-indices-of tri) 1) + (aref (vertex-indices-of tri) 2)) (list :uvs (aref (uv-indices-of tri) 0) (aref (uv-indices-of tri) 1) (aref (uv-indices-of tri) 2)))))) +(defclass md2 () + ((sts :accessor sts-of :initarg :sts) + (frames :accessor frames-of :initarg :frames) + (tris :accessor tris-of :initarg :tris))) + -(defun parse-md2-file (stream out) + +(defun parse-md2-file (stream) + "Read in an md2 file from the stream" (let* ((header (read-value 'md2-header stream))) (format *debug-io* "~D Skins ~D Vertices ~D UVS ~D Tris" (nskins-of header) (nvertices-of header) (nuvs-of header) (ntris-of header)) (let* - ((skins (parse-md2-skin-names (skin-offset-of header) (nskins-of header) stream)) - (uvs (parse-md2-uvs (uv-offset-of header) (nuvs-of header) stream)) - (tris (parse-md2-triangles (tris-offset-of header) (ntris-of header) stream)) - (frames (parse-md2-frames (frames-offset-of header) (nframes-of header) (nvertices-of header) stream))) - (iterate - (for frame in frames) - (destructuring-bind (header vertices) - frame - (format ":vertices ~A" - (process-vertices (scale-of header) (translation-of header))) - (format ":texcoords ~A" (process-uvs uvs - (coerce - (skinwidth-of header) 'single-float) - (coerce - (skinheight-of header) 'single-float))) - (format ":normals ~A" (process-normals vertices)) - (format ":faces ~A " (process-faces tris))))))) - + ((result (make-instance 'md2 + :frames (parse-md2-frames (frames-offset-of header) (nframes-of header) (framesize-of header) (nvertices-of header) stream) + :sts (parse-md2-uvs (uv-offset-of header) (nuvs-of header) stream) + :tris (parse-md2-triangles (tris-offset-of header) (ntris-of header) stream)))) + result))) + + +;; (defmethod pose ((mesh md2-mesh) frame-name skin-name) +;; (mesh :clear-vertices) +;; (let ((pose-frame (get-frame-of mesh))) +;; (iterate +;; (for vertex in (cdr frame) ;; ;; test code -- 2.11.4.GIT