GLSL 1.3 inverse 4x4 matrix
up vote
0
down vote
favorite
I want to calculate the new normal vector and in GLSL 1.4 you can use this formula:
normal = mat3(transpose(inverse(modelview))) * in_Normal;
But my version of GLSL is 1.3 and the function inverse is not available in this version.
Do you know if there is an alternative to this without coding the entire function to inverse a matrix ?
c++ glsl shader
add a comment |
up vote
0
down vote
favorite
I want to calculate the new normal vector and in GLSL 1.4 you can use this formula:
normal = mat3(transpose(inverse(modelview))) * in_Normal;
But my version of GLSL is 1.3 and the function inverse is not available in this version.
Do you know if there is an alternative to this without coding the entire function to inverse a matrix ?
c++ glsl shader
1
I suggest to calculate the inverse on CPU side (e.g. glm has this function) and then pass it as an uniform to the shader.
– Ripi2
Nov 19 at 16:22
1
If the matrix is an Orthogonal matrix (which may be the case for the model view matrix), then the inverse matrix is equal the transposed matrix and the term can be simplified:normal = mat3(modelview) * in_Normal;
– Rabbid76
Nov 19 at 16:36
1
I agree with @Ripi. Furthermore, check if you really need the inverse transpose. For a huge number of cases (when the model view matrix is just a rigid body transform), you don't need to do this.
– Nico Schertler
Nov 19 at 16:36
see Pseudo inverse matrix it is very easy to implement even in GLSL
– Spektre
Nov 21 at 10:16
@Rabbid76 that is true only for rotational transform matrix... with homogenous transform matrix you need to correct the position afterwards...
– Spektre
Nov 21 at 21:34
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I want to calculate the new normal vector and in GLSL 1.4 you can use this formula:
normal = mat3(transpose(inverse(modelview))) * in_Normal;
But my version of GLSL is 1.3 and the function inverse is not available in this version.
Do you know if there is an alternative to this without coding the entire function to inverse a matrix ?
c++ glsl shader
I want to calculate the new normal vector and in GLSL 1.4 you can use this formula:
normal = mat3(transpose(inverse(modelview))) * in_Normal;
But my version of GLSL is 1.3 and the function inverse is not available in this version.
Do you know if there is an alternative to this without coding the entire function to inverse a matrix ?
c++ glsl shader
c++ glsl shader
asked Nov 19 at 16:14
Hugo Andreu
1
1
1
I suggest to calculate the inverse on CPU side (e.g. glm has this function) and then pass it as an uniform to the shader.
– Ripi2
Nov 19 at 16:22
1
If the matrix is an Orthogonal matrix (which may be the case for the model view matrix), then the inverse matrix is equal the transposed matrix and the term can be simplified:normal = mat3(modelview) * in_Normal;
– Rabbid76
Nov 19 at 16:36
1
I agree with @Ripi. Furthermore, check if you really need the inverse transpose. For a huge number of cases (when the model view matrix is just a rigid body transform), you don't need to do this.
– Nico Schertler
Nov 19 at 16:36
see Pseudo inverse matrix it is very easy to implement even in GLSL
– Spektre
Nov 21 at 10:16
@Rabbid76 that is true only for rotational transform matrix... with homogenous transform matrix you need to correct the position afterwards...
– Spektre
Nov 21 at 21:34
add a comment |
1
I suggest to calculate the inverse on CPU side (e.g. glm has this function) and then pass it as an uniform to the shader.
– Ripi2
Nov 19 at 16:22
1
If the matrix is an Orthogonal matrix (which may be the case for the model view matrix), then the inverse matrix is equal the transposed matrix and the term can be simplified:normal = mat3(modelview) * in_Normal;
– Rabbid76
Nov 19 at 16:36
1
I agree with @Ripi. Furthermore, check if you really need the inverse transpose. For a huge number of cases (when the model view matrix is just a rigid body transform), you don't need to do this.
– Nico Schertler
Nov 19 at 16:36
see Pseudo inverse matrix it is very easy to implement even in GLSL
– Spektre
Nov 21 at 10:16
@Rabbid76 that is true only for rotational transform matrix... with homogenous transform matrix you need to correct the position afterwards...
– Spektre
Nov 21 at 21:34
1
1
I suggest to calculate the inverse on CPU side (e.g. glm has this function) and then pass it as an uniform to the shader.
– Ripi2
Nov 19 at 16:22
I suggest to calculate the inverse on CPU side (e.g. glm has this function) and then pass it as an uniform to the shader.
– Ripi2
Nov 19 at 16:22
1
1
If the matrix is an Orthogonal matrix (which may be the case for the model view matrix), then the inverse matrix is equal the transposed matrix and the term can be simplified:
normal = mat3(modelview) * in_Normal;
– Rabbid76
Nov 19 at 16:36
If the matrix is an Orthogonal matrix (which may be the case for the model view matrix), then the inverse matrix is equal the transposed matrix and the term can be simplified:
normal = mat3(modelview) * in_Normal;
– Rabbid76
Nov 19 at 16:36
1
1
I agree with @Ripi. Furthermore, check if you really need the inverse transpose. For a huge number of cases (when the model view matrix is just a rigid body transform), you don't need to do this.
– Nico Schertler
Nov 19 at 16:36
I agree with @Ripi. Furthermore, check if you really need the inverse transpose. For a huge number of cases (when the model view matrix is just a rigid body transform), you don't need to do this.
– Nico Schertler
Nov 19 at 16:36
see Pseudo inverse matrix it is very easy to implement even in GLSL
– Spektre
Nov 21 at 10:16
see Pseudo inverse matrix it is very easy to implement even in GLSL
– Spektre
Nov 21 at 10:16
@Rabbid76 that is true only for rotational transform matrix... with homogenous transform matrix you need to correct the position afterwards...
– Spektre
Nov 21 at 21:34
@Rabbid76 that is true only for rotational transform matrix... with homogenous transform matrix you need to correct the position afterwards...
– Spektre
Nov 21 at 21:34
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53378692%2fglsl-1-3-inverse-4x4-matrix%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
I suggest to calculate the inverse on CPU side (e.g. glm has this function) and then pass it as an uniform to the shader.
– Ripi2
Nov 19 at 16:22
1
If the matrix is an Orthogonal matrix (which may be the case for the model view matrix), then the inverse matrix is equal the transposed matrix and the term can be simplified:
normal = mat3(modelview) * in_Normal;
– Rabbid76
Nov 19 at 16:36
1
I agree with @Ripi. Furthermore, check if you really need the inverse transpose. For a huge number of cases (when the model view matrix is just a rigid body transform), you don't need to do this.
– Nico Schertler
Nov 19 at 16:36
see Pseudo inverse matrix it is very easy to implement even in GLSL
– Spektre
Nov 21 at 10:16
@Rabbid76 that is true only for rotational transform matrix... with homogenous transform matrix you need to correct the position afterwards...
– Spektre
Nov 21 at 21:34