Vala プログラミング

WebGPU プログラミング

おなが@京都先端科学大

Julia マーチングキューブ法( Marching Cubes )によるメッシュ( mesh )の描画

マーチングキューブ法を用いて、mesh_objectを生成する。

1 球( sphere )
実行結果
f:id:onagat12:20191102021736p:plain

プログラム
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 )
実行結果
f:id:onagat12:20191102022058p:plain

プログラム
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 )
実行結果
f:id:onagat12:20191102022146p:plain

プログラム
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)