[gl2ps] Problem with BSP printing (reason found)

Shahzad MUZAFFAR Shahzad.Muzaffar at cern.ch
Tue Feb 14 18:15:26 CET 2006


yes this should be the precision loss. I have tried to change minZ, 
maxZ, rangeZ, scaleZ to double but still results are not correct. cheers,
--Shahzad

Christophe Geuzaine wrote:

> 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
>>
>
>