Fixed transvoxel test

master
Marc Gilleron 2019-09-12 19:17:33 +01:00
parent 48fa3404bd
commit 31127bc3c1
3 changed files with 38 additions and 309 deletions

View File

@ -1,103 +0,0 @@
# Generic debug camera controller. Use anywhere.
# Nothing game-related, no reference from and to outside.
extends Camera
export var sensitivity = 0.4
export var min_angle = -90
export var max_angle = 90
export var speed = 10.0
export var capture_mouse = true
var _yaw = 0
var _pitch = 0
var _forward = Vector3(0,0,0)
var _current_speed = 0
var _max_speed = 0
func _ready():
if capture_mouse:
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
set_process(true)
set_process_input(true)
_current_speed = speed
_max_speed = speed * 10
func get_forward():
return get_transform().basis * Vector3(0,0,-1)
func _process(delta):
var motor = Vector3(0,0,0)
var forward = get_forward()
var right = get_transform().basis * Vector3(1,0,0)
var up = Vector3(0,1,0)
if abs(forward.y) < 1.0:
_forward = Vector3(forward.x, 0, forward.z).normalized()
if Input.is_key_pressed(KEY_Z) or Input.is_key_pressed(KEY_W):
motor += _forward
if Input.is_key_pressed(KEY_S):
motor -= _forward
if Input.is_key_pressed(KEY_Q) or Input.is_key_pressed(KEY_A):
motor -= right
if Input.is_key_pressed(KEY_D):
motor += right
if Input.is_key_pressed(KEY_SPACE):
motor += up
if Input.is_key_pressed(KEY_SHIFT):
motor -= up
set_translation(get_translation() + motor * (delta * _current_speed))
if motor.length_squared() > 0:
_current_speed *= 1.02
if _current_speed > _max_speed:
_current_speed = _max_speed
else:
_current_speed = speed
func _input(event):
if event.type == InputEvent.MOUSE_BUTTON:
if event.pressed and Input.get_mouse_mode() != Input.MOUSE_MODE_CAPTURED:
if capture_mouse:
# Capture the mouse
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
elif event.type == InputEvent.MOUSE_MOTION:
if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED || not capture_mouse:
# Get mouse delta
var motion = event.relative_pos
# Add to rotations
_yaw -= motion.x * sensitivity
_pitch += motion.y * sensitivity
# Clamp pitch
var e = 0.001
if _pitch > max_angle-e:
_pitch = max_angle-e
elif _pitch < min_angle+e:
_pitch = min_angle+e
# Apply rotations
set_rotation(Vector3(0, deg2rad(_yaw), 0))
rotate(get_transform().basis.x.normalized(), -deg2rad(_pitch))
elif event.type == InputEvent.KEY:
if event.pressed:
if event.scancode == KEY_ESCAPE:
# Get the mouse back
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
elif event.scancode == KEY_I:
var pos = get_translation()
var fw = get_forward()
print("Position: ", pos, ", Forward: ", fw)

View File

@ -7,17 +7,19 @@ func _ready():
func _input(event):
if event.type == InputEvent.KEY and event.pressed:
if event.scancode == KEY_KP_ADD:
radius += 8
if radius > 255:
radius = 255
generate()
elif event.scancode == KEY_KP_SUBTRACT:
radius -= 8
if radius < 0:
radius = 0
generate()
if event is InputEventKey:
if event.pressed:
match event.scancode:
KEY_KP_ADD:
radius += 8
if radius > 255:
radius = 255
generate()
KEY_KP_SUBTRACT:
radius -= 8
if radius < 0:
radius = 0
generate()
func generate():
@ -26,18 +28,19 @@ func generate():
var size = 32
voxels.create(size,size,size)
var channel = VoxelBuffer.CHANNEL_ISOLEVEL
voxels.fill(255, 0)
voxels.fill(255, channel)
if false:
voxels.set_voxel(0, 4,4,4, 0)
voxels.set_voxel(0, 4,4,4, channel)
var v = 0
voxels.set_voxel(120, 5,4,4, 0)
voxels.set_voxel(v, 4,5,4, 0)
voxels.set_voxel(v, 4,4,5, 0)
voxels.set_voxel(v, 3,4,4, 0)
voxels.set_voxel(v, 4,3,4, 0)
voxels.set_voxel(v, 4,4,3, 0)
voxels.set_voxel(120, 5,4,4, channel)
voxels.set_voxel(v, 4,5,4, channel)
voxels.set_voxel(v, 4,4,5, channel)
voxels.set_voxel(v, 3,4,4, channel)
voxels.set_voxel(v, 4,3,4, channel)
voxels.set_voxel(v, 4,4,3, channel)
if false:
var s = 3
@ -45,7 +48,7 @@ func generate():
for z in range(s, e):
for x in range(s, e):
for y in range(s, e):
voxels.set_voxel(int(radius), x, y, z, 0)
voxels.set_voxel(int(radius), x, y, z, channel)
if false:
var r = 15
@ -56,31 +59,29 @@ func generate():
var v = 0
if d < r:
v = 255
voxels.set_voxel(v, x, y, z, 0)
voxels.set_voxel(v, x, y, z, channel)
if true:
var noise = OsnNoise.new()
var fractal_noise = OsnFractalNoise.new()
fractal_noise.set_source_noise(noise)
fractal_noise.set_octaves(3)
fractal_noise.set_period(16)
fractal_noise.set_persistance(0.5)
var fractal_noise = OpenSimplexNoise.new()
fractal_noise.octaves = 3
fractal_noise.period = 16
fractal_noise.persistence = 0.5
for z in range(0, voxels.get_size_z()):
for x in range(0, voxels.get_size_x()):
for y in range(0, voxels.get_size_y()):
var v = fractal_noise.get_noise_3d(x,y,z)
if true:
voxels.set_voxel_f(v, x,y,z, 0)
voxels.set_voxel_f(v, x,y,z, channel)
else:
if v > 0:
v = 0
else:
v = 255
voxels.set_voxel(v, x, y, z, 0)
voxels.set_voxel(v, x, y, z, channel)
var tvm = VoxelMesherTransvoxel.new()
var mesh = tvm.build(voxels, 0)
var mesh = tvm.build_mesh(voxels)
if mesh == null:
print("The mesh is empty")

View File

@ -1,207 +1,38 @@
[gd_scene load_steps=7 format=2]
[ext_resource path="res://transvoxel_test/transvoxel_test.gd" type="Script" id=1]
[ext_resource path="res://transvoxel_test/debug_camera.gd" type="Script" id=2]
[ext_resource path="res://axes.tscn" type="PackedScene" id=3]
[ext_resource path="res://axes.tscn" type="PackedScene" id=2]
[ext_resource path="res://spectator_avatar.tscn" type="PackedScene" id=3]
[ext_resource path="res://grid.gd" type="Script" id=4]
[sub_resource type="FixedSpatialMaterial" id=1]
flags_transparent = false
flags_unshaded = false
flags_on_top = false
flags_use_point_size = false
vertex_color_use_as_albedo = false
vertex_color_is_srgb = false
params_diffuse_mode = 0
params_blend_mode = 0
params_cull_mode = 0
params_depth_draw_mode = 0
params_line_width = 1.0
params_point_size = 1.0
[sub_resource type="SpatialMaterial" id=1]
albedo_color = Color( 0.7, 0.7, 0.7, 1 )
specular_mode = 0
specular_color = Color( 0.1, 0.1, 0.1, 1 )
specular_metalness = 0.1
specular_roughness = 0.0
emission_enabled = false
normal_enabled = false
rim_enabled = false
clearcoat_enabled = false
anisotropy_enabled = false
ao_enabled = false
height_enabled = false
subsurf_scatter_enabled = false
refraction_enabled = false
detail_enabled = false
uv1_scale = Vector2( 1, 1 )
uv1_offset = Vector2( 0, 0 )
uv2_scale = Vector2( 1, 1 )
uv2_offset = Vector2( 0, 0 )
[sub_resource type="Environment" id=2]
background_mode = 0
background_skybox_scale = 1.0
background_color = Color( 0, 0, 0, 1 )
background_energy = 1.0
background_canvas_max_layer = 0
ambient_light_color = Color( 0, 0, 0, 1 )
ambient_light_energy = 1.0
ambient_light_skybox_contribution = 0.0
ss_reflections_enabled = false
ss_reflections_max_steps = 64
ss_reflections_accel = 0.04
ss_reflections_fade = 2.0
ss_reflections_depth_tolerance = 0.2
ss_reflections_accel_smooth = true
ss_reflections_roughness = true
ssao_enabled = false
ssao_radius = 1.0
ssao_intensity = 1.0
ssao_radius2 = 0.0
ssao_intensity2 = 1.0
ssao_bias = 0.01
ssao_light_affect = 1.0
ssao_color = Color( 0, 0, 0, 1 )
ssao_blur = true
dof_blur_far_enabled = false
dof_blur_far_distance = 10.0
dof_blur_far_transition = 5.0
dof_blur_far_amount = 0.1
dof_blur_far_quality = 1
dof_blur_near_enabled = false
dof_blur_near_distance = 2.0
dof_blur_near_transition = 1.0
dof_blur_near_amount = 0.1
dof_blur_near_quality = 1
glow_enabled = false
glow_levels/1 = false
glow_levels/2 = false
glow_levels/3 = true
glow_levels/4 = false
glow_levels/5 = true
glow_levels/6 = false
glow_levels/7 = false
glow_intensity = 0.8
glow_strength = 1.0
glow_bloom = 0.0
glow_blend_mode = 2
glow_hdr_treshold = 1.0
glow_hdr_scale = 2.0
glow_bicubic_upscale = false
tonemap_mode = 0
tonemap_exposure = 1.0
tonemap_white = 1.0
auto_expoure_enabled = false
auto_expoure_scale = 0.4
auto_expoure_min_luma = 0.05
auto_expoure_max_luma = 8.0
auto_expoure_speed = 0.5
adjustment_enabled = false
adjustment_brightness = 1.0
adjustment_contrast = 1.0
adjustment_saturation = 1.0
ssao_blur = 1
[node name="Node" type="Node"]
script = ExtResource( 1 )
[node name="MeshInstance" type="MeshInstance" parent="."]
_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
layers = 1
material_override = SubResource( 1 )
cast_shadow = 1
extra_cull_margin = 0.0
use_as_billboard = false
use_as_y_billboard = false
use_depth_scale = false
visible_in_all_rooms = false
use_in_baked_light = false
lod_min_distance = 0.0
lod_min_hysteresis = 0.0
lod_max_distance = 0.0
lod_max_hysteresis = 0.0
mesh = null
skeleton = NodePath("..")
[node name="Camera" type="Camera" parent="."]
_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
transform = Transform( 1, 0, 0, 0, 0.943118, 0.332458, 0, -0.332458, 0.943118, 0, 3.06759, 8.94332 )
projection = 0
fov = 60.0
near = 0.1
far = 200.0
keep_aspect = 1
current = false
cull_mask = 1048575
environment = null
h_offset = 0.0
v_offset = 0.0
script = ExtResource( 2 )
sensitivity = 0.3
min_angle = -90
max_angle = 90
speed = 5.0
capture_mouse = true
[node name="axes" parent="." instance=ExtResource( 3 )]
[node name="axes" parent="." instance=ExtResource( 2 )]
transform = Transform( 20, 0, 0, 0, 20, 0, 0, 0, 20, -20, 0, -20 )
[node name="DirectionalLight" type="DirectionalLight" parent="."]
_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
transform = Transform( 0.230139, -0.950812, 0.207346, 0.479203, 0.296166, 0.826226, -0.846995, -0.0907862, 0.523791, 14.2262, 0, 0 )
layers = 1
light_color = Color( 1, 1, 1, 1 )
light_energy = 1.0
light_negative = false
light_specular = 0.5
light_cull_mask = -1
shadow_enabled = false
shadow_color = Color( 0, 0, 0, 1 )
shadow_bias = 0.2
shadow_contact = 0.0
shadow_max_distance = 0.0
editor_only = false
directional_shadow_mode = 2
directional_shadow_split_1 = 0.1
directional_shadow_split_2 = 0.2
directional_shadow_split_3 = 0.5
directional_shadow_blend_splits = false
directional_shadow_normal_bias = 0.2
directional_shadow_bias_split_scale = 0.1
[node name="grid" type="MeshInstance" parent="."]
_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
layers = 1
material_override = null
cast_shadow = 1
extra_cull_margin = 0.0
use_as_billboard = false
use_as_y_billboard = false
use_depth_scale = false
visible_in_all_rooms = false
use_in_baked_light = false
lod_min_distance = 0.0
lod_min_hysteresis = 0.0
lod_max_distance = 0.0
lod_max_hysteresis = 0.0
mesh = null
skeleton = NodePath("..")
script = ExtResource( 4 )
size = 4
step = 1
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
environment = SubResource( 2 )
[node name="SpectatorAvatar" parent="." instance=ExtResource( 3 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 8.80608, 11.0698, 35.9803 )