some changes in lighting code
This commit is contained in:
parent
107c3c0557
commit
0acfbcd02c
@ -1,8 +1,47 @@
|
|||||||
#version 330 core
|
#version 330 core
|
||||||
|
|
||||||
smooth in vec3 color;
|
uniform mat4 mWorld;
|
||||||
|
uniform mat4 mView;
|
||||||
|
uniform mat4 mProjection;
|
||||||
|
uniform vec3 vEye;
|
||||||
|
|
||||||
|
in float zPos;
|
||||||
|
in vec3 norm;
|
||||||
|
|
||||||
out vec4 frag_colour;
|
out vec4 frag_colour;
|
||||||
|
|
||||||
|
vec3 hsv_to_rgb(float h, float s, float v)
|
||||||
|
{
|
||||||
|
float c = v * s;
|
||||||
|
h = mod((h * 6.0), 6.0);
|
||||||
|
float x = c * (1.0 - abs(mod(h, 2.0) - 1.0));
|
||||||
|
vec3 color;
|
||||||
|
|
||||||
|
if (0.0 <= h && h < 1.0) {
|
||||||
|
color = vec3(c, x, 0.0);
|
||||||
|
} else if (1.0 <= h && h < 2.0) {
|
||||||
|
color = vec3(x, c, 0.0);
|
||||||
|
} else if (2.0 <= h && h < 3.0) {
|
||||||
|
color = vec3(0.0, c, x);
|
||||||
|
} else if (3.0 <= h && h < 4.0) {
|
||||||
|
color = vec3(0.0, x, c);
|
||||||
|
} else if (4.0 <= h && h < 5.0) {
|
||||||
|
color = vec3(x, 0.0, c);
|
||||||
|
} else if (5.0 <= h && h < 6.0) {
|
||||||
|
color = vec3(c, 0.0, x);
|
||||||
|
} else {
|
||||||
|
color = vec3(0.0, 0.0, 0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
color.rgb += v - c;
|
||||||
|
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
void main () {
|
void main () {
|
||||||
|
vec3 materialColor = hsv_to_rgb(zPos, 1, 1);
|
||||||
|
float diffuse = clamp(dot(norm, -normalize(vec3(1,1,1))), 0.1, 0.6);
|
||||||
|
vec3 color = materialColor*diffuse;
|
||||||
|
|
||||||
frag_colour = vec4(color, 1.0);
|
frag_colour = vec4(color, 1.0);
|
||||||
}
|
}
|
||||||
@ -8,7 +8,8 @@ uniform vec3 vEye;
|
|||||||
layout (location = 0) in vec3 position;
|
layout (location = 0) in vec3 position;
|
||||||
layout (location = 1) in vec3 normal;
|
layout (location = 1) in vec3 normal;
|
||||||
|
|
||||||
smooth out vec3 color;
|
out float zPos;
|
||||||
|
out vec3 norm;
|
||||||
|
|
||||||
vec3 hsv_to_rgb(float h, float s, float v)
|
vec3 hsv_to_rgb(float h, float s, float v)
|
||||||
{
|
{
|
||||||
@ -39,9 +40,11 @@ vec3 hsv_to_rgb(float h, float s, float v)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void main () {
|
void main () {
|
||||||
|
norm = -normalize(vec3(mProjection*mView*mWorld*vec4(normal, 0)));
|
||||||
|
zPos = position.z;
|
||||||
gl_Position = mProjection*mView*mWorld*vec4(position, 1.0);
|
gl_Position = mProjection*mView*mWorld*vec4(position, 1.0);
|
||||||
|
|
||||||
vec3 materialColor = hsv_to_rgb(position.z, 1, 1);
|
// vec3 materialColor = hsv_to_rgb(position.z, 1, 1);
|
||||||
float brightness = clamp(dot(normalize(normal), normalize(vEye)), 0.4, 0.6);
|
// float brightness = clamp(dot(normalize(normal), normalize(vEye)), 0.4, 0.6);
|
||||||
color = materialColor*brightness;
|
// color = materialColor*brightness;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -60,8 +60,8 @@ void Mesh::updateVertices() const {
|
|||||||
glm::vec3 v2 = p2 - p3;
|
glm::vec3 v2 = p2 - p3;
|
||||||
glm::vec3 v3 = p4 - p3;
|
glm::vec3 v3 = p4 - p3;
|
||||||
|
|
||||||
glm::vec3 norm1 = glm::cross(v1, v2);
|
glm::vec3 norm1 = glm::cross(v2, v1);
|
||||||
glm::vec3 norm2 = glm::cross(v2, v3);
|
glm::vec3 norm2 = glm::cross(v3, v2);
|
||||||
|
|
||||||
_normals.emplace_back(norm1);
|
_normals.emplace_back(norm1);
|
||||||
_normals.emplace_back(norm2);
|
_normals.emplace_back(norm2);
|
||||||
|
|||||||
@ -54,7 +54,11 @@ void cursorPositionCallback(GLFWwindow* window, double xpos, double ypos) {
|
|||||||
float dy = (float)(ypos - lastY);
|
float dy = (float)(ypos - lastY);
|
||||||
static const float coeff = 0.01f;
|
static const float coeff = 0.01f;
|
||||||
if(glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS) {
|
if(glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS) {
|
||||||
Camera::instance()->mouseMoveAroundCenter(coeff*dx, coeff*dy);
|
//Camera::instance()->mouseMoveAroundCenter(coeff*dx, coeff*dy);
|
||||||
|
for(IGLObject* obj: OGL::instance()->_glObjects) {
|
||||||
|
obj->rotate(glm::vec3(coeff*dy, 0.f, coeff*dx));
|
||||||
|
obj->update();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -19,6 +19,7 @@ private:
|
|||||||
OGL(const OGL &) = delete;
|
OGL(const OGL &) = delete;
|
||||||
void operator=(const OGL &) = delete;
|
void operator=(const OGL &) = delete;
|
||||||
void updateFpsCounter() const;
|
void updateFpsCounter() const;
|
||||||
|
friend void cursorPositionCallback(GLFWwindow* window, double xpos, double ypos);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static OGL * instance();
|
static OGL * instance();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user