首页 > 解决方案 > 在着色器文件中实现照明我的所有对象都变黑了

问题描述

我的颜色肯定会出现,因为当我在最终结果颜色中添加 0.8 时,您几乎看不到它们。除了名为 Light_Position 的统一矢量 3 和启用照明之外,我没有在 main 中编写任何照明代码,main 中是否需要代码来获取表面法线和其他内容?如果是这样,请告诉我我需要做什么。

主要用于照明:

glEnable(GL_DEPTH_TEST);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);


glm::vec3 Light_Position(0.2f, 0.1f, 0.2f);
int lightpos = glGetUniformLocation(shader, “light_position”);
glUniformMatrix4fv(lightpos, 1, GL_FALSE, glm::value_ptr(Light_Position));

//Both fragment and vertex shaders in one file

#shader vertex
#version 330 core

layout(location = 0) in vec3 position;
layout(location = 1) in vec3 normal;

uniform mat4 model_matrix;

uniform mat4 perspective;

uniform mat4 just_translations;

uniform vec3 light_position;

out vec3 fragment_position;
out vec3 Normals;

void main()
{
    gl_Position = model_matrix * vec4(position.x, position.y, position.z, 1.0);
    fragment_position = vec3(just_translations * vec4(position.x, position.y, position.z, 1.0));
    Normals = mat3(transpose(inverse(just_translations))) * normal;
}

标签: c++openglglslglm-math

解决方案


推荐阅读