Issue 107500 - Transparency in 3D charts is wrong
Summary: Transparency in 3D charts is wrong
Status: CLOSED FIXED
Alias: None
Product: General
Classification: Code
Component: chart (show other issues)
Version: 3.3.0 or older (OOo)
Hardware: All All
: P3 Trivial (vote)
Target Milestone: ---
Assignee: wolframgarten
QA Contact: issues@graphics
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-12-07 15:28 UTC by niklas.nebel
Modified: 2017-05-20 11:41 UTC (History)
2 users (show)

See Also:
Issue Type: DEFECT
Latest Confirmation in: ---
Developer Difficulty: ---


Attachments
Example file (118.35 KB, application/vnd.oasis.opendocument.spreadsheet)
2009-12-07 15:29 UTC, niklas.nebel
no flags Details

Note You need to log in before you can comment on or make changes to this issue.
Description niklas.nebel 2009-12-07 15:28:28 UTC
See the example file. The left chart has the series in default order, and the
transparency looks like it's evaluated from back to front. In the right chart
the 3D view was rotated 180 degrees and the series and axis inverted, then the
order looks right.
Comment 1 niklas.nebel 2009-12-07 15:29:48 UTC
Created attachment 66537 [details]
Example file
Comment 2 IngridvdM 2009-12-07 15:38:00 UTC
iha->aw: this looks like a problem with the rendering engine, please evaluate.
Comment 3 Armin Le Grand 2009-12-07 17:41:34 UTC
AW: Interesting effect. Need to take a closer look at what the default renderer
does here. It's a Z-Buffer, so the mix of transparent parts should be
independent from the order of rendering.
Comment 4 Armin Le Grand 2010-01-06 10:33:06 UTC
AW: Reason is the standard ZBuffer technique. For overlapping transparent
geometry, it gets necessary to paint from back to front, after all
non-transparent were painted.
To do so there are two possibilities: (a) remember all transparent pixels and
solve them after rendereiung or (b) remember all transparent geometries and
render them Z-sorted after all non-transparent.
It makes no sense to do two rendering runs (as currently used) since the 2nd run
for transparent paint also would need to remember all geometry and sort in Z,
thus (b) is the logical consequence.
I first tried (a) since it would have been easier to implement, but in normal
scenes easily 5 mio pixels need to be remembered. For a pixel with 12bytes
(X,Y,Z,color,opacity) this gets to expensive.
Thus i had to implement (b) what is not trivial since the current state
including texturing and transparent texturing for each transparent geometry
needs to be buffered. To do so, i moved the texture::GeoTexSvx usages in
DefaultProcessor3D to refcounted using boost::shared_ptr and adapting  all
usages consequently.
Works now as intended. The only extra requirements are some more memory (only
little compared to (a)) and one sort for Z.
Comment 5 Armin Le Grand 2010-01-06 10:40:41 UTC
Okay, done.
Comment 6 Armin Le Grand 2010-02-12 10:56:52 UTC
AW->WG: Please verify as described.
Comment 7 wolframgarten 2010-02-15 09:57:24 UTC
Target adapted.
Comment 8 wolframgarten 2010-02-15 09:58:39 UTC
Target adapted.
Comment 9 wolframgarten 2010-02-15 13:52:28 UTC
Verified in CWS.