[PD] [GEM] weird rendering order problem

IOhannes m zmoelnig zmoelnig at iem.at
Fri Jul 4 09:39:34 CEST 2008


Jaime Oliver wrote:
> 
> Hello all,
> 
> I have a very strange problem in rendering order. I have several 
> textured polygons in render orders from 11-35 and a big textured polygon 
> on top with a higher number gemhead, but for some reason it doesn't show 
> on top. I have tried it in a big fat patch (where it fails) and in a 
> simple patch where it succeeds. I also tried in the big fat patch, 
> having everything with positive numbers and the one i want on top with 
> negative rendering numbers, but still doesn't work.
> 
> What could be causing this?:

luckily rendering later does not guarantee that things are drawn on top 
of others.
imagine a cube and behind (that is: hidden by) the cube there is a 
teapot. if drawing the teapot later would always draw it on top of the 
cube, it would be significantly more complicated (than it is now) to 
make more complex 3D-scenes. just think models that mutually occlude 
parts of each other....

the way this is solved in openGL is to use depth maps.
whenever a fragment is drawn, it's depth value (position at the Z-axis) 
is stored in a separate buffer.
when a new fragment is to be drawn it is first checked, whether there is 
already a fragment drawn at the same x/y position that is closer to the 
camera (and thus should occlude the newly generated fragment).
if so, the new fragment is discarded.

since your "top polygon" is obviously *not* in front of the other 
polygons, it will be occluded by them so you don't see it. (if they are 
actually at the same depth, you might get weird artefacts).

this is probably crucial information if you want to mess with render-order.



anyhow, there are 2 solutions for your problem:
1. just make sure that the "top polygon" is in front of all the rest 
(e.g. using [translateXYZ])
this might work ok for flat shapes without penetration.
2. disable the depth-test before drawing your polygon. this can be done 
with the [depth] object (which _disables_ depth-test by default)

which solution is preferrably depends on the situation.
if you want to make sure something is rendered to the screen (like an 
on-screen-display), the 2nd solution is the one to go.


fgkasdr
IOhannes




More information about the Pd-list mailing list