Add FRUSTUM camera mode, allowing tilted frustums
This new camera mode makes it easy to create tilted frustums for mirror or portal effects. This work was kindly sponsored by IMVU.
This commit is contained in:
parent
c7ba1e210e
commit
54b95b6c5a
11 changed files with 133 additions and 27 deletions
|
|
@ -61,6 +61,16 @@ void VisualServerScene::camera_set_orthogonal(RID p_camera, float p_size, float
|
|||
camera->zfar = p_z_far;
|
||||
}
|
||||
|
||||
void VisualServerScene::camera_set_frustum(RID p_camera, float p_size, Vector2 p_offset, float p_z_near, float p_z_far) {
|
||||
Camera *camera = camera_owner.get(p_camera);
|
||||
ERR_FAIL_COND(!camera);
|
||||
camera->type = Camera::FRUSTUM;
|
||||
camera->size = p_size;
|
||||
camera->offset = p_offset;
|
||||
camera->znear = p_z_near;
|
||||
camera->zfar = p_z_far;
|
||||
}
|
||||
|
||||
void VisualServerScene::camera_set_transform(RID p_camera, const Transform &p_transform) {
|
||||
|
||||
Camera *camera = camera_owner.get(p_camera);
|
||||
|
|
@ -1720,6 +1730,17 @@ void VisualServerScene::render_camera(RID p_camera, RID p_scenario, Size2 p_view
|
|||
ortho = false;
|
||||
|
||||
} break;
|
||||
case Camera::FRUSTUM: {
|
||||
|
||||
camera_matrix.set_frustum(
|
||||
camera->size,
|
||||
p_viewport_size.width / (float)p_viewport_size.height,
|
||||
camera->offset,
|
||||
camera->znear,
|
||||
camera->zfar,
|
||||
camera->vaspect);
|
||||
ortho = false;
|
||||
} break;
|
||||
}
|
||||
|
||||
_prepare_scene(camera->transform, camera_matrix, ortho, camera->env, camera->visible_layers, p_scenario, p_shadow_atlas, RID());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue