Исправление шейдера для работы с нормалями

This commit is contained in:
vlad 2023-03-23 19:01:33 +03:00
parent bd12a62be1
commit e7e4852756
5 changed files with 20 additions and 10 deletions

Binary file not shown.

View File

@ -1,12 +1,12 @@
# Blender MTL File: 'cube.blend' # Blender MTL File: 'cube.blend'
# Material Count: 1 # Material Count: 1
newmtl Material newmtl CubeColor
Ns 250.000000 Ns 250.000000
Ka 1.000000 1.000000 1.000000 Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000 Kd 0.800000 0.447721 0.037177
Ks 0.500000 0.500000 0.500000 Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000 Ke 0.000000 0.000000 0.000000
Ni 1.000000 Ni 1.450000
d 1.000000 d 1.000000
illum 2 illum 2

View File

@ -16,7 +16,7 @@ vn -1.0000 0.0000 0.0000
vn 0.0000 -1.0000 0.0000 vn 0.0000 -1.0000 0.0000
vn 1.0000 0.0000 0.0000 vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 -1.0000
usemtl Material usemtl CubeColor
s off s off
f 5//1 3//1 1//1 f 5//1 3//1 1//1
f 3//2 8//2 4//2 f 3//2 8//2 4//2

View File

@ -5,10 +5,18 @@ layout (location = 1) in vec3 v_normal;
out vec4 a_color; out vec4 a_color;
uniform mat4 projview; uniform mat4 projview;
uniform mat4 model;
void main(){ void main(){
// gl_Position = vec4(v_position, 1) * projview; // gl_Position = vec4(v_position, 1) * projview;
gl_Position = projview * vec4(v_position, 1); gl_Position = projview * model * vec4(v_position, 1);
a_color = vec4(0.5, 0, 1, 1);
// dot получается [-1 ... 1]
float l = dot((model * vec4(v_position, 1)).xyz, normalize(vec3(1, 1, 1)));
// сначала делаем диапазон [1 ... 3]
// потом [0.5 ... 1]
l = (l + 2) / 3;
a_color = vec4(vec3(0.5, 0, 1) * l, 1);
} }

View File

@ -87,17 +87,18 @@ static void drawWorld(Camera& cam) {
// shader->uniformMatrix("pr", cam.getProjection() * cam.getView()); // shader->uniformMatrix("pr", cam.getProjection() * cam.getView());
shader->uniformMatrix("projview", projview); shader->uniformMatrix("projview", projview);
shader->uniformMatrix("model", glm::mat4(1.0f));
world->draw(); world->draw();
auto model_scale = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f, 0.5f, 0.5f)); auto model_scale = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f, 0.5f, 0.5f));
static float angle = 0.0f; static float angle = 0.0f;
auto model_translate = glm::translate(glm::mat4(1.0f), glm::vec3(0, 0, -2)); auto model_translate = glm::translate(glm::mat4(1.0f), glm::vec3(0, 0, -3));
auto model_rotate = glm::rotate(glm::mat4(1.0f), angle, glm::vec3(0, 1, 0)); auto model_rotate = glm::rotate(glm::mat4(1.0f), angle, glm::vec3(0, 1, 0));
angle += 0.001f; angle += 0.0002f;
shader->uniformMatrix("projview", projview * model_scale * model_translate * model_rotate); shader->uniformMatrix("model", model_scale * model_translate * model_rotate);
// world->draw(); // world->draw();
model_mesh->draw(); model_mesh->draw();
} }
@ -175,7 +176,8 @@ int main() {
loadResources(); loadResources();
// glDisable(GL_DEPTH_TEST); // glDisable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE); // glDisable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
Camera cam(glm::vec3(0, 0, 5), glm::radians(90.0f)); Camera cam(glm::vec3(0, 0, 5), glm::radians(90.0f));