From d807a2298145e72cdcb9290eb6c7e6c88df9848a Mon Sep 17 00:00:00 2001 From: BenH Date: Wed, 24 Jun 2015 21:06:31 +0100 Subject: [PATCH] Billboards were being displayed upside down when drawn to a render texture Render texture's view transforms seem to be inverted, so when drawing billboards, the 'up' vector given to set_look_at() is also inverted and so the billboard gets drawn upside down. --- drivers/gles2/rasterizer_gles2.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/gles2/rasterizer_gles2.cpp b/drivers/gles2/rasterizer_gles2.cpp index efc92c5d9f0..05ae85e0969 100644 --- a/drivers/gles2/rasterizer_gles2.cpp +++ b/drivers/gles2/rasterizer_gles2.cpp @@ -6683,7 +6683,13 @@ void RasterizerGLES2::_render_list_forward(RenderList *p_render_list,const Trans if (e->instance->billboard) { Vector3 scale = xf.basis.get_scale(); - xf.set_look_at(xf.origin,xf.origin+p_view_transform.get_basis().get_axis(2),p_view_transform.get_basis().get_axis(1)); + + if (current_rt && current_rt_vflip) { + xf.set_look_at(xf.origin, xf.origin + p_view_transform.get_basis().get_axis(2), -p_view_transform.get_basis().get_axis(1)); + } else { + xf.set_look_at(xf.origin, xf.origin + p_view_transform.get_basis().get_axis(2), p_view_transform.get_basis().get_axis(1)); + } + xf.basis.scale(scale); } material_shader.set_uniform(MaterialShaderGLES2::WORLD_TRANSFORM, xf);