mirror of
https://github.com/Linloir/SceneEditor.git
synced 2025-12-17 07:28:12 +08:00
将文件的复制与给予权限抽象成一个函数。
添加光照渲染函数
This commit is contained in:
parent
df803c8dea
commit
8adf864c39
@ -2,14 +2,30 @@
|
||||
out vec4 FragColor;
|
||||
|
||||
in vec2 TexCoords;
|
||||
in vec3 Normal;
|
||||
in vec3 FragPos;
|
||||
|
||||
uniform sampler2D texture_diffuse1;
|
||||
uniform sampler2D texture_specular1;
|
||||
// above 2 uniform can caculate objectColor
|
||||
|
||||
uniform vec3 lightPos;
|
||||
uniform vec3 lightColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
FragColor = texture(texture_specular1, TexCoords);
|
||||
FragColor = texture(texture_diffuse1, TexCoords);
|
||||
FragColor = vec4(FragColor * vec4(lightColor,1.0f));
|
||||
vec3 objectColor = texture(texture_specular1, TexCoords).rgb;
|
||||
objectColor = texture(texture_diffuse1, TexCoords).rgb;
|
||||
// ambient
|
||||
float ambientStrength = 0;
|
||||
vec3 ambient = ambientStrength * lightColor;
|
||||
|
||||
// diffuse
|
||||
vec3 norm = normalize(Normal);
|
||||
vec3 lightDir = normalize(lightPos - FragPos);
|
||||
float diff = max(dot(norm, lightDir), 0.0);
|
||||
vec3 diffuse = diff * lightColor;
|
||||
|
||||
vec3 result = (ambient + diffuse) * objectColor;
|
||||
FragColor = vec4(result, 1.0);
|
||||
}
|
||||
0
FinalProject/illuminant.fs
Normal file
0
FinalProject/illuminant.fs
Normal file
11
FinalProject/illuminant.vs
Normal file
11
FinalProject/illuminant.vs
Normal file
@ -0,0 +1,11 @@
|
||||
#version 430 core
|
||||
layout (location = 0) in vec3 aPos;
|
||||
|
||||
uniform mat4 model;
|
||||
uniform mat4 view;
|
||||
uniform mat4 projection;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = projection * view * model * vec4(aPos, 1.0);
|
||||
}
|
||||
@ -3,8 +3,8 @@
|
||||
|
||||
// 发光物不需要纹理,所以说需要另外的shader
|
||||
// 在sceneviewer中被包含
|
||||
class LightCaster {
|
||||
class Illuminant {
|
||||
public:
|
||||
LightCaster() {};
|
||||
Illuminant() {};
|
||||
|
||||
};
|
||||
@ -5,7 +5,7 @@
|
||||
#include <qresource.h>
|
||||
#include <qurl.h>
|
||||
#include <qdir.h>
|
||||
|
||||
#include<time.h>
|
||||
#include "vbo.h"
|
||||
#include "vao.h"
|
||||
#include "shader.h"
|
||||
@ -89,8 +89,8 @@ void SceneViewer::paintGL() {
|
||||
_shaderProgram.setUniform("projection", projection);
|
||||
|
||||
|
||||
///////////////////////////////////////最终不应该放在这里
|
||||
_shaderProgram.setUniform("lightColor", 0.0f, 1.0f, 0.0f);
|
||||
///////////////////////////////////////进行光照处理
|
||||
update_light();
|
||||
//////////////////////////////////////
|
||||
|
||||
|
||||
@ -174,3 +174,10 @@ void SceneViewer::wheelEvent(QWheelEvent* event) {
|
||||
// Update the view
|
||||
update();
|
||||
}
|
||||
|
||||
void SceneViewer::update_light() {
|
||||
auto r = time(NULL);
|
||||
Logger::debug("1\n");
|
||||
_shaderProgram.setUniform("lightPos", (float)sin(r), (float)sin(r/4), (float)sin(r/2.1));
|
||||
_shaderProgram.setUniform("lightColor", 1.0f, 1.0f, 1.0f);
|
||||
}
|
||||
|
||||
@ -41,6 +41,7 @@ private:
|
||||
public:
|
||||
SceneViewer(QWidget* parent = 0);
|
||||
~SceneViewer();
|
||||
void update_light();
|
||||
|
||||
protected:
|
||||
// OpenGL functions
|
||||
|
||||
@ -4,6 +4,8 @@ layout (location = 1) in vec3 aNormal;
|
||||
layout (location = 2) in vec2 aTexCoords;
|
||||
|
||||
out vec2 TexCoords;
|
||||
out vec3 FragPos;
|
||||
out vec3 Normal;
|
||||
|
||||
uniform mat4 model;
|
||||
uniform mat4 view;
|
||||
@ -11,6 +13,9 @@ uniform mat4 projection;
|
||||
|
||||
void main()
|
||||
{
|
||||
FragPos = vec3(model * vec4(aPos, 1.0));
|
||||
Normal = aNormal;
|
||||
|
||||
TexCoords = aTexCoords;
|
||||
gl_Position = projection * view * model * vec4(aPos, 1.0);
|
||||
gl_Position = projection * view * vec4(FragPos, 1.0);
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user