Fog
This commit is contained in:
@@ -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;
|
||||
|
||||
};
|
||||
|
@@ -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";
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user