Compare commits

..

No commits in common. "master" and "v0.1" have entirely different histories.
master ... v0.1

6 changed files with 8 additions and 83 deletions

View File

@ -21,15 +21,6 @@
// Стандартная чувствительность // Стандартная чувствительность
#define CAMERA_DEFAULT_SENSIVITY 0.005f #define CAMERA_DEFAULT_SENSIVITY 0.005f
// Данные о камере для шейдера
struct CameraData
{
glm::mat4 projection;
glm::mat4 view;
glm::vec3 position;
};
// Класс камеры
class Camera : public Node class Camera : public Node
{ {
public: public:
@ -52,8 +43,6 @@ class Camera : public Node
void use(); // Использование этой камеры как текущей void use(); // Использование этой камеры как текущей
static Camera& current(); // Ссылка на текущую используемую камеру static Camera& current(); // Ссылка на текущую используемую камеру
CameraData& getData(); // Данные о камере для шейдера
protected: protected:
Camera(const glm::vec3 &position, const glm::vec3 &initialRotation); // Защищенный (protected) конструктор камеры без перспективы Camera(const glm::vec3 &position, const glm::vec3 &initialRotation); // Защищенный (protected) конструктор камеры без перспективы

View File

@ -1,13 +0,0 @@
#ifndef LIGHTS_H
#define LIGHTS_H
#include <GLM/glm.hpp>
// Точечный источник света
struct LightData
{
alignas(16) glm::vec3 position; // Позиция
alignas(16) glm::vec3 color; // Цвет
};
#endif // LIGHTS_H

View File

@ -2,10 +2,6 @@
in vec2 texCoord; in vec2 texCoord;
in vec3 Cam_vertex; // Позиция камеры относительно вершины
in vec3 L_vertex; // Позиция источника света относительно вершины
in vec3 N; // Нормаль
layout(std140, binding = 1) uniform Material layout(std140, binding = 1) uniform Material
{ {
vec3 ka; vec3 ka;
@ -14,12 +10,6 @@ layout(std140, binding = 1) uniform Material
float p; float p;
}; };
layout(std140, binding = 2) uniform Light
{
vec3 position;
vec3 color;
} light_f;
uniform sampler2D tex_diffuse; uniform sampler2D tex_diffuse;
uniform sampler2D tex_ambient; uniform sampler2D tex_ambient;
uniform sampler2D tex_specular; uniform sampler2D tex_specular;
@ -28,14 +18,6 @@ out vec4 color;
void main() void main()
{ {
// Диффузная составляющая color = texture(tex_diffuse, texCoord);
float diffuse = max(dot(L_vertex, N), 0.0); // скалярное произведение с отсеканием значений < 0
// Вектор половины пути
vec3 H = normalize(L_vertex + Cam_vertex);
// Зеркальная составляющая
float specular = pow(max(dot(H, N), 0.0), p*4); // скалярное произведение с отсеканием значений < 0 в степени p
color = vec4(light_f.color*ka, 1)*texture(tex_ambient, texCoord) + vec4(light_f.color*kd*diffuse, 1)*texture(tex_diffuse, texCoord) + vec4(light_f.color*ks*specular, 1)*texture(tex_specular, texCoord);
} }

View File

@ -8,31 +8,14 @@ layout(std140, binding = 0) uniform Camera
{ {
mat4 projection; mat4 projection;
mat4 view; mat4 view;
vec3 position; };
} camera;
layout(std140, binding = 2) uniform Light
{
vec3 position;
vec3 color;
} light_v;
uniform mat4 model; uniform mat4 model;
out vec2 texCoord; out vec2 texCoord;
out vec3 Cam_vertex; // Позиция камеры относительно вершины
out vec3 L_vertex; // Позиция источника света относительно вершины
out vec3 N; // Нормаль трансформированноая
void main() void main()
{ {
vec4 P = model * vec4(pos, 1.0); // трансформация вершины gl_Position = projection * view * model * vec4(pos, 1.0);
Cam_vertex = normalize(camera.position - P.xyz);
L_vertex = normalize(light_v.position - P.xyz);
N = normalize(mat3(model) * normals);
gl_Position = camera.projection * camera.view * P;
texCoord = inTexCoord; texCoord = inTexCoord;
} }

View File

@ -181,11 +181,3 @@ Camera& Camera::current()
else else
return *p_current; return *p_current;
} }
// Данные о камере для шейдера
CameraData& Camera::getData()
{
static CameraData data;
data = {getProjection(), getView(), position};
return data;
}

View File

@ -7,7 +7,6 @@
#include "Scene.h" #include "Scene.h"
#include "Shader.h" #include "Shader.h"
#include "Lights.h"
#define WINDOW_WIDTH 800 #define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600 #define WINDOW_HEIGHT 600
@ -96,9 +95,7 @@ int main(void)
// Загрузка сцены из obj файла // Загрузка сцены из obj файла
Scene scene = loadOBJtoScene("../resources/models/blob.obj", "../resources/models/", "../resources/textures/"); Scene scene = loadOBJtoScene("../resources/models/cubes.obj", "../resources/models/", "../resources/textures/");
scene.root.e_scale() = glm::vec3(0.01);
scene.root.e_position().z = 1;
// Установка цвета очистки буфера цвета // Установка цвета очистки буфера цвета
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
@ -106,15 +103,9 @@ int main(void)
// Расположение Uniform-переменной // Расположение Uniform-переменной
GLuint model_uniform = base.getUniformLoc("model"); GLuint model_uniform = base.getUniformLoc("model");
// Источник света
LightData light = { {1.0f, 3.0f, 0.0f} // позиция
, {1.0f, 1.0f, 1.0f} // цвет
};
// Uniform-буферы // Uniform-буферы
UBO cameraUB(sizeof(CameraData), 0); UBO cameraUB(sizeof(glm::mat4)*2, 0);
UBO material_data(sizeof(Material), 1); UBO material_data(sizeof(Material), 1);
UBO light_data(&light, sizeof(LightData), 2);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); // Использование уменьшенных версий mipmap glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); // Использование уменьшенных версий mipmap
@ -122,7 +113,8 @@ int main(void)
while(!glfwWindowShouldClose(window)) while(!glfwWindowShouldClose(window))
{ {
// Загрузка данных о камере // Загрузка данных о камере
cameraUB.loadSub(&Camera::current().getData(), sizeof(CameraData)); cameraUB.loadSub(&Camera::current().getProjection(), sizeof(glm::mat4), 0);
cameraUB.loadSub(&Camera::current().getView(), sizeof(glm::mat4), sizeof(glm::mat4));
// Очистка буфера цвета // Очистка буфера цвета
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);