Cleaned up demo to make it working normally
parent
68af715c08
commit
ff549feafa
|
@ -12,9 +12,6 @@ func _ready():
|
||||||
|
|
||||||
|
|
||||||
func _input(event):
|
func _input(event):
|
||||||
return
|
|
||||||
if not Input.is_key_pressed(KEY_CONTROL):
|
|
||||||
return
|
|
||||||
if event is InputEventMouseButton:
|
if event is InputEventMouseButton:
|
||||||
if event.pressed:
|
if event.pressed:
|
||||||
if event.button_index == BUTTON_LEFT:
|
if event.button_index == BUTTON_LEFT:
|
||||||
|
@ -64,8 +61,7 @@ func do_sphere(center, fradius, add):
|
||||||
if add:
|
if add:
|
||||||
res = min(d, e)
|
res = min(d, e)
|
||||||
else:
|
else:
|
||||||
res = max(d, e)
|
res = max(-d, e)
|
||||||
#print(res)
|
|
||||||
storage.set_voxel_f(res, x, y, z, channel)
|
storage.set_voxel_f(res, x, y, z, channel)
|
||||||
|
|
||||||
_terrain.make_area_dirty(AABB(center - Vector3(r,r,r), 2*Vector3(r,r,r)))
|
_terrain.make_area_dirty(AABB(center - Vector3(r,r,r), 2*Vector3(r,r,r)))
|
||||||
|
|
|
@ -7,15 +7,17 @@ var _geometric_error = 0.01
|
||||||
var _mesh_instance = null
|
var _mesh_instance = null
|
||||||
var _debug_mesh_instance = null
|
var _debug_mesh_instance = null
|
||||||
var _sphere_mesh_instance = null
|
var _sphere_mesh_instance = null
|
||||||
|
var _model_rotation = 0.0
|
||||||
var _voxels = VoxelBuffer.new()
|
var _voxels = VoxelBuffer.new()
|
||||||
var _mesher = VoxelMesherDMC.new()
|
var _mesher = VoxelMesherDMC.new()
|
||||||
var _need_generate = false
|
var _need_generate = false
|
||||||
|
var _iso_scale = 1.0
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
|
|
||||||
_mesher.set_octree_mode(VoxelMesherDMC.OCTREE_NONE)
|
_mesher.set_octree_mode(VoxelMesherDMC.OCTREE_NONE)
|
||||||
|
|
||||||
_voxels.create(18, 18, 18)
|
_voxels.create(20, 20, 20)
|
||||||
|
|
||||||
_mesh_instance = MeshInstance.new()
|
_mesh_instance = MeshInstance.new()
|
||||||
_mesh_instance.material_override = SpatialMaterial.new()
|
_mesh_instance.material_override = SpatialMaterial.new()
|
||||||
|
@ -43,7 +45,7 @@ func generate_with_stats():
|
||||||
for k in stats_average:
|
for k in stats_average:
|
||||||
stats_average[k] = 0.0
|
stats_average[k] = 0.0
|
||||||
|
|
||||||
var iterations = 100
|
var iterations = 1
|
||||||
for i in iterations:
|
for i in iterations:
|
||||||
generate()
|
generate()
|
||||||
var stats = _mesher.get_stats()
|
var stats = _mesher.get_stats()
|
||||||
|
@ -55,7 +57,7 @@ func generate_with_stats():
|
||||||
|
|
||||||
print("---")
|
print("---")
|
||||||
print("Sphere at ", _sphere_position, ", radius ", _sphere_radius)
|
print("Sphere at ", _sphere_position, ", radius ", _sphere_radius)
|
||||||
print("Geometric error: ", _geometric_error)
|
print("Geometric error: ", _geometric_error, ", iso_scale=", _iso_scale)
|
||||||
print(stats_average)
|
print(stats_average)
|
||||||
|
|
||||||
#------------------------------------------------------
|
#------------------------------------------------------
|
||||||
|
@ -74,17 +76,19 @@ func generate():
|
||||||
_voxels.fill_iso(1.0, VoxelBuffer.CHANNEL_ISOLEVEL)
|
_voxels.fill_iso(1.0, VoxelBuffer.CHANNEL_ISOLEVEL)
|
||||||
|
|
||||||
var vt = VoxelIsoSurfaceTool.new()
|
var vt = VoxelIsoSurfaceTool.new()
|
||||||
|
vt.set_iso_scale(_iso_scale)
|
||||||
vt.set_offset(Vector3(1, 1, 1)) # For padding
|
vt.set_offset(Vector3(1, 1, 1)) # For padding
|
||||||
vt.set_buffer(_voxels)
|
vt.set_buffer(_voxels)
|
||||||
vt.do_sphere(_sphere_position, _sphere_radius)
|
vt.do_cube(Transform(Basis(Vector3(1, 0, 0), _model_rotation), _sphere_position), Vector3(_sphere_radius, _sphere_radius, _sphere_radius))
|
||||||
vt.do_sphere(_sphere_position + Vector3(5,2,3), _sphere_radius / 1.5)
|
#vt.do_sphere(_sphere_position, _sphere_radius)
|
||||||
vt.do_plane(make_plane(_sphere_position, Vector3(0,1,0)))
|
#vt.do_sphere(_sphere_position + Vector3(5,2,3), _sphere_radius / 1.5)
|
||||||
#raster_terrain(_voxels)
|
#vt.do_plane(make_plane(_sphere_position, Vector3(0,1,0)))
|
||||||
|
|
||||||
_mesher.set_mesh_mode(VoxelMesherDMC.MESH_NORMAL)
|
_mesher.set_mesh_mode(VoxelMesherDMC.MESH_NORMAL)
|
||||||
_mesher.set_geometric_error(_geometric_error)
|
_mesher.set_geometric_error(_geometric_error)
|
||||||
var mesh = _mesher.build_mesh(_voxels)
|
var mesh = _mesher.build_mesh(_voxels)
|
||||||
_mesh_instance.mesh = mesh
|
_mesh_instance.mesh = mesh
|
||||||
|
_mesh_instance.material_override = load("res://dmc_terrain/dmc_terrain_material.tres")
|
||||||
|
|
||||||
if false:
|
if false:
|
||||||
_mesher.set_mesh_mode(VoxelMesherDMC.MODE_DEBUG_DUAL_GRID)
|
_mesher.set_mesh_mode(VoxelMesherDMC.MODE_DEBUG_DUAL_GRID)
|
||||||
|
@ -161,24 +165,31 @@ func _input(event):
|
||||||
_geometric_error = 0.0
|
_geometric_error = 0.0
|
||||||
_need_generate = true
|
_need_generate = true
|
||||||
|
|
||||||
|
elif event.scancode == KEY_KP_4:
|
||||||
|
_model_rotation -= PI / 32.0
|
||||||
|
_need_generate = true
|
||||||
|
|
||||||
|
elif event.scancode == KEY_KP_6:
|
||||||
|
_model_rotation += PI / 32.0
|
||||||
|
_need_generate = true
|
||||||
|
|
||||||
|
elif event.scancode == KEY_KP_7:
|
||||||
|
_iso_scale -= 0.1
|
||||||
|
if _iso_scale < 0.1:
|
||||||
|
_iso_scale = 0.1
|
||||||
|
_need_generate = true
|
||||||
|
|
||||||
|
elif event.scancode == KEY_KP_9:
|
||||||
|
_iso_scale += 0.1
|
||||||
|
_need_generate = true
|
||||||
|
|
||||||
elif event.scancode == KEY_P:
|
elif event.scancode == KEY_P:
|
||||||
print_buffer_to_images(_voxels, VoxelBuffer.CHANNEL_ISOLEVEL, "isolevel", 10, false)
|
print_buffer_to_images(_voxels, VoxelBuffer.CHANNEL_ISOLEVEL, "isolevel", 10)
|
||||||
print_buffer_to_images(_voxels, VoxelBuffer.CHANNEL_GRADIENT_X, "gradient", 10, true)
|
|
||||||
|
|
||||||
elif event.scancode == KEY_R:
|
elif event.scancode == KEY_R:
|
||||||
_need_generate = true
|
_need_generate = true
|
||||||
|
|
||||||
|
|
||||||
static func raster_terrain(voxels):
|
|
||||||
var ci = VoxelBuffer.CHANNEL_ISOLEVEL
|
|
||||||
var noise = OpenSimplexNoise.new()
|
|
||||||
for z in voxels.get_size_z():
|
|
||||||
for y in voxels.get_size_y():
|
|
||||||
for x in voxels.get_size_x():
|
|
||||||
var n = noise.get_noise_3d(x, y, z)
|
|
||||||
voxels.set_voxel_iso(n, x, y, z, ci)
|
|
||||||
|
|
||||||
|
|
||||||
func create_sphere(pos, r):
|
func create_sphere(pos, r):
|
||||||
var mat = SpatialMaterial.new()
|
var mat = SpatialMaterial.new()
|
||||||
mat.flags_transparent = true
|
mat.flags_transparent = true
|
||||||
|
@ -194,7 +205,7 @@ func create_sphere(pos, r):
|
||||||
return mi
|
return mi
|
||||||
|
|
||||||
|
|
||||||
static func print_buffer_to_images(voxels, channel, fname, upscale, gradient):
|
static func print_buffer_to_images(voxels, channel, fname, upscale):
|
||||||
|
|
||||||
for y in voxels.get_size_y():
|
for y in voxels.get_size_y():
|
||||||
|
|
||||||
|
@ -206,10 +217,8 @@ static func print_buffer_to_images(voxels, channel, fname, upscale, gradient):
|
||||||
for z in voxels.get_size_z():
|
for z in voxels.get_size_z():
|
||||||
for x in voxels.get_size_x():
|
for x in voxels.get_size_x():
|
||||||
var r = 0.5 * voxels.get_voxel_iso(x, y, z, channel) + 0.5
|
var r = 0.5 * voxels.get_voxel_iso(x, y, z, channel) + 0.5
|
||||||
if gradient:
|
if r < 0.5:
|
||||||
var g = 0.5 * voxels.get_voxel_iso(x, y, z, channel + 1) + 0.5
|
im.set_pixel(x, z, Color(r, r, r*0.5 + 0.5))
|
||||||
var b = 0.5 * voxels.get_voxel_iso(x, y, z, channel + 2) + 0.5
|
|
||||||
im.set_pixel(x, z, Color(r, g, b))
|
|
||||||
else:
|
else:
|
||||||
im.set_pixel(x, z, Color(r, r, r))
|
im.set_pixel(x, z, Color(r, r, r))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue