マーチングキューブ法を用いて、mesh_objectを生成する。
1 球( sphere )
実行結果
プログラム
mc-sphere.jl
using Makie using Meshing using GeometryTypes using LinearAlgebra: dot, norm using Colors scene = Scene(resolution = (600, 600)) sdf = SignedDistanceField(HyperRectangle(Vec(-2,-2,-2.),Vec(4,4,4.)), 0.25) do v norm(v) - 1 end m = SimpleMesh(sdf, MarchingCubes()) scene = mesh!(scene, m, color = :blue)
2 トーラス( torus )
実行結果
プログラム
mc-torus.jl
using Makie using Meshing using GeometryTypes using LinearAlgebra: dot, norm using Colors scene = Scene(resolution = (600, 600)) sdf = SignedDistanceField(HyperRectangle(Vec(-2,-2,-2.),Vec(4,4,4.)), 0.25) do v t = Vec(1.0, 0.5) #t = Vec(0.5, 0.5) v2 = Vec(v[1], v[3]) q = Vec(norm(v2) - t[1], v[2]) norm(q) - t[2] end m = SimpleMesh(sdf, MarchingCubes()) scene = mesh!(scene, m, color = :blue)
3 シリンダー( cylinder )
実行結果
プログラム
mc-cylinder.jl
using Makie using Meshing using GeometryTypes using LinearAlgebra: dot, norm using Colors scene = Scene(resolution = (600, 600)) sdf = SignedDistanceField(HyperRectangle(Vec(-1,-1,-1.),Vec(2,2,2.)), 0.5) do v a = Vec(v[1], v[3]) b = Vec(0, 0, 1) c = Vec(b[1], b[2]) norm(a - c) - b[3] end m = SimpleMesh(sdf, MarchingCubes()) scene = mesh!(scene, m, color = :blue)