Adjust clip plane
I should add the tolerance (for portal frame) back in
This commit is contained in:
parent
da068feed1
commit
0ee4f5c250
@ -11,6 +11,10 @@ extends Camera3D
|
||||
var mat = v.mesh.surface_get_material(0) as ShaderMaterial
|
||||
mat.set_shader_parameter("albedo", get_parent().get_texture())
|
||||
|
||||
_portal_mesh_aabb = v.get_aabb()
|
||||
|
||||
var _portal_mesh_aabb: AABB
|
||||
|
||||
@export var player_camera: Node3D
|
||||
|
||||
@export_tool_button("Grab editor camera", "Camera3D")
|
||||
@ -42,12 +46,31 @@ func _process(delta: float) -> void:
|
||||
|
||||
self.global_transform = relative_to_target
|
||||
|
||||
self.near = _get_near_plane(_portal_mesh_aabb)
|
||||
|
||||
func _get_near_plane(_mesh_aabb: AABB) -> float:
|
||||
var corner_1:Vector3 = target.to_global(Vector3(_mesh_aabb.position.x, _mesh_aabb.position.y, 0))
|
||||
var corner_2:Vector3 = target.to_global(Vector3(_mesh_aabb.position.x + _mesh_aabb.size.x, _mesh_aabb.position.y, 0))
|
||||
var corner_3:Vector3 = target.to_global(Vector3(_mesh_aabb.position.x + _mesh_aabb.size.x, _mesh_aabb.position.y + _mesh_aabb.size.y, 0))
|
||||
var corner_4:Vector3 = target.to_global(Vector3(_mesh_aabb.position.x, _mesh_aabb.position.y + _mesh_aabb.size.y, 0))
|
||||
|
||||
# Calculate the distance along the exit camera forward vector at which each of the portal corners projects
|
||||
var camera_forward:Vector3 = -global_transform.basis.z.normalized()
|
||||
|
||||
var d_1:float = (corner_1 - global_position).dot(camera_forward)
|
||||
var d_2:float = (corner_2 - global_position).dot(camera_forward)
|
||||
var d_3:float = (corner_3 - global_position).dot(camera_forward)
|
||||
var d_4:float = (corner_4 - global_position).dot(camera_forward)
|
||||
|
||||
# The near clip distance is the shortest distance which still contains all the corners
|
||||
return max(0.01, min(d_1, d_2, d_3, d_4) - 0.05)
|
||||
|
||||
func check() -> bool:
|
||||
return target != null and \
|
||||
player_camera != null and \
|
||||
home != null and \
|
||||
portal_mesh != null
|
||||
portal_mesh != null and \
|
||||
_portal_mesh_aabb != null
|
||||
|
||||
func _grab_editor_camera() -> void:
|
||||
if Engine.is_editor_hint():
|
||||
|
22
world.tscn
22
world.tscn
@ -23,21 +23,21 @@ glow_enabled = true
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_fj7yv"]
|
||||
size = Vector3(20, 1, 20)
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_036b0"]
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_dwbse"]
|
||||
viewport_path = NodePath("PortalA/SubViewport")
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_dwbse"]
|
||||
resource_local_to_scene = true
|
||||
render_priority = 0
|
||||
shader = ExtResource("2_036b0")
|
||||
shader_parameter/albedo = SubResource("ViewportTexture_036b0")
|
||||
shader_parameter/albedo = SubResource("ViewportTexture_dwbse")
|
||||
|
||||
[sub_resource type="PlaneMesh" id="PlaneMesh_pkg7o"]
|
||||
material = SubResource("ShaderMaterial_dwbse")
|
||||
size = Vector2(1.5, 2)
|
||||
orientation = 2
|
||||
|
||||
[sub_resource type="Environment" id="Environment_dwbse"]
|
||||
[sub_resource type="Environment" id="Environment_gbfbk"]
|
||||
background_mode = 2
|
||||
sky = SubResource("Sky_dwbse")
|
||||
glow_enabled = true
|
||||
@ -53,20 +53,20 @@ _surfaces = [{
|
||||
"vertex_data": PackedByteArray("AACAvwAAoL8AAIC+AACAvwAAoL8AAIA+AABAvwAAoL8AAIC+AABAPwAAgD8AAIA+AACAPwAAoD8AAIA+AABAPwAAoL8AAIA+AACAvwAAoL8AAIA+AACAvwAAoL8AAIC+AACAvwAAoD8AAIC+AABAvwAAoL8AAIC+AACAvwAAoL8AAIA+AABAvwAAoL8AAIA+AABAvwAAoL8AAIA+AACAvwAAoL8AAIA+AABAvwAAgD8AAIA+AABAvwAAgD8AAIC+AACAvwAAoD8AAIC+AABAvwAAoL8AAIC+AABAvwAAgD8AAIC+AACAPwAAoD8AAIC+AACAvwAAoD8AAIC+AACAvwAAoD8AAIC+AACAvwAAoD8AAIA+AACAvwAAoL8AAIA+AACAvwAAoD8AAIA+AABAvwAAgD8AAIA+AACAvwAAoL8AAIA+AACAvwAAoD8AAIC+AACAPwAAoD8AAIA+AACAvwAAoD8AAIA+AABAvwAAgD8AAIA+AACAvwAAoD8AAIA+AABAPwAAgD8AAIA+AACAPwAAoL8AAIC+AABAPwAAoL8AAIC+AACAPwAAoL8AAIA+AACAvwAAoL8AAIC+AABAvwAAoL8AAIC+AACAvwAAoD8AAIC+AABAPwAAoL8AAIC+AACAPwAAoL8AAIC+AABAPwAAgD8AAIC+AACAPwAAoL8AAIA+AABAPwAAoL8AAIC+AABAPwAAoL8AAIA+AACAPwAAoL8AAIA+AACAPwAAoD8AAIA+AACAPwAAoL8AAIC+AACAPwAAoL8AAIA+AABAPwAAoL8AAIA+AACAPwAAoD8AAIA+AABAPwAAgD8AAIC+AACAPwAAoD8AAIC+AABAvwAAgD8AAIC+AACAPwAAoD8AAIC+AACAPwAAoD8AAIA+AACAvwAAoD8AAIC+AACAPwAAoD8AAIC+AABAPwAAgD8AAIC+AACAPwAAoL8AAIC+AACAPwAAoD8AAIA+AACAPwAAoD8AAIC+AACAPwAAoL8AAIC+AABAPwAAgD8AAIA+AACAvwAAoD8AAIA+AACAPwAAoD8AAIA+AABAvwAAgD8AAIA+AABAvwAAoL8AAIC+AABAvwAAoL8AAIA+AABAvwAAoL8AAIC+AABAvwAAgD8AAIA+AABAvwAAgD8AAIC+AABAPwAAgD8AAIC+AABAPwAAoL8AAIA+AABAPwAAoL8AAIC+AABAPwAAgD8AAIA+AABAPwAAgD8AAIC+AABAvwAAgD8AAIC+AABAPwAAoL8AAIA+AABAPwAAgD8AAIC+AABAPwAAgD8AAIA+AABAvwAAgD8AAIC+AABAvwAAgD8AAIA+AABAPwAAgD8AAIA+/38AAP//AAD/fwAA//8AAP9/AAD//wAA/3//fwAA/z//f/9/AAD/P/9//38AAP8/AAD/f/9//n8AAP9//3/+fwAA/3//f/5//38AAP//AAD/fwAA//8AAP9/AAD//wAA/3//fwAA/z//f/9/AAD/P/9//38AAP8//////wAA/z//////AAD/P/////8AAP8//////wAA/z//////AAD/P/////8AAP8/AAD/f/9//n8AAP9//3/+fwAA/3//f/5//3//fwAA/z//f/9/AAD/P/9//38AAP8//3//////AAD/f/////8AAP9//////wAA/3//fwAA/z//f/9/AAD/P/9//38AAP8//38AAP//AAD/fwAA//8AAP9/AAD//wAA/////wAA/z//////AAD/P/////8AAP8//////wAA/z//////AAD/P/////8AAP8//38AAP//AAD/fwAA//8AAP9/AAD//wAA////f/9//n////9//3/+f////3//f/5//3//fwAA/z//f/9/AAD/P/9//38AAP8//////wAA/z//////AAD/P/////8AAP8//3//////AAD/f/////8AAP9//////wAA/////wAA/z//////AAD/P/////8AAP8/////f/9//n////9//3/+f////3//f/5//3//fwAA/z//f/9/AAD/P/9//38AAP8/////f/9/AID///9//38AgP///3//fwCA////f/9/AID///9//38AgP///3//fwCAAAD/f/9/AIAAAP9//38AgAAA/3//fwCA/38AAP//////fwAA//////9/AAD/////AAD/f/9/AIAAAP9//38AgAAA/3//fwCA/38AAP//////fwAA//////9/AAD/////")
|
||||
}]
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_pkg7o"]
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_ioo17"]
|
||||
viewport_path = NodePath("PortalB/SubViewport")
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_aqk2v"]
|
||||
render_priority = 0
|
||||
shader = ExtResource("2_036b0")
|
||||
shader_parameter/albedo = SubResource("ViewportTexture_pkg7o")
|
||||
shader_parameter/albedo = SubResource("ViewportTexture_ioo17")
|
||||
|
||||
[sub_resource type="PlaneMesh" id="PlaneMesh_036b0"]
|
||||
material = SubResource("ShaderMaterial_aqk2v")
|
||||
size = Vector2(1.5, 2)
|
||||
orientation = 2
|
||||
|
||||
[sub_resource type="Environment" id="Environment_gbfbk"]
|
||||
[sub_resource type="Environment" id="Environment_wse8f"]
|
||||
background_mode = 2
|
||||
sky = SubResource("Sky_dwbse")
|
||||
glow_enabled = true
|
||||
@ -114,8 +114,9 @@ process_priority = 1000
|
||||
size = Vector2i(1920, 1080)
|
||||
|
||||
[node name="PortalCamera" parent="PortalA/SubViewport" node_paths=PackedStringArray("home", "target", "portal_mesh", "player_camera") instance=ExtResource("3_tlwt5")]
|
||||
transform = Transform3D(0.677513, 0.085151, -0.730565, 0, 0.993276, 0.115771, 0.735511, -0.0784365, 0.672957, 1.96377, 1.7265, 7.70245)
|
||||
environment = SubResource("Environment_dwbse")
|
||||
transform = Transform3D(0.677513, 0.0851509, -0.730565, 0, 0.993276, 0.115771, 0.735511, -0.0784365, 0.672957, 1.96377, 1.7265, 7.70245)
|
||||
environment = SubResource("Environment_gbfbk")
|
||||
near = 4.73928
|
||||
home = NodePath("../..")
|
||||
target = NodePath("../../../PortalB")
|
||||
portal_mesh = NodePath("../../MeshA")
|
||||
@ -142,8 +143,9 @@ process_priority = 1000
|
||||
size = Vector2i(1920, 1080)
|
||||
|
||||
[node name="PortalCamera" parent="PortalB/SubViewport" node_paths=PackedStringArray("home", "target", "portal_mesh", "player_camera") instance=ExtResource("3_tlwt5")]
|
||||
transform = Transform3D(-0.677513, -0.085151, 0.730565, 0, 0.993276, 0.115771, -0.735511, 0.0784365, -0.672957, 2.16021, 1.7265, -0.57847)
|
||||
environment = SubResource("Environment_gbfbk")
|
||||
transform = Transform3D(-0.677513, -0.0851509, 0.730565, 0, 0.993276, 0.115771, -0.735511, 0.0784365, -0.672957, 2.16021, 1.7265, -0.57847)
|
||||
environment = SubResource("Environment_wse8f")
|
||||
near = 4.98828
|
||||
home = NodePath("../..")
|
||||
target = NodePath("../../../PortalA")
|
||||
portal_mesh = NodePath("../../MeshB")
|
||||
|
Loading…
Reference in New Issue
Block a user