View difference between Paste ID: 6R8PCv3t and rykkpTME
SHOW: | | - or go back to the newest paste.
1-
Texture2D g_Texture;
1+
/*
2-
SamplerState g_Texture_sampler;
2+
	Copyright 2011-2018 Daniel S. Buckstein
3-
3+
	Licensed under the Apache License, Version 2.0 (the "License");
4-
struct PSInput
4+
	you may not use this file except in compliance with the License.
5
	You may obtain a copy of the License at
6-
	float4 Pos : SV_POSITION;
6+
		http://www.apache.org/licenses/LICENSE-2.0
7-
	float4 Normal : NORMAL0;
7+
	Unless required by applicable law or agreed to in writing, software
8-
	float4 Color : COLOR0;
8+
	distributed under the License is distributed on an "AS IS" BASIS,
9-
	float2 Uv : TEXCOORD0;
9+
	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10-
};
10+
	See the License for the specific language governing permissions and
11-
11+
	limitations under the License.
12-
float4 main(PSInput ps_in) : SV_TARGET
12+
*/
13
/*
14-
	//mul(, ps_in.Color);
14+
	animal3D SDK: Minimal 3D Animation Framework
15-
    return mul(g_Texture.Sample(g_Texture_sampler, ps_in.Uv), ps_in.Color);
15+
	By Daniel S. Buckstein
16
	
17
	drawPhong_fs4x.glsl
18
	Receive variables for calculating Phong shading, output result.
19
*/
20
//This file was modified by Summer Softleigh with permission from the author.
21
#version 410
22
//	1) declare varyings to receive data from vertex shader
23
//	2) declare uniform variables for textures; see demo code for hints
24
//	3) grab samples from textures
25
//	4) calculate diffuse and specular coefficients
26
//	5) calculate Phong shading model 
27
//	6) assign result to output color
28
in vec3 vPosition;
29
in vec4 vNormal;
30
in vec2 vTexcoord;
31
uniform vec4 uLightPos_obj;
32
uniform vec4 uEyePos_obj;
33
uniform sampler2D uTex_dm;
34
uniform sampler2D uTex_sm;
35
uniform mat4 uAtlas;
36
out vec4 rtFragColor;
37
vec3 calculateReflectDir(vec3 N, vec3 L)
38
{
39
	return 2.0f * dot(N, L) * N - L;
40
}
41
float calculateDiffuse(vec3 N, vec3 L)
42
{
43
	return dot(N, L) * 0.5f + 0.5f; //Change the range instead of clamping to 0.0f.  This makes it brighter in the back than Dan's program.  max(0.0f, dot(N, L)) gives the same as Dan's.
44
}
45
float calculateSpecular(vec3 V, vec3 R)
46
{
47
	return dot(V, R) * 0.5f + 0.5f; //Same thing as diffuse, just with names changed for clarity.
48
}	
49
void main()
50
{
51
	vec3 normal = normalize(vNormal.xyz);
52
	vec3 fragToLightDir = normalize(uLightPos_obj.xyz - vPosition);
53
	vec3 viewToLightDir = normalize(uEyePos_obj.xyz - vPosition);
54
	vec3 reflectDir = calculateReflectDir(normal, fragToLightDir);
55
	float diffuse = calculateDiffuse(normal, fragToLightDir);
56
	float specular = calculateSpecular(viewToLightDir, reflectDir);
57
	
58
	vec4 diffuseTextureColor = texture(uTex_dm, (uAtlas * vec4(vTexcoord, 0.0f, 1.0f)).xy);
59
	vec3 diffuseColor = diffuseTextureColor.rgb * diffuse;
60
	vec4 specularTextureColor = texture(uTex_sm, (uAtlas * vec4(vTexcoord, 0.0f, 1.0f)).xy);
61
	vec3 specularColor = specularTextureColor.rgb * vec3(pow(specular, 8.0f)); //8.0f for moderate shininess.  Could use a uniform for this, but for the sake of simplifying the homework, we'll use a constant literal here.
62
	rtFragColor = vec4(diffuseColor.rgb, diffuseTextureColor.a * specularTextureColor.a) + vec4(specularColor.rgb, 0.0f); //We want to multiply alpha, not add it.
63
}