basic voxel writing
This commit is contained in:
22
project.clj
22
project.clj
@ -3,7 +3,27 @@
|
|||||||
:url "http://example.com/FIXME"
|
:url "http://example.com/FIXME"
|
||||||
:license {:name "Eclipse Public License"
|
:license {:name "Eclipse Public License"
|
||||||
:url "http://www.eclipse.org/legal/epl-v10.html"}
|
:url "http://www.eclipse.org/legal/epl-v10.html"}
|
||||||
:dependencies [[org.clojure/clojure "1.8.0"]]
|
:dependencies [[org.clojure/clojure "1.8.0"]
|
||||||
|
[org.clojure/math.numeric-tower "0.0.4"]
|
||||||
|
[org.clojure/tools.trace "0.7.9"]
|
||||||
|
;; [net.mikera/core.matrix "0.57.0"]
|
||||||
|
;;[thi.ng/luxor "0.3.1"]
|
||||||
|
;; [thi.ng/geom "0.0.1062"]
|
||||||
|
;; [thi.ng/geom "0.0.908"]
|
||||||
|
[thi.ng/geom "0.0.815"]
|
||||||
|
;; [thi.ng/math "0.2.1"]
|
||||||
|
|
||||||
|
;; [thi.ng/geom-types "0.0.908"]
|
||||||
|
;; [thi.ng/geom-core "0.0.908"]
|
||||||
|
[thi.ng/geom-core "0.0.815"]
|
||||||
|
;; [thi.ng/geom-meshops "0.0.908"]
|
||||||
|
;; [thi.ng/xerror "0.1.0"]
|
||||||
|
|
||||||
|
;; [thi.ng/geom "0.0.1173-SNAPSHOT"]
|
||||||
|
;; [thi.ng/geom-voxel "0.0.908"]
|
||||||
|
|
||||||
|
;;[seesaw "1.4.5"]
|
||||||
|
]
|
||||||
:main ^:skip-aot voxelburst.core
|
:main ^:skip-aot voxelburst.core
|
||||||
:target-path "target/%s"
|
:target-path "target/%s"
|
||||||
:profiles {:uberjar {:aot :all}})
|
:profiles {:uberjar {:aot :all}})
|
||||||
|
|||||||
@ -1,7 +1,81 @@
|
|||||||
(ns voxelburst.core
|
(ns voxelburst.core
|
||||||
|
(:require
|
||||||
|
[clojure.java.io :as io]
|
||||||
|
[clojure.string :as string]
|
||||||
|
;;[thi.ng.geom.aabb :as a]
|
||||||
|
[thi.ng.geom.core :as g]
|
||||||
|
[thi.ng.geom.core.vector :refer [vec3]]
|
||||||
|
[thi.ng.geom.mesh.io :as mio]
|
||||||
|
;;[thi.ng.geom.polygon :as p]
|
||||||
|
;;[thi.ng.geom.rect :as r]
|
||||||
|
[thi.ng.geom.voxel.isosurface :as iso]
|
||||||
|
[thi.ng.geom.voxel.svo :as svo]
|
||||||
|
;;[thi.ng.luxor.core :refer :all]
|
||||||
|
;;[thi.ng.luxor.io :as lio]
|
||||||
|
[thi.ng.math.core :as m]
|
||||||
|
;;[termite.sim :as sim]
|
||||||
|
;;[termite.ui :as ui]
|
||||||
|
)
|
||||||
(:gen-class))
|
(:gen-class))
|
||||||
|
|
||||||
|
|
||||||
|
(def res (double 1/2))
|
||||||
|
(def num-holes 30)
|
||||||
|
|
||||||
|
(defn voxel-sphere
|
||||||
|
[tree op origin radius res]
|
||||||
|
(let [rg (range (- radius) (+ radius res) res)
|
||||||
|
coll (for [x rg, y rg, z rg
|
||||||
|
:let [v (vec3 x y z)]
|
||||||
|
:when (<= (g/mag v) radius)] (g/+ origin v))]
|
||||||
|
(svo/apply-voxels op tree coll)))
|
||||||
|
|
||||||
|
(time
|
||||||
|
(def v
|
||||||
|
(reduce
|
||||||
|
(fn [tree [op o r]] (voxel-sphere tree op o r res))
|
||||||
|
(svo/voxeltree 32 res)
|
||||||
|
(concat
|
||||||
|
;; create big sphere
|
||||||
|
[[svo/set-at (vec3 15 15 15) 14]]
|
||||||
|
;; remove several smaller spheres
|
||||||
|
(repeatedly
|
||||||
|
num-holes
|
||||||
|
#(vector
|
||||||
|
svo/delete-at
|
||||||
|
(vec3 (m/random 32) (m/random 32) (m/random 32))
|
||||||
|
(m/random 4 8)))))))
|
||||||
|
|
||||||
|
(def construct
|
||||||
|
(let [tree (svo/voxeltree 8 res)]
|
||||||
|
(svo/set-at tree (vec3 4 4 4))))
|
||||||
|
|
||||||
|
#_(defn frames-to-voxels
|
||||||
|
"Frame size must be cubic."
|
||||||
|
[frames & [inside-val]]
|
||||||
|
(let [size (count frames)
|
||||||
|
border 4
|
||||||
|
tree (svo/voxeltree (+ size (* border 2)) res)
|
||||||
|
coll (for [z (range size)
|
||||||
|
y (range size)
|
||||||
|
x (range size)
|
||||||
|
:let [frame (nth frames (- size z 1))]
|
||||||
|
:when (sim/inside? (ui/cell-value (:render frame) x y) inside-val)]
|
||||||
|
(vec3 (+ x border) (+ y border) (+ z border)))]
|
||||||
|
(svo/apply-voxels svo/set-at tree coll)))
|
||||||
|
|
||||||
|
(defn make-tree []
|
||||||
|
(let [tree (svo/voxeltree 8 (double 1/2))]
|
||||||
|
(svo/set-at tree (vec3 4 4 4))))
|
||||||
|
|
||||||
|
(defn write-ply
|
||||||
|
[name tree & [resolution inside-val]]
|
||||||
|
(time
|
||||||
|
(doseq [i (list resolution)]
|
||||||
|
(with-open [o (io/output-stream (string/join (list name "-" i ".ply")))]
|
||||||
|
(mio/write-ply o (g/tessellate (iso/surface-mesh tree i (or inside-val 0.5))))))))
|
||||||
|
|
||||||
(defn -main
|
(defn -main
|
||||||
"I don't do a whole lot ... yet."
|
[& [name count grid-size resolution]]
|
||||||
[& args]
|
(let [tree (make-tree)]
|
||||||
(println "Hello, World!"))
|
(write-ply name tree resolution)))
|
||||||
|
|||||||
Reference in New Issue
Block a user