Browse Source

光照修复前

master
blobt 4 years ago
parent
commit
54331cfa75
  1. BIN
      .vs/shader/v14/.suo
  2. 17
      Res/model.fs
  3. 6
      Res/model.vs
  4. 5
      model.cpp
  5. BIN
      shader.VC.db
  6. 21
      shader.cpp
  7. 10
      shader.h
  8. 2
      shader.vcxproj
  9. 6
      shader.vcxproj.filters

BIN
.vs/shader/v14/.suo

17
Res/model.fs

@ -1,8 +1,23 @@
#ifdef GL_ES
precision mediump float;
#endif
uniform vec4 U_LightPos;
uniform vec4 U_LightAmbient;
uniform vec4 U_LightDiffuse;
uniform vec4 U_AmbientMaterial;
uniform vec4 U_DiffuseMaterial;
varying vec4 V_Color;
varying vec4 V_Normal;
void main()
{
gl_FragColor=V_Color;
vec4 color=vec4(0.0,0.0,0.0,0.0);
vec4 ambientColor=U_LightAmbient*U_AmbientMaterial;
vec3 lightPos=U_LightPos.xyz;
vec3 L=lightPos;
L=normalize(L);
vec3 n=normalize(V_Normal.xyz);
float diffuseIntensity=max(0.0,dot(L,n));
vec4 diffuseColor=U_LightDiffuse*U_DiffuseMaterial*diffuseIntensity;
color=ambientColor+diffuseColor;
gl_FragColor=color;
}

6
Res/model.vs

@ -1,12 +1,16 @@
attribute vec4 position;
attribute vec4 color;
attribute vec2 texcoord;
attribute vec4 texcoord;
attribute vec4 normal;
uniform mat4 ModelMatrix;
uniform mat4 ViewMatrix;
uniform mat4 ProjectionMatrix;
uniform mat4 IT_ModelMatrix;
varying vec4 V_Color;
varying vec4 V_Normal;
void main()
{
V_Color=color;
V_Normal=IT_ModelMatrix*normal;
gl_Position=ProjectionMatrix*ViewMatrix*ModelMatrix*position;
}

5
model.cpp

@ -102,6 +102,11 @@ void Model::Init(const char*modelPath) {
mShader = new Shader;
mShader->Init("Res/model.vs", "Res/model.fs");
mShader->SetVec4("U_LightPos", 0.0f, 1.0f, 1.0f, 0.0f);//设置光源位置
mShader->SetVec4("U_LightAmbient", 1.0f, 1.0f, 1.0f, 1.0f);//设置环境光分量
mShader->SetVec4("U_LightDiffuse", 1.0f, 1.0f, 1.0f, 1.0f);//设置慢反射光分量
mShader->SetVec4("U_AmbientMaterial", 0.1f, 0.1f, 0.1f, 1.0f);//设置环境光材质分量
mShader->SetVec4("U_DiffuseMaterial", 0.6f, 0.6f, 0.6f, 1.0f);//设置漫反射材质分量
}
void Model::Draw(glm::mat4 & viewMatrix, glm::mat4 projectionMatrix) {

BIN
shader.VC.db

21
shader.cpp

@ -71,3 +71,24 @@ void Shader::SetTexture(const char * name, const char*imagePath) {
iter->second->mTexture = CreateTexture2DFromBMP(imagePath);
}
}
void Shader::SetVec4(const char * name, float x, float y, float z, float w) {
auto iter = mUniformVec4s.find(name);
if (iter == mUniformVec4s.end()) {
GLint location = glGetUniformLocation(mProgram, name);
if (location != -1) {
UniformVector4f*v = new UniformVector4f;
v->v[0] = x;
v->v[1] = y;
v->v[2] = z;
v->v[3] = w;
v->mLocation = location;
mUniformVec4s.insert(std::pair<std::string, UniformVector4f*>(name, v));
}
}
else {
iter->second->v[0] = x;
iter->second->v[1] = y;
iter->second->v[2] = z;
iter->second->v[3] = w;
}
}

10
shader.h

@ -8,13 +8,23 @@ struct UniformTexture {
mTexture = 0;
}
};
struct UniformVector4f {
GLint mLocation;
float v[4];
UniformVector4f() {
mLocation = -1;
memset(v, 0, sizeof(float) * 4);
}
};
class Shader {
public:
GLuint mProgram;
std::map<std::string, UniformTexture*> mUniformTextures;
std::map<std::string, UniformVector4f*> mUniformVec4s;
GLint mModelMatrixLocation, mViewMatrixLocation, mProjectionMatrixLocation;
GLint mPositionLocation, mColorLocation, mTexcoordLocation, mNormalLocation;
void Init(const char*vs, const char*fs);
void Bind(float *M, float *V, float*P);
void SetTexture(const char * name, const char*imagePath);
void SetVec4(const char * name, float x, float y, float z, float w);
};

2
shader.vcxproj

@ -163,6 +163,8 @@
<ItemGroup>
<None Include="Res\ground.fs" />
<None Include="Res\ground.vs" />
<None Include="Res\model.fs" />
<None Include="Res\model.vs" />
<None Include="Res\test.fs" />
<None Include="Res\test.vs" />
</ItemGroup>

6
shader.vcxproj.filters

@ -73,5 +73,11 @@
<None Include="Res\ground.vs">
<Filter>资源文件</Filter>
</None>
<None Include="Res\model.fs">
<Filter>资源文件</Filter>
</None>
<None Include="Res\model.vs">
<Filter>资源文件</Filter>
</None>
</ItemGroup>
</Project>
Loading…
Cancel
Save