diff --git a/.vs/shader3/v14/.suo b/.vs/shader3/v14/.suo index 86f0da2..fad0295 100644 Binary files a/.vs/shader3/v14/.suo and b/.vs/shader3/v14/.suo differ diff --git a/main.cpp b/main.cpp index a654551..18609cc 100644 --- a/main.cpp +++ b/main.cpp @@ -63,8 +63,8 @@ INT WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _ glewInit(); //init gpu program GPUProgram gpuProgram; - gpuProgram.AttachShader(GL_VERTEX_SHADER, "res/shader/diffuse_fs.vs"); - gpuProgram.AttachShader(GL_FRAGMENT_SHADER, "res/shader/diffuse_fs.fs"); + gpuProgram.AttachShader(GL_VERTEX_SHADER, "res/shader/test.vs"); + gpuProgram.AttachShader(GL_FRAGMENT_SHADER, "res/shader/test.fs"); gpuProgram.Link(); gpuProgram.DetectAttribute("pos"); @@ -120,10 +120,12 @@ INT WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _ glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glEnable(GL_DEPTH_TEST); glUseProgram(gpuProgram.mProgram); + glUniformMatrix4fv(gpuProgram.GetLocation("M"), 1,GL_FALSE, glm::value_ptr(modelMatrix)); glUniformMatrix4fv(gpuProgram.GetLocation("V"), 1, GL_FALSE, identity); glUniformMatrix4fv(gpuProgram.GetLocation("P"), 1, GL_FALSE, glm::value_ptr(projectionMatrix)); glUniformMatrix4fv(gpuProgram.GetLocation("NM"), 1, GL_FALSE, glm::value_ptr(normalMatrix)); + glUniform4fv(gpuProgram.GetLocation("U_AmbientLightColor"), 1,ambientLightColor); glUniform4fv(gpuProgram.GetLocation("U_AmbientMaterial"), 1, ambientMaterial); glUniform4fv(gpuProgram.GetLocation("U_DiffuseLightColor"), 1, diffuseLightColor); diff --git a/res/shader/test.fs b/res/shader/test.fs new file mode 100644 index 0000000..d0974fa --- /dev/null +++ b/res/shader/test.fs @@ -0,0 +1,22 @@ +uniform vec4 U_AmbientLightColor; +uniform vec4 U_AmbientMaterial; +uniform vec3 U_LightPos; +uniform vec4 U_DiffuseLightColor; +uniform vec4 U_DiffuseMaterial; + + +varying vec3 V_Normal; + +void main() +{ + //ambient + vec4 ambientColor = U_AmbientLightColor * U_AmbientMaterial; + + //diffuse + vec3 N = normalize(V_Normal); + vec3 L = normalize(U_LightPos); + float diffuseIntensity = max(0.0, dot(L,N)); + vec4 diffuseColor = U_DiffuseLightColor * U_DiffuseMaterial * diffuseIntensity; + + gl_FragColor = ambientColor + diffuseColor; +} \ No newline at end of file diff --git a/res/shader/test.vs b/res/shader/test.vs new file mode 100644 index 0000000..2bd09a7 --- /dev/null +++ b/res/shader/test.vs @@ -0,0 +1,15 @@ +attribute vec3 pos; +attribute vec2 texcoord; +attribute vec3 normal; + +uniform mat4 M; +uniform mat4 P; +uniform mat4 V; +uniform mat4 NM;//Normal Matrix ʹÓÃÀ´ÐÞÕý·¨ÏßµÄ + +varying vec3 V_Normal; +void main() +{ + V_Normal = mat3(NM)*normal; + gl_Position=P*V*M*vec4(pos,1.0); +} \ No newline at end of file diff --git a/shader3.vcxproj b/shader3.vcxproj index 8db05fc..dca363b 100644 --- a/shader3.vcxproj +++ b/shader3.vcxproj @@ -61,7 +61,10 @@ - + + + editbin /subsystem:console $(OutDir)$(ProjectName).exe + @@ -79,8 +82,8 @@ - - + + diff --git a/shader3.vcxproj.filters b/shader3.vcxproj.filters index 9fcb30c..cc11adc 100644 --- a/shader3.vcxproj.filters +++ b/shader3.vcxproj.filters @@ -1,3 +1,56 @@  - + + + + {e15d0e9c-35fc-45f8-90bd-b46a358d907b} + + + {dbc65808-53cb-4088-a850-19079331f256} + + + + + GPUProgram + + + GPUProgram + + + GPUProgram + + + GPUProgram + + + GPUProgram + + + src + + + + + GPUProgram + + + GPUProgram + + + GPUProgram + + + GPUProgram + + + GPUProgram + + + + + src + + + src + + \ No newline at end of file