[gl2ps] Problem with BSP printing (reason found)

Shahzad MUZAFFAR Shahzad.Muzaffar at cern.ch
Wed Feb 15 09:12:39 CET 2006


Hello,
  I have tested this and results are correct for our tests. Cheers,
--Shahzad

Christophe Geuzaine wrote:

> Shahzad MUZAFFAR wrote:
>
>> 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,
>
>
> Sounds good. I have added the two "fixes" in the code. Could you give
> this version a try
>
> http://www.geuz.org/gl2ps/src/gl2ps-nightly.tgz
>
> and let me know if it works OK on all your test cases? If it does, I 
> will release gl2ps 1.2.7 with the corrections.
>
> Thanks again!
>
> Christophe
>
>
>
>> --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
>>>>
>>>
>> _______________________________________________
>> gl2ps mailing list
>> gl2ps at geuz.org
>> http://www.geuz.org/mailman/listinfo/gl2ps
>>
>
>