Hi Robert,
With the version in the svn it works as expected.
thank you
Cedric
Robert Osfield wrote:
> Hi Cedric,
>
> Thanks for the data, I've now been able to recreate the problem you've
> seen using:
>
> osgviewer --dem dtm_200m.tif.gdal lines.shp
>
> And have reviewed your changes, but decided to rewrite the setup of
> the HeightField coordinates so that it works correctly and supports
> rotation of the data in the GDAL geotransform includes it. The above
> now works just fine too. This is now checked into SVN.
>
> Could you check out svn and let me know if things are working fine at
> your end as well.
>
> Robert.
>
> On Dec 12, 2007 10:30 AM, Cedric Pinson <[EMAIL PROTECTED]> wrote:
>
>> Hi Robert,
>>
>> Here two files that must be at the same locations. the dtm.tif is loaded
>> with the plugin gdal and lines.shp is loaded with the standard
>> plugin.
>>
>> Cheers Cedric
>>
>>
>>
>>> Thanks for explanation. The invert of the data is to go from GDAL
>>> default of top left orign, to bottom left origin that OpenGL/OSG use.
>>>
>>> Could you send me the data you had problems with an I'll have a bash
>>> at reproducing the problem at my end.
>>>
>>> Robert.
>>>
>>> On Dec 11, 2007 3:16 PM, Cedric Pinson <[EMAIL PROTECTED]> wrote:
>>>
>>>
>>>> I read the georeferenced tiff with this plugin it return me an
>>>> osg::HeightField
>>>> then i use it like that:
>>>>
>>>> osg::ref_ptr<osg::ShapeDrawable> shape = new
>>>> osg::ShapeDrawable(heightField);
>>>> {
>>>> MyTriangulatorForDisplay triangulator;
>>>> shape->accept(triangulator);
>>>> triangulator.postProcess();
>>>> _geometry = triangulator._geometry;
>>>> }
>>>>
>>>> so the i passe in void PrimitiveShapeVisitor::apply(const HeightField&
>>>> field) that call my functor below.
>>>> It's ok for that just the result is not what it should be i mean
>>>> vertexes position are not where they would be.
>>>> From the gdal documentation http://www.gdal.org/gdal_tutorial.html
>>>>
>>>> adfGeoTransform[0] /* top left x */
>>>> adfGeoTransform[1] /* w-e pixel resolution */
>>>> adfGeoTransform[2] /* rotation, 0 if image is "north up" */
>>>> adfGeoTransform[3] /* top left y */
>>>> adfGeoTransform[4] /* rotation, 0 if image is "north up" */
>>>> adfGeoTransform[5] /* n-s pixel resolution */
>>>>
>>>> and in the original plugin at line 679 there is TopLeft[1] =
>>>> geoTransform[1]; so it's not the good index it should be geoTransform[3];
>>>> because geoTransform[1] is the w-e pixel resolution. So i just fixed the
>>>> topLeft position.
>>>>
>>>> Then the other fix is the setOrigin . the original version switch the
>>>> corner of the origin, i think it was done to have the computation of
>>>> normal and the triangle in counter clockwize. But it does not work, i
>>>> imagine it works for special case because value from TopLeft are bad and
>>>> other value are computed with it.
>>>>
>>>> hf->setOrigin(osg::Vec3(BottomLeft[0],-BottomLeft[1],0));
>>>>
>>>>
>>>> So i change it to have the good origin (top left x, and bottom left y),
>>>> and the pixel delta are taken from the georeference data but i change
>>>> the sign of y pixel delta because the corner is not on the top but on
>>>> the bottom to have triangle in counter clockwize. (the -100 in my
>>>> version is a mistake from a test, it should be 0)
>>>>
>>>> hf->setOrigin(osg::Vec3(TopLeft[0],BottomLeft[1],-100));
>>>> hf->setXInterval(geoTransform[1]); the pixel in x
>>>> hf->setYInterval(-geoTransform[5]); the pixel in y
>>>>
>>>> and the x, y interval are taken from the geotransform.
>>>>
>>>> I imagine the original version worked but not for a georeferenced tiff
>>>> in a arbitrary location. I can't send you the data i used to test. I
>>>> hope there is enough
>>>> explanation. I dont if the other part work or not i used only
>>>> readHeightField.
>>>>
>>>>
>>>> cheers
>>>>
>>>> struct MyFunctor {
>>>> // do nothing
>>>> void operator ()(const osg::Vec3& v1, const osg::Vec3& v2, const
>>>> osg::Vec3& v3, bool treatVertexDataAsTemporary) {
>>>> }
>>>> };
>>>> struct MyTriangulatorForDisplay : osg::TriangleFunctor<MyFunctor>
>>>> {
>>>> osg::ref_ptr<osg::Geometry> _geometry;
>>>> osg::ref_ptr<osg::Vec3Array> _vertexes;
>>>>
>>>> MyTriangulatorForDisplay() {
>>>> _vertexes = new osg::Vec3Array;
>>>> _geometry = new osg::Geometry;
>>>> _geometry->setVertexArray(_vertexes.get());
>>>> }
>>>> void drawArrays(GLenum mode,GLint first,GLsizei count) {
>>>> osg::DrawArrays* primitive = new osg::DrawArrays(mode,
>>>> _vertexes->size()+first, count);
>>>> _vertexes->insert(_vertexes->end(), _vertexCache.begin(),
>>>> _vertexCache.end());
>>>> _geometry->addPrimitiveSet(primitive);
>>>> }
>>>> void postProcess();
>>>>
>>>> };
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Robert Osfield wrote:
>>>>
>>>>
>>>>> HI Cedric,
>>>>>
>>>>> Could you provide work flow which illustrates the problem you've seen
>>>>> so I can recreate at me end.
>>>>>
>>>>> I don't believe your changes are wholly appropriate, and perhaps miss
>>>>> the point of the some of the code, this code might be buggy... but
>>>>> does have a purpose.
>>>>>
>>>>> Cheers,
>>>>> Robert.
>>>>>
>>>>> On Dec 8, 2007 2:36 PM, Cedric Pinson <[EMAIL PROTECTED]> wrote:
>>>>>
>>>>>
>>>>>
>>>>>> Hi Robert,
>>>>>> Here a patch for gdal reader, it did not take the georeference
>>>>>> correctly. I added a diff to show you the difference. with my fix it
>>>>>> works as expected for a tiff georeferenced.
>>>>>>
>>>>>>
>>>>>> diff for info:
>>>>>> 0a1,9
>>>>>> > /**
>>>>>> > * Who is the original author ???
>>>>>> > *
>>>>>> > *
>>>>>> > * Modified (2007)
>>>>>> > *
>>>>>> > * Authors:
>>>>>> > * Cedric Pinson <[EMAIL PROTECTED]>
>>>>>> > */
>>>>>> 666c675
>>>>>> < TopLeft[1] = geoTransform[1];
>>>>>> ---
>>>>>> > TopLeft[1] = geoTransform[3];
>>>>>> 736c745
>>>>>> <
>>>>>> ---
>>>>>> >
>>>>>> 738,739c747,748
>>>>>> < osg::notify(osg::INFO)<<"flipping"<<std::endl;
>>>>>> < unsigned int copy_r = hf->getNumRows()-1;
>>>>>> ---
>>>>>> > osg::notify(osg::INFO)<<"flipping"<<std::endl;
>>>>>> > unsigned int copy_r = hf->getNumRows()-1;
>>>>>> 742,751c751,760
>>>>>> < for(unsigned int c=0;c<hf->getNumColumns();++c)
>>>>>> < {
>>>>>> < float temp = hf->getHeight(c,r);
>>>>>> < hf->setHeight(c,r,hf->getHeight(c,copy_r));
>>>>>> < hf->setHeight(c,copy_r,temp);
>>>>>> < }
>>>>>> < }
>>>>>> <
>>>>>> hf->setOrigin(osg::Vec3(BottomLeft[0],-BottomLeft[1],0));
>>>>>> <
>>>>>> hf->setXInterval((BottomRight[0]-BottomLeft[0])/destWidth);
>>>>>> <
>>>>>> hf->setYInterval((TopLeft[1]-BottomLeft[1])/destHeight);
>>>>>> ---
>>>>>> > for(unsigned int c=0;c<hf->getNumColumns();++c)
>>>>>> > {
>>>>>> > float temp = hf->getHeight(c,r);
>>>>>> > hf->setHeight(c,r,hf->getHeight(c,copy_r));
>>>>>> > hf->setHeight(c,copy_r,temp);
>>>>>> > }
>>>>>> > }
>>>>>> >
>>>>>> hf->setOrigin(osg::Vec3(TopLeft[0],BottomLeft[1],-100));
>>>>>> > hf->setXInterval(geoTransform[1]);
>>>>>> > hf->setYInterval(-geoTransform[5]);
>>>>>>
>>>>>> Cheers
>>>>>>
>>>>>> --
>>>>>> +33 (0) 6 63 20 03 56 Cedric Pinson mailto:[EMAIL PROTECTED]
>>>>>> http://www.plopbyte.net
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> osg-submissions mailing list
>>>>>> [email protected]
>>>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>> _______________________________________________
>>>>> osg-submissions mailing list
>>>>> [email protected]
>>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
>>>>>
>>>>>
>>>>>
>>>> --
>>>>
>>>> +33 (0) 6 63 20 03 56 Cedric Pinson mailto:[EMAIL PROTECTED]
>>>> http://www.plopbyte.net
>>>>
>>>>
>>>> _______________________________________________
>>>> osg-submissions mailing list
>>>> [email protected]
>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
>>>>
>>>>
>>>>
>>> _______________________________________________
>>> osg-submissions mailing list
>>> [email protected]
>>> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
>>>
>>>
>> --
>> +33 (0) 6 63 20 03 56 Cedric Pinson mailto:[EMAIL PROTECTED]
>> http://www.plopbyte.net
>>
>>
>>
>> _______________________________________________
>> osg-submissions mailing list
>> [email protected]
>> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
>>
>>
>>
> _______________________________________________
> osg-submissions mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
>
--
+33 (0) 6 63 20 03 56 Cedric Pinson mailto:[EMAIL PROTECTED]
http://www.plopbyte.net
_______________________________________________
osg-submissions mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org