Browse Source

diffuse漫反射实现,存在问题

master
blobt 4 years ago
parent
commit
47831bf0c9
  1. BIN
      .vs/shader2/v14/.suo
  2. BIN
      .vs/shader2/v16/.suo
  3. BIN
      .vs/shader2/v16/Browse.VC.db
  4. 10
      main.cpp
  5. 22
      res/shader/test.fs
  6. 3
      res/shader/test.vs
  7. BIN
      shader2.VC.db
  8. 4
      shader2.vcxproj.user

BIN
.vs/shader2/v14/.suo

BIN
.vs/shader2/v16/.suo

BIN
.vs/shader2/v16/Browse.VC.db

10
main.cpp

@ -90,13 +90,14 @@ INT WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
/*创建program*/ /*创建program*/
GLuint program = CreateGPUProgram("res/shader/test.vs", "res/shader/test.fs"); GLuint program = CreateGPUProgram("res/shader/test.vs", "res/shader/test.fs");
GLuint posLocation, texcoordLocation, normalLocation, MLocation, VLocation, PLocation;
GLuint posLocation, texcoordLocation, normalLocation, MLocation, VLocation, PLocation, NMLocation;
posLocation = glGetAttribLocation(program, "pos"); posLocation = glGetAttribLocation(program, "pos");
texcoordLocation = glGetAttribLocation(program, "texcoord"); texcoordLocation = glGetAttribLocation(program, "texcoord");
normalLocation = glGetAttribLocation(program, "normal"); normalLocation = glGetAttribLocation(program, "normal");
MLocation = glGetUniformLocation(program, "M"); MLocation = glGetUniformLocation(program, "M");
VLocation = glGetUniformLocation(program, "V"); VLocation = glGetUniformLocation(program, "V");
PLocation = glGetUniformLocation(program, "P"); PLocation = glGetUniformLocation(program, "P");
NMLocation = glGetUniformLocation(program, "NM");
/*load model*/ /*load model*/
unsigned int *indexes = nullptr; unsigned int *indexes = nullptr;
@ -113,7 +114,8 @@ INT WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
/*创建IBO*/ /*创建IBO*/
GLuint ibo = CreateBufferObject(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int) * indexCount, GL_STATIC_DRAW, indexes); GLuint ibo = CreateBufferObject(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int) * indexCount, GL_STATIC_DRAW, indexes);
glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
//glEnable(GL_DEPTH_TEST);
//创建一个单位矩阵和一个投影矩阵,后面用来传递到shader //创建一个单位矩阵和一个投影矩阵,后面用来传递到shader
float identify[] = { float identify[] = {
@ -122,8 +124,9 @@ INT WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
0,0,1,0, 0,0,1,0,
0,0,0,1 0,0,0,1
}; };
glm::mat4 model = glm::translate(0.0f, 0.0f, -5.0f);
glm::mat4 model = glm::translate(0.0f, 0.0f, -3.0f);
glm::mat4 projection = glm::perspective(45.0f, 800.0f/600.0f, 0.1f, 1000.0f); glm::mat4 projection = glm::perspective(45.0f, 800.0f/600.0f, 0.1f, 1000.0f);
glm::mat4 normalMatrix = glm::inverseTranspose(model);
/*显示窗口*/ /*显示窗口*/
ShowWindow(hwnd, SW_SHOW); ShowWindow(hwnd, SW_SHOW);
@ -146,6 +149,7 @@ INT WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
glUniformMatrix4fv(MLocation, 1, GL_FALSE, glm::value_ptr(model)); glUniformMatrix4fv(MLocation, 1, GL_FALSE, glm::value_ptr(model));
glUniformMatrix4fv(VLocation, 1, GL_FALSE, identify); glUniformMatrix4fv(VLocation, 1, GL_FALSE, identify);
glUniformMatrix4fv(PLocation, 1, GL_FALSE, glm::value_ptr(projection)); glUniformMatrix4fv(PLocation, 1, GL_FALSE, glm::value_ptr(projection));
glUniformMatrix4fv(NMLocation, 1, GL_FALSE, glm::value_ptr(normalMatrix));
glBindBuffer(GL_ARRAY_BUFFER, vbo); glBindBuffer(GL_ARRAY_BUFFER, vbo);
glEnableVertexAttribArray(posLocation); glEnableVertexAttribArray(posLocation);

22
res/shader/test.fs

@ -1,3 +1,23 @@
varying vec3 V_Normal;
void main() { void main() {
gl_FragColor = vec4(1.0);
vec3 lightPos = vec3(0.0, 10.0, 0.0);
vec3 L=lightPos;
L = normalize(L);
vec3 n = normalize(V_Normal);
//ambient
vec4 AmbientLightColor = vec4(0.2, 0.2, 0.2, 1.0);
vec4 AmbientMaterial = vec4(0.2, 0.2, 0.2, 1.0);
vec4 AmbientColor = AmbientLightColor*AmbientMaterial;
//diffuse
vec4 DiffuseLightColor = vec4(1.0,1.0,1.0,1.0);
vec4 DiffuseMaterial = vec4(0.2, 0.2, 0.2, 1.0);
vec4 diffuseColor = DiffuseLightColor*DiffuseMaterial*max(0.0, dot(L,n));
gl_FragColor = AmbientColor + diffuseColor;
} }

3
res/shader/test.vs

@ -5,7 +5,10 @@ attribute vec3 normal;
uniform mat4 M; uniform mat4 M;
uniform mat4 V; uniform mat4 V;
uniform mat4 P; uniform mat4 P;
uniform mat4 NM;
varying vec3 V_Normal;
void main() { void main() {
V_Normal = mat3(NM)*normal;
gl_Position = P*V*M*vec4(pos,1.0); gl_Position = P*V*M*vec4(pos,1.0);
} }

BIN
shader2.VC.db

4
shader2.vcxproj.user

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>
Loading…
Cancel
Save