Browse Source

逐像素 高光

master
ubuntu20 4 years ago
parent
commit
91042e9ea4
  1. 40
      Res/specular.fs
  2. 17
      Res/specular.vs
  3. 4
      renderFramework.vcxproj
  4. 4
      renderFramework.vcxproj.filters
  5. 4
      scene.cpp

40
Res/specular.fs

@ -0,0 +1,40 @@
#ifdef GL_ES
precision mediump float;
#endif
uniform vec4 U_AmbientMaterial;
uniform vec4 U_AmbientLight;
uniform vec4 U_LightPos;
uniform vec4 U_DiffuseMaterial;
uniform vec4 U_DiffuseLight;
uniform vec4 U_CameraPos;
uniform vec4 U_SpecularMaterial;
uniform vec4 U_SpecularLight;
varying vec4 V_Normal;
varying vec4 V_WorldPos;
void main()
{
//ambient
vec4 ambirntColor = U_AmbientMaterial*U_AmbientLight;
//diffuse
vec3 L = normalize(U_LightPos.xyz - vec3(0));
vec3 n = normalize(V_Normal.xyz);
float diffuseIntensity = max(0.0, dot(L,n));
vec4 diffuseColor = U_DiffuseMaterial * U_DiffuseLight * diffuseIntensity;
//specular
vec4 specularColor = vec4(0);
if(diffuseIntensity > 0.0) {
vec3 sL = normalize(vec3(0) - U_LightPos.xyz); //ÈëÉä¹âÏß
vec3 rd = normalize(reflect(sL, n));
vec3 vd = normalize((U_CameraPos - V_WorldPos).xyz);
float specularIntensity = pow(max(0.0, dot(vd, rd)),32.0);
specularColor = U_SpecularMaterial * U_SpecularLight * specularIntensity;
}
gl_FragColor=ambirntColor + diffuseColor + specularColor;
}

17
Res/specular.vs

@ -0,0 +1,17 @@
#ifdef GL_ES
precision mediump float;
#endif;
attribute vec4 position;
attribute vec4 texcoord;
attribute vec4 normal;
uniform mat4 ModelMatrix;
uniform mat4 ViewMatrix;
uniform mat4 ProjectionMatrix;
uniform mat4 IT_ModelMatrix;
varying vec4 V_Normal;
varying vec4 V_WorldPos;
void main(){
V_Normal = normal * IT_ModelMatrix;
V_WorldPos = ModelMatrix * position;
gl_Position = ProjectionMatrix * ViewMatrix * ModelMatrix * position;
}

4
renderFramework.vcxproj

@ -149,8 +149,8 @@
<ClInclude Include="vertexbuffer.h" />
</ItemGroup>
<ItemGroup>
<None Include="Res\diffuse.fs" />
<None Include="Res\diffuse.vs" />
<None Include="Res\specular.fs" />
<None Include="Res\specular.vs" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">

4
renderFramework.vcxproj.filters

@ -62,10 +62,10 @@
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="Res\diffuse.fs">
<None Include="Res\specular.fs">
<Filter>源文件</Filter>
</None>
<None Include="Res\diffuse.vs">
<None Include="Res\specular.vs">
<Filter>源文件</Filter>
</None>
</ItemGroup>

4
scene.cpp

@ -13,7 +13,7 @@ FullScreenQuad *fsq;
void Init()
{
model.Init("Res/Sphere.obj");
model.mShader->Init("Res/diffuse.vs", "Res/diffuse.fs");
model.mShader->Init("Res/specular.vs", "Res/specular.fs");
model.SetPosition(0.0f, 0.0f, 0.0f);
//设置环境光参数
@ -27,7 +27,7 @@ void Init()
//设置高光参数
model.SetSpecularMaterial(1.0f, 1.0f, 1.0f, 1.0f);
model.mShader->SetVec4("U_SpecualrLight", 1.0f, 1.0f, 1.0f, 1.0f);
model.mShader->SetVec4("U_SpecularLight", 1.0f, 1.0f, 1.0f, 1.0f);
viewMatrix = glm::lookAt(cameraPos, glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
fsq = new FullScreenQuad();

Loading…
Cancel
Save