REVIEWED: DrawMeshInstanced() matrix computations

Simplified some parts and reviewed for a correct computation of matrices, considering stereo render view/projection per eye transformations
This commit is contained in:
raysan5 2021-03-31 19:59:23 +02:00
parent 434a3a276d
commit c772de702b
3 changed files with 45 additions and 49 deletions

View file

@ -6,7 +6,7 @@ in vec2 vertexTexCoord;
in vec3 vertexNormal;
in vec4 vertexColor;
layout (location = 12) in mat4 instance;
in mat4 instanceTransform;
// Input uniform values
uniform mat4 mvp;
@ -22,15 +22,15 @@ out vec3 fragNormal;
void main()
{
// Send vertex attributes to fragment shader
fragPosition = vec3(instance * vec4(vertexPosition, 1.0));
fragPosition = vec3(vec4(vertexPosition, 1.0));
fragTexCoord = vertexTexCoord;
fragColor = vertexColor;
mat3 normalMatrix = transpose(inverse(mat3(instance)));
fragNormal = normalize(normalMatrix * vertexNormal);
mat3 normalMatrix = transpose(inverse(mat3(instanceTransform)));
fragNormal = normalize(normalMatrix*vertexNormal);
mat4 mvpi = mvp * instance;
mat4 mvpi = mvp*instanceTransform;
// Calculate final vertex position
gl_Position = mvpi * vec4(vertexPosition, 1.0);
gl_Position = mvpi*vec4(vertexPosition, 1.0);
}

View file

@ -89,7 +89,7 @@ int main(void)
// Get some shader loactions
shader.locs[SHADER_LOC_MATRIX_MVP] = GetShaderLocation(shader, "mvp");
shader.locs[SHADER_LOC_VECTOR_VIEW] = GetShaderLocation(shader, "viewPos");
shader.locs[SHADER_LOC_MATRIX_MODEL] = GetShaderLocationAttrib(shader, "instance");
shader.locs[SHADER_LOC_MATRIX_MODEL] = GetShaderLocationAttrib(shader, "instanceTransform");
// Ambient light level
int ambientLoc = GetShaderLocation(shader, "ambient");
@ -173,6 +173,7 @@ int main(void)
ClearBackground(RAYWHITE);
BeginMode3D(camera);
//DrawMesh(cube, material, MatrixIdentity());
DrawMeshInstanced(cube, material, transforms, instances);
EndMode3D();