This commit is contained in:
2024-01-28 18:01:57 -05:00
parent 15555a2493
commit 1eb8f0e2c7
4 changed files with 69 additions and 8 deletions

View File

@@ -41,13 +41,29 @@ public:
class World : public DataModel {
private:
LinearAlgebra::Vector4 globalLight= {0,0,0,0};
LinearAlgebra::Vector4 globalLightColor = {0, 0, 0, 0};
LinearAlgebra::Vector4 globalFogColor = {0, 0, 0, 0};
LinearAlgebra::Vector2 globalFogRange = {0, 0};
GLenum globalFogMode = NULL; //There's Linear, GL_EXP, GL_EXP2.
GLfloat globalFogDensity = 0.0f;
public:
World() : DataModel() {}
void setAmbientLight(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
LinearAlgebra::Vector4 getAmbientLight();
void setAmbientLightColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
void setGlobalFogColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
void setGlobalFogRange(GLfloat start, GLfloat end);
void setGlobalFogDensity(GLfloat density);
void setGlobalFogMode(GLenum mode);
GLenum getGlobalFogMode();
LinearAlgebra::Vector4 getGlobalFogColor();
LinearAlgebra::Vector2 getGlobalFogRange();
LinearAlgebra::Vector4 getAmbientLightColor();
GLfloat getGlobalFogDensity();
std::string name;
std::vector<VertexArray> geometryList;
std::vector<Texture> textureList;
std::vector<Shader> shaderList;
};

View File

@@ -27,7 +27,7 @@ void Render::pre_render() {
skybox->draw = true;
skybox->angle = {0,0,0};
skybox->SetParent(engine->world);
engine->world->setAmbientLight(0.6, 0.6, 0.6, 1);
engine->world->setAmbientLightColor(0.6, 0.6, 0.6, 1);
Shader test;
test.name = "test";

View File

@@ -116,12 +116,51 @@ Entity *Entity::GetFamilyTreeRoot() const {
return parent->GetFamilyTreeRoot();
}
void World::setAmbientLight(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {
void World::setAmbientLightColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {
GLfloat ambient[4] = {red, green, blue, alpha};
globalLight.x = red; globalLight.y = green; globalLight.z = blue; globalLight.w = alpha;
globalLightColor.x = red; globalLightColor.y = green; globalLightColor.z = blue; globalLightColor.w = alpha;
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
}
LinearAlgebra::Vector4 World::getAmbientLight() {
return globalLight;
LinearAlgebra::Vector4 World::getAmbientLightColor() {
return globalLightColor;
}
void World::setGlobalFogColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {
GLfloat fog[4] = {red, green, blue, alpha};
glFogfv(GL_FOG_COLOR, fog);
globalFogColor.x = red; globalFogColor.y = green; globalFogColor.z = blue; globalFogColor.w = alpha;
}
LinearAlgebra::Vector4 World::getGlobalFogColor() {
return globalFogColor;
}
void World::setGlobalFogRange(GLfloat start, GLfloat end) {
glFogf(GL_FOG_START, start);
glFogf(GL_FOG_END, end);
globalFogRange = {start, end};
}
LinearAlgebra::Vector2 World::getGlobalFogRange() {
return globalFogRange;
}
void World::setGlobalFogMode(GLenum mode) {
glFogi(GL_FOG_MODE, mode);
globalFogMode = mode;
}
GLenum World::getGlobalFogMode() {
return globalFogMode;
}
GLfloat World::getGlobalFogDensity() {
return globalFogDensity;
}
void World::setGlobalFogDensity(GLfloat density) {
glFogf(GL_FOG_DENSITY, density);
globalFogDensity = density;
}

View File

@@ -153,6 +153,10 @@ void Entity::render() {
glPushMatrix();
if (cameraInside)
glCullFace(GL_FRONT);
if (engine->world->getGlobalFogMode() == NULL || getGeometry()->name == "skybox")
glDisable(GL_FOG);
glTranslatef(position.x ,position.y,position.z);
glRotatef(angle.x,1.0f, 0.0f, 0.0f);
glRotatef(angle.y,0.0f, 1.0f, 0.0f);
@@ -176,4 +180,6 @@ void Entity::render() {
glPopMatrix();
}
if (engine->world->getGlobalFogMode() != NULL)
glEnable(GL_FOG);
}