Fix depth testing for transparent objects #1643
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary:
This PR fixes the issue that a transparent object is sometimes not displayed when it's behind another transparent object, which is not captured by #1414. It's fixed by two changes. Firstly, set OSG to render transparent objects after opaque objects using
setRenderingHint()
(see: this post). Secondly, disable z-buffer writing while enabling z-buffer testing during drawing transparent objects so transparent objects don't get rendered when they're behind opaque object but always rendered (with blending) even when they're overlapped with other transparent objects regardless of their z-depths. See this post.Not fixed by this PR:
Fixing for
VoxelShape
is saved for the future PR. Also, there could be performance hit for MeshShape when the color mode isCOLOR_INDEX
.Before the fix:
After the fix:
Before creating a pull request
make format
-DDART_TREAT_WARNINGS_AS_ERRORS=ON
and resolve all the compile warningsBefore merging a pull request
CHANGELOG.md