Fix selection in 3D orthogonal view

This commit is contained in:
JFonS 2018-06-27 16:59:45 +02:00
parent 68f7cf13c7
commit e245efaead
2 changed files with 23 additions and 12 deletions

View file

@ -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;