mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-02-28 16:09:46 -06:00
Fix support for transparent models
This commit is contained in:
Submodule ext/ghoul updated: df84293686...538b0aef98
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user