mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 05:31:01 +00:00 
			
		
		
		
	Fix selection in 3D orthogonal view
This commit is contained in:
		
							parent
							
								
									68f7cf13c7
								
							
						
					
					
						commit
						e245efaead
					
				
					 2 changed files with 23 additions and 12 deletions
				
			
		|  | @ -471,7 +471,11 @@ void SpatialEditorViewport::_find_items_at_pos(const Point2 &p_pos, bool &r_incl | |||
| Vector3 SpatialEditorViewport::_get_screen_to_space(const Vector3 &p_vector3) { | ||||
| 
 | ||||
| 	CameraMatrix cm; | ||||
| 	cm.set_perspective(get_fov(), get_size().aspect(), get_znear() + p_vector3.z, get_zfar()); | ||||
| 	if (orthogonal) { | ||||
| 		cm.set_orthogonal(camera->get_size(), get_size().aspect(), get_znear() + p_vector3.z, get_zfar()); | ||||
| 	} else { | ||||
| 		cm.set_perspective(get_fov(), get_size().aspect(), get_znear() + p_vector3.z, get_zfar()); | ||||
| 	} | ||||
| 	float screen_w, screen_h; | ||||
| 	cm.get_viewport_size(screen_w, screen_h); | ||||
| 
 | ||||
|  | @ -518,18 +522,24 @@ void SpatialEditorViewport::_select_region() { | |||
| 
 | ||||
| 		Vector3 a = _get_screen_to_space(box[i]); | ||||
| 		Vector3 b = _get_screen_to_space(box[(i + 1) % 4]); | ||||
| 		frustum.push_back(Plane(a, b, cam_pos)); | ||||
| 		if (orthogonal) { | ||||
| 			frustum.push_back(Plane(a, (a - b).normalized())); | ||||
| 		} else { | ||||
| 			frustum.push_back(Plane(a, b, cam_pos)); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	Plane near(cam_pos, -_get_camera_normal()); | ||||
| 	near.d -= get_znear(); | ||||
| 	if (!orthogonal) { | ||||
| 		Plane near(cam_pos, -_get_camera_normal()); | ||||
| 		near.d -= get_znear(); | ||||
| 
 | ||||
| 	frustum.push_back(near); | ||||
| 		frustum.push_back(near); | ||||
| 
 | ||||
| 	Plane far = -near; | ||||
| 	far.d += get_zfar(); | ||||
| 		Plane far = -near; | ||||
| 		far.d += get_zfar(); | ||||
| 
 | ||||
| 	frustum.push_back(far); | ||||
| 		frustum.push_back(far); | ||||
| 	} | ||||
| 
 | ||||
| 	Vector<ObjectID> instances = VisualServer::get_singleton()->instances_cull_convex(frustum, get_tree()->get_root()->get_world()->get_scenario()); | ||||
| 	Vector<Spatial *> selected; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 JFonS
						JFonS