97 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
| //Vertex Shader
 | |
| #version 430 core
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| layout (location = 0) in vec3 aPos;
 | |
| layout (location = 1) in vec3 aNormal;
 | |
| layout (location = 2) in vec4 aWeights;
 | |
| layout (location = 3) in vec4 aIndex;
 | |
| layout (location = 4) in vec2 aText;
 | |
| 
 | |
| 
 | |
| 
 | |
| uniform mat4 transform;
 | |
| uniform mat4 model;
 | |
| uniform mat4 view;
 | |
| uniform mat4 projection;
 | |
| 
 | |
| 
 | |
| const int MAX_BONES = 100;
 | |
| uniform mat4 bones[MAX_BONES];
 | |
| uniform int hasBones;
 | |
| uniform int numBones;
 | |
| 
 | |
| uniform int hasTexture;
 | |
| 
 | |
| 
 | |
| 
 | |
| out vec3 Normal;
 | |
| out vec3 FragPos;
 | |
| out vec2 TexCoords;
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     vec4 FinalVertex = vec4(aPos, 1.0);
 | |
|     vec4 FinalNormal = vec4(aNormal, 0.0);
 | |
|     if(hasBones == 1){
 | |
|         //mat4 BoneTransform;
 | |
|         //for(int i = 0; i < MAX_BONES; i++){
 | |
|         //    if(i < numBones){
 | |
|         //        BoneTransform += bones[i] * aWeights[i];
 | |
|         //    }
 | |
|         //}
 | |
|         //vec4 FinalVertex = vec4(aPos, 1.0);
 | |
|         //vec4 FinalNormal = vec4(aNormal, 1.0);
 | |
|         //mat4 BoneTransform;
 | |
|         //BoneTransform = mat4(
 | |
|         //    1.0,0.0,0.0,0.0,
 | |
|         //    0.0,1.0,0.0,0.0,
 | |
|         //    0.0,0.0,1.0,0.0,
 | |
|         //    0.0,0.0,0.0,1.0);
 | |
|         //BoneTransform = BoneTransform * mat4(
 | |
|         //    1.0,0.0,0.0,0.0,
 | |
|         //    0.0,1.0,0.0,0.0,
 | |
|         //    0.0,0.0,2.0,0.0,
 | |
|         //    0.0,0.0,0.0,1.0);
 | |
|         //BoneTransform = BoneTransform * bones[aIndex[0]] * aWeights[0];
 | |
|         //BoneTransform += bones[aIndex[0]] * 1.0;
 | |
|         //BoneTransform += bones[aIndex[1]] * aWeights[1];
 | |
|         //BoneTransform += bones[aIndex[2]] * aWeights[2];
 | |
|         //BoneTransform += bones[aIndex[3]] * aWeights[3];
 | |
|         //FinalVertex = BoneTransform * FinalVertex;
 | |
|         vec4 inputVertex = FinalVertex;
 | |
|         vec4 inputNormal = FinalNormal;
 | |
|         //mat4 BoneTransform;
 | |
|         //BoneTransform = bones[int(aIndex[0])] * aWeights[0];
 | |
|         //BoneTransform += bones[int(aIndex[1])] * aWeights[1];
 | |
|         //BoneTransform += bones[int(aIndex[2])] * aWeights[2];
 | |
|         //BoneTransform += bones[int(aIndex[3])] * aWeights[3];
 | |
|         //FinalVertex = BoneTransform * inputVertex;
 | |
|         //FinalNormal = BoneTransform * inputNormal;
 | |
|         FinalVertex = (bones[int(aIndex[0])]  * inputVertex) * aWeights[0];
 | |
|         FinalVertex = (bones[int(aIndex[1])]  * inputVertex) * aWeights[1] + FinalVertex;
 | |
|         FinalVertex = (bones[int(aIndex[2])]  * inputVertex) * aWeights[2] + FinalVertex;
 | |
|         FinalVertex = (bones[int(aIndex[3])]  * inputVertex) * aWeights[3] + FinalVertex;
 | |
|         FinalNormal = (bones[int(aIndex[0])]  * inputNormal) * aWeights[0];
 | |
|         FinalNormal = (bones[int(aIndex[1])]  * inputNormal) * aWeights[1] + FinalNormal;
 | |
|         FinalNormal = (bones[int(aIndex[2])]  * inputNormal) * aWeights[2] + FinalNormal;
 | |
|         FinalNormal = (bones[int(aIndex[3])]  * inputNormal) * aWeights[3] + FinalNormal;
 | |
|     } else {
 | |
|         //gl_Position = projection * view * model * vec4(aPos, 1.0);
 | |
|     }
 | |
| 
 | |
|     vec2 FinalTexture = vec2(1.0,1.0);
 | |
|     if(hasTexture == 1){
 | |
|         FinalTexture = aText;
 | |
|     }
 | |
|     TexCoords = FinalTexture;
 | |
| 
 | |
|     FragPos = vec3(model * FinalVertex);
 | |
|     Normal = vec3(transpose(inverse(model)) * FinalNormal);
 | |
|     gl_Position = projection * view * model * FinalVertex;
 | |
| } |