Skip to content

Commit

Permalink
added fog position
Browse files Browse the repository at this point in the history
Signed-off-by: Perminder <[email protected]>
  • Loading branch information
perminder-17 committed Jun 23, 2024
1 parent d646a24 commit f16ad2d
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 22 deletions.
8 changes: 6 additions & 2 deletions avogadro/rendering/solid_first_fs.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ uniform float inAoStrength;
uniform float inFogStrength;
// 1.0 if enabled, 0.0 if disabled
uniform float inEdStrength;
// offset for zoom-in and zoom-out
uniform float uoffset;
// position for other molecules.
uniform float inFogPosition;
// Rendering surface dimensions, in pixels
uniform float width, height;

Expand Down Expand Up @@ -81,8 +85,8 @@ vec4 applyFog(vec2 texCoord) {
vec4 finalColor = mix(
texture2D(inRGBTex, texCoord),
vec4(vec3(fogR, fogG, fogB), 1.),
pow(texture2D(inDepthTex, texCoord.xy).r + inFogStrength, offset)
);
pow(texture2D(inDepthTex, texCoord.xy).r, uoffset * inFogPosition/10.0)
) + inFogStrength / 100.0;
return finalColor;
}

Expand Down
37 changes: 17 additions & 20 deletions avogadro/rendering/solidpipeline.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ void initializeFramebuffer(GLuint* outFBO, GLuint* texRGB, GLuint* texDepth)

SolidPipeline::SolidPipeline()
: m_pixelRatio(1.0f), m_aoEnabled(true), m_aoStrength(1.0f),
m_fogStrength(1.0f), m_fogEnabled(true), m_edEnabled(true), m_edStrength(1.0f),
m_fogStrength(1.0f), m_fogPosition(1.0), m_fogEnabled(true), m_edEnabled(true), m_edStrength(1.0f),
m_width(0), m_height(0), d(new Private), m_backgroundColor(0,0,0,0)
{
}
Expand Down Expand Up @@ -160,37 +160,34 @@ void SolidPipeline::end()
d->depthTexture, m_width, m_height);
d->firstStageShaders.setUniformValue("inAoEnabled", m_aoEnabled ? 1.0f : 0.0f);
d->firstStageShaders.setUniformValue("inAoStrength", m_aoStrength);
d->firstStageShaders.setUniformValue("inFogStrength", ((m_fogStrength / 100.0f)- 0.01f));
d->firstStageShaders.setUniformValue("inFogStrength", (m_fogStrength));
d->firstStageShaders.setUniformValue("inEdStrength", m_edStrength);
d->firstStageShaders.setUniformValue("inFogEnabled", m_fogEnabled ? 1.0f : 0.0f);
d->firstStageShaders.setUniformValue("inFogPosition", m_fogPosition);
d->firstStageShaders.setUniformValue("fogR", (m_backgroundColor[0])/255.0f);
d->firstStageShaders.setUniformValue("fogG", (m_backgroundColor[1])/255.0f);
d->firstStageShaders.setUniformValue("fogB", (m_backgroundColor[2])/255.0f);
glDrawArrays(GL_TRIANGLES, 0, 6);

// std::cout<<m_fogStrength<<std::endl;
glDisableVertexAttribArray(0);
}

// TODO: More precise calculations needed
void SolidPipeline::adjustOffset(const Camera& cam) {
// Get the model-view matrix from the camera
Eigen::Matrix4f modelView = cam.modelView().matrix();

// Extract the relevant value from the matrix
float zTranslation = modelView(2, 3);

// Adjust offSet based on its value
float offSet = -zTranslation * 2.4;

if (offSet > 200 && offSet < 700) {
offSet = std::pow(1.5, -zTranslation / 10) + 300;
}
if (offSet > 700) {
offSet = -zTranslation * 6;

//since it's a workaround, I feel like I can optimize it more.
Eigen::Matrix4f projectView = cam.projection().matrix();

float project = ((((5000 + projectView(2,3) * 1000)/6) + 55) * 100);

float offSet = 0.000102337 * pow(project,2) - 3.84689 * project + 36182.2;
if(project >= 21018.106 && project<21595.588){
offSet = 2.63129 * project - 54768.4;
}
else if(project >= 21595.588 ){
offSet = 9.952 * project - 212865;
}

// Set the uniform value in the shader
d->firstStageShaders.setUniformValue("offset", offSet);
d->firstStageShaders.setUniformValue("uoffset", offSet);

}

Expand Down
7 changes: 7 additions & 0 deletions avogadro/rendering/solidpipeline.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,12 @@ class SolidPipeline
float getFogStrength() { return m_fogStrength; }
void setFogStrength(float strength) { m_fogStrength = strength; }

/**
* @brief Get or set fog position
*/
float getFogPosition(){ return m_fogPosition;}
void setFogPosition(float position) { m_fogPosition = position; }

/**
* @brief Get or set whether Edge Detection is enabled.
*/
Expand All @@ -98,6 +104,7 @@ class SolidPipeline
private:
float m_pixelRatio;
bool m_aoEnabled;
float m_fogPosition;
Vector4ub m_backgroundColor;
Eigen::Affine3f modelView;
bool m_fogEnabled;
Expand Down

0 comments on commit f16ad2d

Please sign in to comment.