[gl2ps] Problem with BSP printing (reason found)

Christophe Geuzaine christophe.geuzaine at case.edu
Tue Feb 14 15:49:09 CET 2006


Shahzad MUZAFFAR wrote:
> I have test the fix you have provided and that works but not for scene 
> graphs which are very far from the camera. I have put the generated eps 
> file here
> 
> 1) The actual scene.
>   http://cmsdoc.cern.ch/~muzaffar/gl2ps/actual.eps
> 
> 2) With fix you have provided
>   http://cmsdoc.cern.ch/~muzaffar/gl2ps/with_fix_from_C.Geuzaine.eps
>   If you zoom in a lot (zoom 64x64) using the ghostview then you will 
> noticed that some triangles should not be seen.
> 
> - With fix you have provided + limiting the scaleZ to be max of 100000
>   
> http://cmsdoc.cern.ch/~muzaffar/gl2ps/with_fix_from_C.Geuzaine_AndscaleZ100000.eps
>   And here if you zoom in then scene looks the actual one.

I see. I'm not sure I fully understand, though: do you think it's simply 
due to the precision loss from using floats (instead of double precision)?


> 
> Cheers,
> --Shahzad
> 
> Christophe Geuzaine wrote:
> 
>> Shahzad MUZAFFAR wrote:
>>
>>> Hello,
>>>   I have already mentioned (in one of my previous email) about the 
>>> problem with BSP printing not working properly in 1.2.3 and up 
>>> releases (i.e. printing in reverse order). I think I have found the 
>>> reason. The problem is in the gl2psRescaleAndOffset() method. The 
>>> problem occurs when the scaleZ becomes > 100000. Because at scaleZ > 
>>> 100000 the z-coordinates of all primitive become > 100000 which is 
>>> above the EYE set in the gl2psPrintPrimitives() method. Thats why we 
>>> see eps/pdf files printed in reverse order.
>>>  
>>> I have added this line in gl2psRescaleAndOffset() method
>>>
>>> if (scaleZ > 100000.F) scaleZ=100000;
>>>
>>> to force the Z scaling. And now printing works properly. Cheers,
>>
>> I see... The root of the problem is that I forgot to subtract the minZ 
>> coordinate in the rescaling! I think the "real" fix should thus be to 
>> replace
>>
>> prim->verts[j].xyz[2] = prim->verts[j].xyz[2] * scaleZ;
>>
>> with
>>
>> prim->verts[j].xyz[2] = (prim->verts[j].xyz[2] - minZ) * scaleZ;
>>
>> This way the z-buffer coordinate will be in [0, GL2PS_ZSCALE] (that's 
>> what was intended). Could you try this alternative fix and tell me if 
>> it also fixes the bug?
>>
>> Many thanks!
>>
>> Christophe
>>
>>
>>> --Shahzad Muzaffar
>>> _______________________________________________
>>> gl2ps mailing list
>>> gl2ps at geuz.org
>>> http://www.geuz.org/mailman/listinfo/gl2ps
>>>
>>
> _______________________________________________
> gl2ps mailing list
> gl2ps at geuz.org
> http://www.geuz.org/mailman/listinfo/gl2ps
> 


-- 
Christophe Geuzaine
Assistant Professor, Case Western Reserve University, Mathematics
http://www.case.edu/artsci/math/geuzaine