Răsfoiți Sursa

Update Mobile Sensors demo for Godot 4.1 (#992)

Alex 1 an în urmă
părinte
comite
232eb35acf

+ 2 - 2
mobile/sensors/README.md

@@ -5,10 +5,10 @@ These sensors are typically found on mobile devices, so don't expect this to wor
 
 Language: GDScript
 
-Renderer: GLES 2
+Renderer: Mobile
 
 Check out this demo on the asset library: https://godotengine.org/asset-library/asset/143
 
 ## Screenshots
 
-![Screenshot](screenshots/sensors.png)
+![Screenshot](screenshots/sensors.webp)

+ 17 - 18
mobile/sensors/cube_6.png.import

@@ -1,37 +1,36 @@
 [remap]
 
 importer="texture"
-type="StreamTexture2D"
-path.s3tc="res://.godot/imported/cube_6.png-0b954e2c88c21596044fe6448711988e.s3tc.stex"
-path.etc="res://.godot/imported/cube_6.png-0b954e2c88c21596044fe6448711988e.etc.stex"
+type="CompressedTexture2D"
+uid="uid://yba5kdfjgn65"
+path.s3tc="res://.godot/imported/cube_6.png-0b954e2c88c21596044fe6448711988e.s3tc.ctex"
+path.etc2="res://.godot/imported/cube_6.png-0b954e2c88c21596044fe6448711988e.etc2.ctex"
 metadata={
-"imported_formats": ["s3tc", "etc"],
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
 "vram_texture": true
 }
 
 [deps]
 
 source_file="res://cube_6.png"
-dest_files=["res://.godot/imported/cube_6.png-0b954e2c88c21596044fe6448711988e.s3tc.stex", "res://.godot/imported/cube_6.png-0b954e2c88c21596044fe6448711988e.etc.stex"]
+dest_files=["res://.godot/imported/cube_6.png-0b954e2c88c21596044fe6448711988e.s3tc.ctex", "res://.godot/imported/cube_6.png-0b954e2c88c21596044fe6448711988e.etc2.ctex"]
 
 [params]
 
 compress/mode=2
+compress/high_quality=false
 compress/lossy_quality=0.7
-compress/hdr_mode=0
-compress/bptc_ldr=0
+compress/hdr_compression=1
 compress/normal_map=0
-flags/repeat=true
-flags/filter=true
-flags/mipmaps=true
-flags/anisotropic=false
-flags/srgb=1
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
 process/fix_alpha_border=true
 process/premult_alpha=false
-process/HDR_as_SRGB=false
-process/invert_color=false
 process/normal_map_invert_y=false
-stream=false
-size_limit=0
-detect_3d=false
-svg/scale=1.0
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=0

+ 3 - 3
mobile/sensors/default_env.tres

@@ -1,7 +1,7 @@
-[gd_resource type="Environment" load_steps=2 format=2]
+[gd_resource type="Environment" load_steps=2 format=3 uid="uid://f45bpansont3"]
 
-[sub_resource type="Sky" id=1]
+[sub_resource type="Sky" id="1"]
 
 [resource]
 background_mode = 2
-background_sky = SubResource( 1 )
+sky = SubResource("1")

+ 29 - 9
mobile/sensors/main.gd

@@ -1,5 +1,6 @@
 extends Node
 
+
 # Below are a number of helper functions that show how you can use the raw sensor data to determine the orientation
 # of your phone/device. The cheapest phones only have an accelerometer only the most expensive phones have all three.
 # Note that none of this logic filters data. Filters introduce lag but also provide stability. There are plenty
@@ -30,6 +31,7 @@ func get_basis_for_arrow(p_vector):
 
 	return rotate
 
+
 # This function combines the magnetometer reading with the gravity vector to get a vector that points due north
 func calc_north(p_grav, p_mag):
 	# Always use normalized vectors!
@@ -43,6 +45,7 @@ func calc_north(p_grav, p_mag):
 	# Cross again to get our horizon aligned north
 	return east.cross(p_grav).normalized()
 
+
 # This function creates an orientation matrix using the magnetometer and gravity vector as inputs.
 func orientate_by_mag_and_grav(p_mag, p_grav):
 	var rotate = Basis()
@@ -61,6 +64,7 @@ func orientate_by_mag_and_grav(p_mag, p_grav):
 
 	return rotate
 
+
 # This function takes our gyro input and update an orientation matrix accordingly
 # The gyro is special as this vector does not contain a direction but rather a
 # rotational velocity. This is why we multiply our values with delta.
@@ -73,6 +77,7 @@ func rotate_by_gyro(p_gyro, p_basis, p_delta):
 
 	return rotate * p_basis
 
+
 # This function corrects the drift in our matrix by our gravity vector
 func drift_correction(p_basis, p_grav):
 	# as always, make sure our vector is normalized but also invert as our gravity points down
@@ -90,6 +95,7 @@ func drift_correction(p_basis, p_grav):
 
 	return p_basis
 
+
 func _process(delta):
 	# Get our data
 	var acc = Input.get_accelerometer()
@@ -98,9 +104,23 @@ func _process(delta):
 	var gyro = Input.get_gyroscope()
 
 	# Show our base values
-	get_node(^"Control/Accelerometer").text = "Accelerometer: " + str(acc) + ", gravity: " + str(grav)
-	get_node(^"Control/Magnetometer").text = "Magnetometer: " + str(mag)
-	get_node(^"Control/Gyroscope").text = "Gyroscope: " + str(gyro)
+	var format = "%.05f"
+
+	%AccX.text = format % acc.x
+	%AccY.text = format % acc.y
+	%AccZ.text = format % acc.z
+
+	%GravX.text = format % grav.x
+	%GravY.text = format % grav.y
+	%GravZ.text = format % grav.z
+
+	%MagX.text = format % mag.x
+	%MagY.text = format % mag.y
+	%MagZ.text = format % mag.z
+
+	%GyroX.text = format % gyro.x
+	%GyroY.text = format % gyro.y
+	%GyroZ.text = format % gyro.z
 
 	# Check if we have all needed data
 	if grav.length() < 0.1:
@@ -116,23 +136,23 @@ func _process(delta):
 		mag = Vector3(1.0, 0.0, 0.0)
 
 	# Update our arrow showing gravity
-	get_node(^"Arrows/AccelerometerArrow").transform.basis = get_basis_for_arrow(grav)
+	$Arrows/AccelerometerArrow.transform.basis = get_basis_for_arrow(grav)
 
 	# Update our arrow showing our magnetometer
 	# Note that in absence of other strong magnetic forces this will point to magnetic north, which is not horizontal thanks to the earth being, uhm, round
-	get_node(^"Arrows/MagnetoArrow").transform.basis = get_basis_for_arrow(mag)
+	$Arrows/MagnetoArrow.transform.basis = get_basis_for_arrow(mag)
 
 	# Calculate our north vector and show that
-	var north = calc_north(grav,mag)
-	get_node(^"Arrows/NorthArrow").transform.basis = get_basis_for_arrow(north)
+	var north = calc_north(grav, mag)
+	$Arrows/NorthArrow.transform.basis = get_basis_for_arrow(north)
 
 	# Combine our magnetometer and gravity vector to position our box. This will be fairly accurate
 	# but our magnetometer can be easily influenced by magnets. Cheaper phones often don't have gyros
 	# so it is a good backup.
-	var mag_and_grav = get_node(^"Boxes/MagAndGrav")
+	var mag_and_grav = $Boxes/MagAndGrav
 	mag_and_grav.transform.basis = orientate_by_mag_and_grav(mag, grav).orthonormalized()
 
 	# Using our gyro and do a drift correction using our gravity vector gives the best result
-	var gyro_and_grav = get_node(^"Boxes/GyroAndGrav")
+	var gyro_and_grav = $Boxes/GyroAndGrav
 	var new_basis = rotate_by_gyro(gyro, gyro_and_grav.transform.basis, delta).orthonormalized()
 	gyro_and_grav.transform.basis = drift_correction(new_basis, grav)

+ 151 - 48
mobile/sensors/main.tscn

@@ -1,77 +1,180 @@
-[gd_scene load_steps=11 format=2]
+[gd_scene load_steps=11 format=3 uid="uid://cfhql05dj6udh"]
 
-[ext_resource path="res://main.gd" type="Script" id=1]
-[ext_resource path="res://cube_6.png" type="Texture2D" id=2]
+[ext_resource type="Script" path="res://main.gd" id="1"]
+[ext_resource type="Texture2D" uid="uid://yba5kdfjgn65" path="res://cube_6.png" id="2"]
 
-[sub_resource type="Environment" id=1]
+[sub_resource type="Environment" id="1"]
 background_mode = 1
 ambient_light_color = Color(0.648438, 0.64578, 0.64578, 1)
 
-[sub_resource type="CylinderMesh" id=2]
+[sub_resource type="CylinderMesh" id="2"]
 top_radius = 0.2
 bottom_radius = 0.1
 height = 4.0
 radial_segments = 16
 
-[sub_resource type="StandardMaterial3D" id=3]
-params_diffuse_mode = 1
+[sub_resource type="StandardMaterial3D" id="3"]
+diffuse_mode = 1
 albedo_color = Color(0.356557, 1, 0.366611, 1)
 roughness = 0.0
 
-[sub_resource type="CylinderMesh" id=4]
+[sub_resource type="CylinderMesh" id="4"]
 top_radius = 0.1
 radial_segments = 16
 
-[sub_resource type="StandardMaterial3D" id=5]
-params_diffuse_mode = 1
+[sub_resource type="StandardMaterial3D" id="5"]
+diffuse_mode = 1
 albedo_color = Color(0.0266393, 0.292793, 1, 1)
 roughness = 0.0
 
-[sub_resource type="StandardMaterial3D" id=6]
-params_diffuse_mode = 1
+[sub_resource type="StandardMaterial3D" id="6"]
+diffuse_mode = 1
 albedo_color = Color(0.957031, 0.801627, 0.0921731, 1)
 roughness = 0.0
 
-[sub_resource type="BoxMesh" id=7]
+[sub_resource type="BoxMesh" id="7"]
 size = Vector3(4, 4, 4)
 
-[sub_resource type="StandardMaterial3D" id=8]
-params_diffuse_mode = 1
-albedo_texture = ExtResource( 2 )
+[sub_resource type="StandardMaterial3D" id="8"]
+diffuse_mode = 1
+albedo_texture = ExtResource("2")
 roughness = 0.0
 
 [node name="Main" type="Node"]
-script = ExtResource( 1 )
+script = ExtResource("1")
 
 [node name="Control" type="Control" parent="."]
+layout_mode = 3
+anchors_preset = 0
 offset_right = 1025.0
 offset_bottom = 602.0
 size_flags_horizontal = 3
 size_flags_vertical = 3
 
-[node name="Accelerometer" type="Label" parent="Control"]
-offset_right = 340.0
-offset_bottom = 14.0
-rect_scale = Vector2(2, 2)
+[node name="GridContainer" type="GridContainer" parent="Control"]
+offset_right = 40.0
+offset_bottom = 40.0
+columns = 4
+
+[node name="LabelEmpty" type="Label" parent="Control/GridContainer"]
+layout_mode = 2
+
+[node name="LabelX" type="Label" parent="Control/GridContainer"]
+layout_mode = 2
+theme_override_colors/font_color = Color(0.666667, 0.666667, 0.666667, 1)
+text = "X"
+horizontal_alignment = 1
+
+[node name="LabelY" type="Label" parent="Control/GridContainer"]
+layout_mode = 2
+theme_override_colors/font_color = Color(0.666667, 0.666667, 0.666667, 1)
+text = "Y"
+horizontal_alignment = 1
+
+[node name="LabelZ" type="Label" parent="Control/GridContainer"]
+layout_mode = 2
+theme_override_colors/font_color = Color(0.666667, 0.666667, 0.666667, 1)
+text = "Z"
+horizontal_alignment = 1
+
+[node name="Accelerometer" type="Label" parent="Control/GridContainer"]
+layout_mode = 2
+theme_override_colors/font_color = Color(0.666667, 0.666667, 0.666667, 1)
 text = "Accelerometer"
 
-[node name="Magnetometer" type="Label" parent="Control"]
-offset_top = 30.0
-offset_right = 340.0
-offset_bottom = 44.0
-rect_scale = Vector2(2, 2)
+[node name="AccX" type="Label" parent="Control/GridContainer"]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(90, 2.08165e-12)
+layout_mode = 2
+text = "0"
+horizontal_alignment = 1
+
+[node name="AccY" type="Label" parent="Control/GridContainer"]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(90, 2.08165e-12)
+layout_mode = 2
+text = "0"
+horizontal_alignment = 1
+
+[node name="AccZ" type="Label" parent="Control/GridContainer"]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(90, 2.08165e-12)
+layout_mode = 2
+text = "0"
+horizontal_alignment = 1
+
+[node name="Gravity" type="Label" parent="Control/GridContainer"]
+layout_mode = 2
+theme_override_colors/font_color = Color(0.666667, 0.666667, 0.666667, 1)
+text = "Gravity"
+
+[node name="GravX" type="Label" parent="Control/GridContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+text = "0"
+horizontal_alignment = 1
+
+[node name="GravY" type="Label" parent="Control/GridContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+text = "0"
+horizontal_alignment = 1
+
+[node name="GravZ" type="Label" parent="Control/GridContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+text = "0"
+horizontal_alignment = 1
+
+[node name="Magnetometer" type="Label" parent="Control/GridContainer"]
+layout_mode = 2
+theme_override_colors/font_color = Color(0.666667, 0.666667, 0.666667, 1)
 text = "Magnetometer"
 
-[node name="Gyroscope" type="Label" parent="Control"]
-offset_top = 60.0
-offset_right = 340.0
-offset_bottom = 74.0
-rect_scale = Vector2(2, 2)
+[node name="MagX" type="Label" parent="Control/GridContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+text = "0"
+horizontal_alignment = 1
+
+[node name="MagY" type="Label" parent="Control/GridContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+text = "0"
+horizontal_alignment = 1
+
+[node name="MagZ" type="Label" parent="Control/GridContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+text = "0"
+horizontal_alignment = 1
+
+[node name="Gyroscope" type="Label" parent="Control/GridContainer"]
+layout_mode = 2
+theme_override_colors/font_color = Color(0.666667, 0.666667, 0.666667, 1)
 text = "Gyroscope"
 
+[node name="GyroX" type="Label" parent="Control/GridContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+text = "0"
+horizontal_alignment = 1
+
+[node name="GyroY" type="Label" parent="Control/GridContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+text = "0"
+horizontal_alignment = 1
+
+[node name="GyroZ" type="Label" parent="Control/GridContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+text = "0"
+horizontal_alignment = 1
+
 [node name="Camera3D" type="Camera3D" parent="."]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.285209, 0, 11.9833)
-environment = SubResource( 1 )
+environment = SubResource("1")
 fov = 74.0
 near = 0.1
 
@@ -82,51 +185,51 @@ transform = Transform3D(1, 0, 0, 0, -1, 8.74228e-08, 0, -8.74228e-08, -1, 0, 0,
 
 [node name="Bottom" type="MeshInstance3D" parent="Arrows/AccelerometerArrow"]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
-mesh = SubResource( 2 )
-surface_material_override/0 = SubResource( 3 )
+mesh = SubResource("2")
+surface_material_override/0 = SubResource("3")
 
 [node name="Top" type="MeshInstance3D" parent="Arrows/AccelerometerArrow"]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, 0)
-mesh = SubResource( 4 )
-surface_material_override/0 = SubResource( 3 )
+mesh = SubResource("4")
+surface_material_override/0 = SubResource("3")
 
 [node name="MagnetoArrow" type="Node3D" parent="Arrows"]
 transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 0, 0, 0)
 
 [node name="Bottom" type="MeshInstance3D" parent="Arrows/MagnetoArrow"]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
-mesh = SubResource( 2 )
-surface_material_override/0 = SubResource( 5 )
+mesh = SubResource("2")
+surface_material_override/0 = SubResource("5")
 
 [node name="Top" type="MeshInstance3D" parent="Arrows/MagnetoArrow"]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, 0)
-mesh = SubResource( 4 )
-surface_material_override/0 = SubResource( 5 )
+mesh = SubResource("4")
+surface_material_override/0 = SubResource("5")
 
 [node name="NorthArrow" type="Node3D" parent="Arrows"]
 transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0)
 
 [node name="Bottom" type="MeshInstance3D" parent="Arrows/NorthArrow"]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
-mesh = SubResource( 2 )
-surface_material_override/0 = SubResource( 6 )
+mesh = SubResource("2")
+surface_material_override/0 = SubResource("6")
 
 [node name="Top" type="MeshInstance3D" parent="Arrows/NorthArrow"]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, 0)
-mesh = SubResource( 4 )
-surface_material_override/0 = SubResource( 6 )
+mesh = SubResource("4")
+surface_material_override/0 = SubResource("6")
 
 [node name="Boxes" type="Node3D" parent="."]
 
 [node name="MagAndGrav" type="MeshInstance3D" parent="Boxes"]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7, -4, 0)
-mesh = SubResource( 7 )
-surface_material_override/0 = SubResource( 8 )
+mesh = SubResource("7")
+surface_material_override/0 = SubResource("8")
 
 [node name="GyroAndGrav" type="MeshInstance3D" parent="Boxes"]
 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7, -4, 0)
-mesh = SubResource( 7 )
-surface_material_override/0 = SubResource( 8 )
+mesh = SubResource("7")
+surface_material_override/0 = SubResource("8")
 
 [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
 transform = Transform3D(0.884838, -0.329433, 0.329449, 0, 0.707124, 0.707089, -0.4659, -0.625659, 0.62569, 0, 4.69444, 0)

+ 10 - 7
mobile/sensors/project.godot

@@ -6,21 +6,24 @@
 ;   [section] ; section goes between []
 ;   param=value ; assign values to parameters
 
-config_version=4
-
-_global_script_classes=[]
-_global_script_class_icons={
-}
+config_version=5
 
 [application]
 
 config/name="Mobile Sensors Demo"
 config/description="A demo showing the use of various sensors: an accelerometer, a gyroscope, and a magnetometer.
 These sensors are typically found on mobile devices, so don't expect this to work on a desktop."
+config/tags=PackedStringArray("demo", "mobile", "official")
 run/main_scene="res://main.tscn"
+config/features=PackedStringArray("4.1")
 config/icon="res://icon.webp"
-config/tags=PackedStringArray("demo", "mobile", "official")
+
+[display]
+
+window/stretch/mode="canvas_items"
 
 [rendering]
 
-environment/default_environment="res://default_env.tres"
+renderer/rendering_method="mobile"
+textures/vram_compression/import_etc2_astc=true
+environment/defaults/default_environment="res://default_env.tres"

BIN
mobile/sensors/screenshots/sensors.png


BIN
mobile/sensors/screenshots/sensors.webp