gazebosim/gz-common

Collada <transparency> setting

Open

#229 opened on Jul 12, 2021

View on GitHub
 (0 comments) (0 reactions) (0 assignees)C++ (59 forks)auto 404
bughelp wanted

Repository metrics

Stars
 (28 stars)
PR merge metrics
 (PR metrics pending)

Description

Environment

  • OS Version: Ubuntu 18.04
  • Source or binary build? both - all versions

Description

The transparency result is different between Ignition ColladaLoader and threejs's CollaLoader if <transparency> tag is present, and <transparent> tag is missing, e.g. the follow tag produces an opaque mesh in Ignition but a transparent mesh in threejs:

            <transparency>
              <float sid="transparency">0.000000</float>
            </transparency>

Looking at the collada spec (pdf) spec, the default mode should be A_ONE. The current code sets transparency in the following way:

      dstFactor = 1.0 - color.A() * transparency;
      srcFactor = color.A() * transparency;
      _mat->SetTransparency(dstFactor);

This should produce a transparency value of 1.0 which means fully transparent.

Other notes

_mat->SetTransparency(dstFactor); is a bit confusing since srcFactor is the one that corresponds to the object's material opacity. However, the math works out to be correct because:

transparency = 1.0 - opacity
             = 1.0 - srcFactor
             = dstFactor

Contributor guide