Ability to set a custom FOV makes it possible to use sky on orthogonal view. Closes #9186
This commit is contained in:
@@ -799,12 +799,12 @@ void RasterizerSceneGLES3::environment_set_sky(RID p_env, RID p_sky) {
|
||||
env->sky = p_sky;
|
||||
}
|
||||
|
||||
void RasterizerSceneGLES3::environment_set_sky_scale(RID p_env, float p_scale) {
|
||||
void RasterizerSceneGLES3::environment_set_sky_custom_fov(RID p_env, float p_scale) {
|
||||
|
||||
Environment *env = environment_owner.getornull(p_env);
|
||||
ERR_FAIL_COND(!env);
|
||||
|
||||
env->sky_scale = p_scale;
|
||||
env->sky_custom_fov = p_scale;
|
||||
}
|
||||
|
||||
void RasterizerSceneGLES3::environment_set_bg_color(RID p_env, const Color &p_color) {
|
||||
@@ -2319,7 +2319,7 @@ void RasterizerSceneGLES3::_add_geometry_with_material(RasterizerStorageGLES3::G
|
||||
}
|
||||
}
|
||||
|
||||
void RasterizerSceneGLES3::_draw_sky(RasterizerStorageGLES3::Sky *p_sky, const CameraMatrix &p_projection, const Transform &p_transform, bool p_vflip, float p_scale, float p_energy) {
|
||||
void RasterizerSceneGLES3::_draw_sky(RasterizerStorageGLES3::Sky *p_sky, const CameraMatrix &p_projection, const Transform &p_transform, bool p_vflip, float p_custom_fov, float p_energy) {
|
||||
|
||||
if (!p_sky)
|
||||
return;
|
||||
@@ -2365,16 +2365,28 @@ void RasterizerSceneGLES3::_draw_sky(RasterizerStorageGLES3::Sky *p_sky, const C
|
||||
|
||||
//sky uv vectors
|
||||
float vw, vh, zn;
|
||||
p_projection.get_viewport_size(vw, vh);
|
||||
zn = p_projection.get_z_near();
|
||||
CameraMatrix camera;
|
||||
|
||||
float scale = p_scale;
|
||||
if (p_custom_fov) {
|
||||
|
||||
float near = p_projection.get_z_near();
|
||||
float far = p_projection.get_z_far();
|
||||
float aspect = p_projection.get_aspect();
|
||||
|
||||
camera.set_perspective(p_custom_fov, aspect, near, far);
|
||||
|
||||
} else {
|
||||
camera = p_projection;
|
||||
}
|
||||
|
||||
camera.get_viewport_size(vw, vh);
|
||||
zn = p_projection.get_z_near();
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
|
||||
Vector3 uv = vertices[i * 2 + 1];
|
||||
uv.x = (uv.x * 2.0 - 1.0) * vw * scale;
|
||||
uv.y = -(uv.y * 2.0 - 1.0) * vh * scale;
|
||||
uv.x = (uv.x * 2.0 - 1.0) * vw;
|
||||
uv.y = -(uv.y * 2.0 - 1.0) * vh;
|
||||
uv.z = -zn;
|
||||
vertices[i * 2 + 1] = p_transform.basis.xform(uv).normalized();
|
||||
vertices[i * 2 + 1].z = -vertices[i * 2 + 1].z;
|
||||
@@ -4258,7 +4270,7 @@ void RasterizerSceneGLES3::render_scene(const Transform &p_cam_transform, const
|
||||
glBindFramebuffer(GL_FRAMEBUFFER,storage->frame.current_rt->buffers.fbo); //switch to alpha fbo for sky, only diffuse/ambient matters
|
||||
*/
|
||||
|
||||
_draw_sky(sky, p_cam_projection, p_cam_transform, false, env->sky_scale, env->bg_energy);
|
||||
_draw_sky(sky, p_cam_projection, p_cam_transform, false, env->sky_custom_fov, env->bg_energy);
|
||||
}
|
||||
|
||||
//_render_list_forward(&alpha_render_list,camera_transform,camera_transform_inverse,camera_projection,false,fragment_lighting,true);
|
||||
|
||||
Reference in New Issue
Block a user