OverviewFilesCommitsIssuesDocsReleasesPeers

proc-nodes / demo / sdf_column_probe.gd

27 lines · gd ref:
## The field down the y axis through the sphere's poles, straight out of the
## ProcVolume grid.
extends SceneTree

func _init() -> void:
	var g := ProcNodeGraph.new()
	var s := g.add_node(MeshUVSphereNode.new())
	g.get_node(s).set_input_default(2, 1.0)
	var tg := g.add_node(MeshToSDFGridNode.new())
	g.get_node(tg).set_input_default(1, 0.25)
	g.connect_sockets(s, 0, tg, 0)
	var vol = g.evaluate_socket(tg, 0).get_volume()
	var d: PackedFloat32Array = vol.get_density_grid()
	var r: Vector3i = vol.get_grid_resolution()
	var o: Vector3 = vol.get_grid_origin()
	var xi := 7
	var zi := 7
	print("column x=%.3f z=%.3f   (positive = solid)" % [o.x + xi*0.25, o.z + zi*0.25])
	for y in range(r.y):
		var wy := o.y + y * 0.25
		var v := d[(y*r.y + 0)*0 + (y*r.x*0)]  # placeholder
		v = d[(y*r.y + 0)*0 + ((y*r.y + 0)*0)]
		v = d[(y * r.y + y) * 0 + 0]
		v = d[(zi * r.y + y) * r.x + xi]
		print("  y=%6.3f  %8.4f   expected %8.4f" % [wy, v, 1.0 - Vector3(o.x+xi*0.25, wy, o.z+zi*0.25).length()])
	quit(0)