gazebosim/gz-common

Collada <transparency> setting

Aperta

#229 aperta il 12 lug 2021

 (0 commenti) (0 reazioni) (0 assegnatari)C++ (59 fork)auto 404
bughelp wanted

Metriche repository

Star
 (28 stelle)
Metriche merge PR
 (Metriche PR in attesa)

Descrizione

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

Guida contributor