mirror of
https://github.com/Linloir/SceneEditor.git
synced 2025-12-17 07:28:12 +08:00
add interface in sceneviewer
This commit is contained in:
parent
f26402461a
commit
f62b15eabd
@ -11,6 +11,7 @@ Illuminant::Illuminant(){
|
|||||||
Illuminant::Illuminant(glm::vec3 position, LightType lightType){
|
Illuminant::Illuminant(glm::vec3 position, LightType lightType){
|
||||||
_position = position;
|
_position = position;
|
||||||
setType(lightType);
|
setType(lightType);
|
||||||
|
Logger::info("55555555555");
|
||||||
}
|
}
|
||||||
// set up with one color
|
// set up with one color
|
||||||
Illuminant::Illuminant(glm::vec3 position, glm::vec3 color, LightType lightType){
|
Illuminant::Illuminant(glm::vec3 position, glm::vec3 color, LightType lightType){
|
||||||
@ -19,6 +20,7 @@ Illuminant::Illuminant(glm::vec3 position, glm::vec3 color, LightType lightType)
|
|||||||
_diffuse = color * 0.8f;
|
_diffuse = color * 0.8f;
|
||||||
_specular = color;
|
_specular = color;
|
||||||
setType(lightType);
|
setType(lightType);
|
||||||
|
Logger::info("4444444444444444444");
|
||||||
}
|
}
|
||||||
//set up by assign all colors
|
//set up by assign all colors
|
||||||
Illuminant::Illuminant(glm::vec3 position, glm::vec3 ambient,
|
Illuminant::Illuminant(glm::vec3 position, glm::vec3 ambient,
|
||||||
@ -28,7 +30,9 @@ Illuminant::Illuminant(glm::vec3 position, glm::vec3 ambient,
|
|||||||
_diffuse = diffuse;
|
_diffuse = diffuse;
|
||||||
_specular = specular;
|
_specular = specular;
|
||||||
setType(lightType);
|
setType(lightType);
|
||||||
|
Logger::info("333333333333333");
|
||||||
}
|
}
|
||||||
|
|
||||||
// set up with one color,建议平行光源使用这个
|
// set up with one color,建议平行光源使用这个
|
||||||
Illuminant::Illuminant(LightType lightType, glm::vec3 direction, glm::vec3 color) {
|
Illuminant::Illuminant(LightType lightType, glm::vec3 direction, glm::vec3 color) {
|
||||||
_direction = direction;
|
_direction = direction;
|
||||||
@ -36,6 +40,7 @@ Illuminant::Illuminant(LightType lightType, glm::vec3 direction, glm::vec3 color
|
|||||||
_diffuse = color * 0.8f;
|
_diffuse = color * 0.8f;
|
||||||
_specular = color;
|
_specular = color;
|
||||||
setType(lightType);
|
setType(lightType);
|
||||||
|
Logger::info("22222222222222222");
|
||||||
}
|
}
|
||||||
|
|
||||||
// set up with one color,建议聚光灯光源使用这个
|
// set up with one color,建议聚光灯光源使用这个
|
||||||
@ -46,6 +51,7 @@ Illuminant::Illuminant(glm::vec3 position, glm::vec3 direction, glm::vec3 color,
|
|||||||
_diffuse = color * 0.8f;
|
_diffuse = color * 0.8f;
|
||||||
_specular = color;
|
_specular = color;
|
||||||
setType(lightType);
|
setType(lightType);
|
||||||
|
Logger::info("1111111111111111111");
|
||||||
}
|
}
|
||||||
|
|
||||||
Illuminant::~Illuminant() {
|
Illuminant::~Illuminant() {
|
||||||
@ -119,6 +125,7 @@ void Illuminant::setType(LightType type){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Illuminant::updateLight(ShaderProgram& shader) {
|
void Illuminant::updateLight(ShaderProgram& shader) {
|
||||||
|
lastShader = &shader;
|
||||||
if (_lightType == dir) {
|
if (_lightType == dir) {
|
||||||
// directional light
|
// directional light
|
||||||
shader.setUniform("dirLight.direction", _direction);
|
shader.setUniform("dirLight.direction", _direction);
|
||||||
@ -170,17 +177,14 @@ void init_queue() {
|
|||||||
Logger::info("23533423q543");
|
Logger::info("23533423q543");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
double r = 1;
|
|
||||||
|
|
||||||
// 初始设置所有变量
|
// 如果uniform变量没有被设置,可能会出现不可预知的后果!
|
||||||
void setAllLigntUniform(ShaderProgram& shader) {
|
void setAllLigntUniform(ShaderProgram& shader) {
|
||||||
r = r + 1;
|
|
||||||
double rr = sin(r / 20)*8;
|
|
||||||
|
|
||||||
shader.setUniform("dirLight.direction",0,1,0);
|
shader.setUniform("dirLight.direction",0,0,-1);
|
||||||
shader.setUniform("dirLight.ambient", 0.0f, 0.0f, 0.0f);
|
shader.setUniform("dirLight.ambient", 0.1f, 0.1f, 0.1f);
|
||||||
shader.setUniform("dirLight.diffuse", 0.0f, 100.0f, 220.0f);
|
shader.setUniform("dirLight.diffuse", 0.0f, 0.0f, 0.0f);
|
||||||
shader.setUniform("dirLight.specular", 00.0f, 0.0f, 0.0f);
|
shader.setUniform("dirLight.specular", 0.0f, 0.0f, 0.0f);
|
||||||
// point light 1
|
// point light 1
|
||||||
|
|
||||||
shader.setUniform("pointLights[0].position", 0, 0, 0);
|
shader.setUniform("pointLights[0].position", 0, 0, 0);
|
||||||
|
|||||||
@ -16,7 +16,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
LightType _lightType = dir;
|
LightType _lightType = dir;
|
||||||
|
|
||||||
glm::vec3 _direction = glm::vec3(0,2,-1);
|
glm::vec3 _direction = glm::vec3(0,0,-1);
|
||||||
glm::vec3 _position = glm::vec3(0.0f);
|
glm::vec3 _position = glm::vec3(0.0f);
|
||||||
glm::vec3 _ambient = glm::vec3(0.05f, 0.05f, 0.05f);
|
glm::vec3 _ambient = glm::vec3(0.05f, 0.05f, 0.05f);
|
||||||
glm::vec3 _diffuse = glm::vec3(0.8f, 0.8f, 0.8f);
|
glm::vec3 _diffuse = glm::vec3(0.8f, 0.8f, 0.8f);
|
||||||
|
|||||||
@ -21,7 +21,6 @@ void copyFile(std::string name) {
|
|||||||
SceneViewer::SceneViewer(QWidget* parent)
|
SceneViewer::SceneViewer(QWidget* parent)
|
||||||
: QOpenGLWidget(parent)
|
: QOpenGLWidget(parent)
|
||||||
{
|
{
|
||||||
_illuminants.push_back(Illuminant());
|
|
||||||
QSurfaceFormat format;
|
QSurfaceFormat format;
|
||||||
format.setProfile(QSurfaceFormat::CoreProfile);
|
format.setProfile(QSurfaceFormat::CoreProfile);
|
||||||
format.setVersion(4, 3);
|
format.setVersion(4, 3);
|
||||||
@ -82,7 +81,12 @@ void SceneViewer::initializeGL() {
|
|||||||
setAllLigntUniform(_shaderProgram);
|
setAllLigntUniform(_shaderProgram);
|
||||||
init_queue();
|
init_queue();
|
||||||
// ÉèÖùâÕÕ
|
// ÉèÖùâÕÕ
|
||||||
|
addDirLight(glm::vec3(0.3, 0.5, -1), glm::vec3(0.2, 0.1, 0.2));
|
||||||
|
addSpotLight(glm::vec3(0.3, 0.5, -1), glm::vec3(-0.3, -0.5, 3), glm::vec3(0.2, 1, 0.1));
|
||||||
|
addPointLight(glm::vec3(0.5, 0.9, 0.4), glm::vec3(1, 0.2, 0.4));
|
||||||
|
addPointLight(glm::vec3(-0.3, -0.9, 0.4), glm::vec3(0, 0.2, 0.9));
|
||||||
|
//deleteLight(1);
|
||||||
|
|
||||||
|
|
||||||
Model* backpackModel = new Model("D:\\code\\ComputerGraphic\\backpack\\backpack.obj");
|
Model* backpackModel = new Model("D:\\code\\ComputerGraphic\\backpack\\backpack.obj");
|
||||||
Logger::info("Model loaded");
|
Logger::info("Model loaded");
|
||||||
@ -212,4 +216,7 @@ void SceneViewer::addPointLight(glm::vec3 position, glm::vec3 color) {
|
|||||||
}
|
}
|
||||||
void SceneViewer::addSpotLight(glm::vec3 direction, glm::vec3 position, glm::vec3 color) {
|
void SceneViewer::addSpotLight(glm::vec3 direction, glm::vec3 position, glm::vec3 color) {
|
||||||
_illuminants.push_back(Illuminant(position,direction, color, Illuminant::LightType::spot));
|
_illuminants.push_back(Illuminant(position,direction, color, Illuminant::LightType::spot));
|
||||||
|
}
|
||||||
|
void SceneViewer::deleteLight(int index) {
|
||||||
|
_illuminants.erase(_illuminants.begin() + index);
|
||||||
}
|
}
|
||||||
@ -48,6 +48,8 @@ public:
|
|||||||
void addDirLight(glm::vec3 direction, glm::vec3 color);
|
void addDirLight(glm::vec3 direction, glm::vec3 color);
|
||||||
void addPointLight(glm::vec3 position, glm::vec3 color);
|
void addPointLight(glm::vec3 position, glm::vec3 color);
|
||||||
void addSpotLight(glm::vec3 direction,glm::vec3 position, glm::vec3 color);
|
void addSpotLight(glm::vec3 direction,glm::vec3 position, glm::vec3 color);
|
||||||
|
// 删除给定的数组下标
|
||||||
|
void deleteLight(int index);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// OpenGL functions
|
// OpenGL functions
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user