|
@@ -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) {
|
|
Vector3 SpatialEditorViewport::_get_screen_to_space(const Vector3 &p_vector3) {
|
|
|
|
|
|
CameraMatrix cm;
|
|
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;
|
|
float screen_w, screen_h;
|
|
cm.get_viewport_size(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 a = _get_screen_to_space(box[i]);
|
|
Vector3 b = _get_screen_to_space(box[(i + 1) % 4]);
|
|
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<ObjectID> instances = VisualServer::get_singleton()->instances_cull_convex(frustum, get_tree()->get_root()->get_world()->get_scenario());
|
|
Vector<Spatial *> selected;
|
|
Vector<Spatial *> selected;
|