Add lovrNormalMatrix;

This commit is contained in:
bjornbytes 2017-06-13 20:04:51 -07:00
parent 4c16647ff0
commit 9f097e64e2
3 changed files with 35 additions and 0 deletions

View File

@ -19,6 +19,7 @@ const char* lovrShaderVertexPrefix = ""
"out vec2 texCoord; \n"
#endif
"uniform mat4 lovrTransform; \n"
"uniform mat3 lovrNormalMatrix; \n"
"uniform mat4 lovrProjection; \n"
"";
@ -229,6 +230,19 @@ void lovrShaderBind(Shader* shader, mat4 transform, mat4 projection, unsigned in
int uniformId = lovrShaderGetUniformId(shader, "lovrTransform");
lovrShaderSendFloatMat4(shader, uniformId, transform);
memcpy(shader->transform, transform, 16 * sizeof(float));
float normalMatrix[16];
mat4_set(normalMatrix, transform);
normalMatrix[12] = normalMatrix[13] = normalMatrix[14] = 0;
normalMatrix[15] = 1;
mat4_transpose(mat4_invert(normalMatrix));
float normalMatrix3x3[9] = {
normalMatrix[0], normalMatrix[1], normalMatrix[2],
normalMatrix[4], normalMatrix[5], normalMatrix[6],
normalMatrix[8], normalMatrix[9], normalMatrix[10]
};
uniformId = lovrShaderGetUniformId(shader, "lovrNormalMatrix");
lovrShaderSendFloatMat3(shader, uniformId, normalMatrix3x3);
}
// Update projection if necessary

View File

@ -106,6 +106,26 @@ mat4 mat4_invert(mat4 m) {
return m;
}
mat4 mat4_transpose(mat4 m) {
float a01 = m[1], a02 = m[2], a03 = m[3],
a12 = m[6], a13 = m[7],
a23 = m[11];
m[1] = m[4];
m[2] = m[8];
m[3] = m[12];
m[4] = a01;
m[6] = m[9];
m[7] = m[13];
m[8] = a02;
m[9] = a12;
m[11] = m[14];
m[12] = a03;
m[13] = a13;
m[14] = a23;
return m;
}
// Modified from gl-matrix.c
mat4 mat4_multiply(mat4 m, mat4 n) {
float m00 = m[0], m01 = m[1], m02 = m[2], m03 = m[3],

View File

@ -8,6 +8,7 @@ mat4 mat4_fromMat34(mat4 m, float (*n)[4]);
mat4 mat4_fromMat44(mat4 m, float (*n)[4]);
mat4 mat4_identity(mat4 m);
mat4 mat4_invert(mat4 m);
mat4 mat4_transpose(mat4 m);
mat4 mat4_multiply(mat4 m, mat4 n);
mat4 mat4_translate(mat4 m, float x, float y, float z);
mat4 mat4_rotate(mat4 m, float angle, float x, float y, float z);