mirror of https://github.com/bjornbytes/lovr.git
Add lovrNormalMatrix;
This commit is contained in:
parent
4c16647ff0
commit
9f097e64e2
|
@ -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
|
||||
|
|
|
@ -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],
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue