diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2017-05-27 13:48:25 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2017-05-29 16:52:27 +0300 |
commit | e104d82376134acd9b6c8729f271a03e83b64003 (patch) | |
tree | 8c2681ce31ef994f5448f33a794d0fd650c3fc86 /source/blender/draw/intern | |
parent | 9caf328a7cc55775b740ee4beecf8a77f47d3986 (diff) |
Object Mode Engine: Fixing the 3D grid 1/2
Do not use the inverse perspective matrix inside the shader to recover world positions.
That leads to severe float imprecision leading to nasty artifacts.
Instead we compute the world view vector for each pixels and do a ray to plane intersection.
We are still getting low precision derivatives when going far away from the origin, and thus artifacts.
This commit also fixes the non-appearing negative Z axis in 3D view.
Diffstat (limited to 'source/blender/draw/intern')
-rw-r--r-- | source/blender/draw/intern/DRW_render.h | 1 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 3 |
2 files changed, 4 insertions, 0 deletions
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h index 5c1c978806b..695027c5de6 100644 --- a/source/blender/draw/intern/DRW_render.h +++ b/source/blender/draw/intern/DRW_render.h @@ -307,6 +307,7 @@ typedef enum { DRW_MAT_VIEW, DRW_MAT_VIEWINV, DRW_MAT_WIN, + DRW_MAT_WININV, } DRWViewportMatrixType; void DRW_viewport_init(const bContext *C); diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index bbe3787dada..11c717a5373 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -2224,6 +2224,9 @@ void DRW_viewport_matrix_get(float mat[4][4], DRWViewportMatrixType type) case DRW_MAT_WIN: copy_m4_m4(mat, rv3d->winmat); break; + case DRW_MAT_WININV: + invert_m4_m4(mat, rv3d->winmat); + break; default: BLI_assert(!"Matrix type invalid"); break; |