Commit 6ecb0da1 authored by hazkerindii228's avatar hazkerindii228
Browse files

add cube with ambient light and lamp as a light source

parent c7dcf14e
No related merge requests found
Showing with 165 additions and 14 deletions
+165 -14
......@@ -29,6 +29,8 @@ glm::vec3 cameraFront = glm::vec3(0.0f, 0.0f, -1.0f);
glm::vec3 cameraUp = glm::vec3(0.0f, 1.0f, 0.0f);
bool keys[1024];
glm::vec3 lightPos(1.2f, 1.0f, 2.0f);
GLfloat deltaTime = 0.0f; // Время, прошедшее между последним и текущим кадром
GLfloat lastFrame = 0.0f; // Время вывода последнего кадра
......@@ -59,6 +61,52 @@ int main()
Shader ourShader("shader.vs", "shader.frag");
Shader lightingShader("lightning.vs", "lightning.frag");
Shader lampShader("lightning.vs", "lamp.frag");
GLfloat cubeVertices[] = {
-0.5f, -0.5f, -0.5f,
0.5f, -0.5f, -0.5f,
0.5f, 0.5f, -0.5f,
0.5f, 0.5f, -0.5f,
-0.5f, 0.5f, -0.5f,
-0.5f, -0.5f, -0.5f,
-0.5f, -0.5f, 0.5f,
0.5f, -0.5f, 0.5f,
0.5f, 0.5f, 0.5f,
0.5f, 0.5f, 0.5f,
-0.5f, 0.5f, 0.5f,
-0.5f, -0.5f, 0.5f,
-0.5f, 0.5f, 0.5f,
-0.5f, 0.5f, -0.5f,
-0.5f, -0.5f, -0.5f,
-0.5f, -0.5f, -0.5f,
-0.5f, -0.5f, 0.5f,
-0.5f, 0.5f, 0.5f,
0.5f, 0.5f, 0.5f,
0.5f, 0.5f, -0.5f,
0.5f, -0.5f, -0.5f,
0.5f, -0.5f, -0.5f,
0.5f, -0.5f, 0.5f,
0.5f, 0.5f, 0.5f,
-0.5f, -0.5f, -0.5f,
0.5f, -0.5f, -0.5f,
0.5f, -0.5f, 0.5f,
0.5f, -0.5f, 0.5f,
-0.5f, -0.5f, 0.5f,
-0.5f, -0.5f, -0.5f,
-0.5f, 0.5f, -0.5f,
0.5f, 0.5f, -0.5f,
0.5f, 0.5f, 0.5f,
0.5f, 0.5f, 0.5f,
-0.5f, 0.5f, 0.5f,
-0.5f, 0.5f, -0.5f
};
GLfloat vertices[] = {
-0.5f, -0.5f, 0.5f, 0.0f, 0.0f,
......@@ -167,6 +215,31 @@ int main()
glBindVertexArray(0);
// First, set the container's VAO (and VBO)
GLuint containerVBO, containerVAO;
glGenVertexArrays(1, &containerVAO);
glGenBuffers(1, &containerVBO);
glBindBuffer(GL_ARRAY_BUFFER, containerVBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(cubeVertices), cubeVertices, GL_STATIC_DRAW);
glBindVertexArray(containerVAO);
// Position attribute
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(0);
glBindVertexArray(0);
GLuint lightVAO;
glGenVertexArrays(1, &lightVAO);
glBindVertexArray(lightVAO);
// Так как VBO объекта-контейнера уже содержит все необходимые данные, то нам нужно только связать с ним новый VAO
glBindBuffer(GL_ARRAY_BUFFER, containerVBO);
// Настраиваем атрибуты (нашей лампе понадобятся только координаты вершин)
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(0);
glBindVertexArray(0);
GLuint texture1;
glGenTextures(1, &texture1);
glBindTexture(GL_TEXTURE_2D, texture1);
......@@ -185,6 +258,7 @@ int main()
glBindTexture(GL_TEXTURE_2D, 0);
GLuint groundTexture;
glGenTextures(1, &groundTexture);
glBindTexture(GL_TEXTURE_2D, groundTexture);
......@@ -216,6 +290,8 @@ int main()
deltaTime = currentFrame - lastFrame;
lastFrame = currentFrame;
view = glm::lookAt(cameraPos, cameraPos + cameraFront, cameraUp);
glfwPollEvents();
do_movement();
......@@ -226,17 +302,53 @@ int main()
glBindTexture(GL_TEXTURE_2D, texture1);
glUniform1i(glGetUniformLocation(ourShader.Program, "ourTexture"), 0);
lightingShader.Use();
GLuint objectColorLoc = glGetUniformLocation(lightingShader.Program, "objectColor");
GLuint lightColorLoc = glGetUniformLocation(lightingShader.Program, "lightColor");
glUniform3f(objectColorLoc, 1.0f, 0.5f, 0.31f);
glUniform3f(lightColorLoc, 1.0f, 0.5f, 1.0f);
GLint containerLoc = glGetUniformLocation(lightingShader.Program, "model");
glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view));
glUniformMatrix4fv(projLoc, 1, GL_FALSE, glm::value_ptr(projection));
glBindVertexArray(containerVAO);
glm::mat4 modelContainer = glm::mat4(1.0f);
modelContainer = glm::translate(modelContainer, glm::vec3(5.0f, 0.0f, 0.0f));
glUniformMatrix4fv(containerLoc, 1, GL_FALSE, glm::value_ptr(modelContainer));
glDrawArrays(GL_TRIANGLES, 0, 36);
glBindVertexArray(0);
lampShader.Use();
GLuint modelLocLamp = glGetUniformLocation(lampShader.Program, "model");
GLuint lightColorLampLoc = glGetUniformLocation(lightingShader.Program, "lightColor");
glUniform3f(lightColorLampLoc, 1.0f, 0.5f, 1.0f);
glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view));
glUniformMatrix4fv(projLoc, 1, GL_FALSE, glm::value_ptr(projection));
glm::mat4 modelLamp = glm::mat4(1.0f);
modelLamp = glm::translate(modelLamp, lightPos);
modelLamp = glm::scale(modelLamp, glm::vec3(0.2f)); // Make it a smaller cube
glUniformMatrix4fv(modelLocLamp, 1, GL_FALSE, glm::value_ptr(modelLamp));
// Draw the light object (using light's vertex attributes)
glBindVertexArray(lightVAO);
glDrawArrays(GL_TRIANGLES, 0, 36);
glBindVertexArray(0);
ourShader.Use();
GLfloat timeValue = glfwGetTime();
GLuint timeLoc = glGetUniformLocation(ourShader.Program, "time");
glUniform1f(timeLoc, timeValue);
GLfloat radius = 10.0f;
GLfloat camX = sin(glfwGetTime()) * radius;
GLfloat camZ = cos(glfwGetTime()) * radius;
//GLfloat radius = 10.0f;
//GLfloat camX = sin(glfwGetTime()) * radius;
//GLfloat camZ = cos(glfwGetTime()) * radius;
view = glm::lookAt(cameraPos, cameraPos + cameraFront, cameraUp);
//view = glm::lookAt(cameraPos, cameraPos + cameraFront, cameraUp);
GLint modelLoc = glGetUniformLocation(ourShader.Program, "model");
......
......@@ -192,6 +192,9 @@
<ClCompile Include="Shader.cpp" />
</ItemGroup>
<ItemGroup>
<None Include="lamp.frag" />
<None Include="lightning.frag" />
<None Include="lightning.vs" />
<None Include="shader.frag" />
<None Include="shader.vs" />
</ItemGroup>
......
......@@ -29,6 +29,15 @@
<None Include="shader.vs">
<Filter>Файлы ресурсов</Filter>
</None>
<None Include="lightning.vs">
<Filter>Файлы ресурсов</Filter>
</None>
<None Include="lightning.frag">
<Filter>Файлы ресурсов</Filter>
</None>
<None Include="lamp.frag">
<Filter>Файлы ресурсов</Filter>
</None>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Shader.h">
......
#version 330 core
out vec4 color;
uniform vec3 lightColor;
void main()
{
color = vec4(lightColor, 1.0f);
}
\ No newline at end of file
#version 330 core
out vec4 color;
uniform vec3 objectColor;
uniform vec3 lightColor;
void main()
{
float ambientStrength = 0.1f;
vec3 ambient = ambientStrength * lightColor;
vec3 result = ambient * objectColor;
color = vec4(result, 1.0f);
}
\ No newline at end of file
#version 330 core
layout (location = 0) in vec3 position;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main()
{
gl_Position = projection * view * model * vec4(position, 1.0f);
}
\ No newline at end of file
#version 330 core
in vec3 FragColor;
in vec2 TexCoord;
out vec4 color;
......@@ -8,5 +7,5 @@ uniform sampler2D ourTexture;
void main()
{
color = texture(ourTexture, TexCoord) * vec4(FragColor, 1.0f);//*vec4(1.0f, 1.0f, 1.0f, 1.0f); //* vec4(ourColor, 1.0f);
color = texture(ourTexture, TexCoord);
}
\ No newline at end of file
......@@ -3,21 +3,13 @@ layout (location = 0) in vec3 position;
layout (location = 1) in vec2 texCoord;
out vec2 TexCoord;
out vec3 FragColor;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
uniform float time;
void main()
{
gl_Position = projection * view * model * vec4(position, 1.0f);
TexCoord = texCoord;
FragColor = vec3(
0.5 * sin(time) + 0.5,
0.5 * sin(time) + 0.5,
0.5 * sin(time) + 0.5
);
}
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment