Fix support for transparent models

This commit is contained in:
Malin E
2022-11-14 10:27:20 +01:00
parent d81a242bfc
commit 2cd09de2fa
5 changed files with 17 additions and 12 deletions

View File

@@ -497,6 +497,8 @@ RenderableModel::RenderableModel(const ghoul::Dictionary& dictionary)
_enableOpacityBlending = p.enableOpacityBlending.value_or(_enableOpacityBlending);
addProperty(_enableOpacityBlending);
_originalRenderBin = renderBin();
}
bool RenderableModel::isReady() const {
@@ -794,7 +796,7 @@ void RenderableModel::render(const RenderData& data, RendererTasks&) {
setRenderBin(Renderable::RenderBin::PostDeferredTransparent);
}
else {
setRenderBin(Renderable::RenderBin::Opaque);
setRenderBin(_originalRenderBin);
}
_geometry->render(*_program);

View File

@@ -126,6 +126,9 @@ private:
ghoul::opengl::ProgramObject* _quadProgram = nullptr;
UniformCache(opacity, opacityBlending, colorTexture, depthTexture, positionTexture,
normalTexture) _uniformOpacityCache;
// Store the original RenderBin
Renderable::RenderBin _originalRenderBin;
};
} // namespace openspace

View File

@@ -49,7 +49,7 @@ Fragment getFragment() {
frag.color.a = opacity * max(max(frag.color.r, frag.color.g), frag.color.b);
}
else {
frag.color.a = opacity;
frag.color.a = opacity * textureColor.a;
}
frag.depth = denormalizeFloat(texture(depthTexture, vs_st).x);

View File

@@ -42,8 +42,8 @@ uniform bool has_color_specular;
uniform sampler2D texture_diffuse;
uniform sampler2D texture_normal;
uniform sampler2D texture_specular;
uniform vec3 color_diffuse;
uniform vec3 color_specular;
uniform vec4 color_diffuse;
uniform vec4 color_specular;
uniform int nLightSources;
uniform vec3 lightDirectionsViewSpace[8];
uniform float lightIntensities[8];
@@ -70,9 +70,9 @@ Fragment getFragment() {
return frag;
}
vec3 diffuseAlbedo;
vec4 diffuseAlbedo;
if (has_texture_diffuse) {
diffuseAlbedo = texture(texture_diffuse, vs_st).rgb;
diffuseAlbedo = texture(texture_diffuse, vs_st);
}
else {
diffuseAlbedo = color_diffuse;
@@ -87,7 +87,7 @@ Fragment getFragment() {
}
else {
if (has_color_specular) {
specularAlbedo = color_specular;
specularAlbedo = color_specular.rgb ;
}
else {
specularAlbedo = vec3(1.0);
@@ -110,7 +110,7 @@ Fragment getFragment() {
vec3 c = normalize(vs_positionCameraSpace.xyz);
vec3 color = ambientIntensity * lightColorAmbient * diffuseAlbedo;
vec3 color = ambientIntensity * lightColorAmbient * diffuseAlbedo.rgb;
for (int i = 0; i < nLightSources; ++i) {
vec3 l = lightDirectionsViewSpace[i];
@@ -121,7 +121,7 @@ Fragment getFragment() {
const float specularPower = 100.0;
vec3 diffuseColor =
diffuseIntensity * lightColor * diffuseAlbedo * max(diffuseCosineFactor, 0);
diffuseIntensity * lightColor * diffuseAlbedo.rgb * max(diffuseCosineFactor, 0);
vec3 specularColor =
specularIntensity * lightColor * specularAlbedo *
@@ -132,10 +132,10 @@ Fragment getFragment() {
frag.color.rgb = color;
}
else {
frag.color.rgb = diffuseAlbedo;
frag.color.rgb = diffuseAlbedo.rgb;
}
frag.color.a = 1.0;
frag.color.a = diffuseAlbedo.a;
frag.depth = vs_screenSpaceDepth;
frag.gPosition = vs_positionCameraSpace;
frag.gNormal = vec4(vs_normalViewSpace, 0.0);