[osg-users] questions about developing drivers for osg/osgEarth

Chris Hanson xenon at alphapixel.com
Wed Sep 18 14:34:45 PDT 2019


You kind of seem to be going about this a difficult way.

Is dynamically altering a surface texture layer really the best way to add
an arrow to the scene?

It seems like you're trying to use a screwdriver to hammer nails.

Is it not more effective to use some kind of symbology and render passes to
overlay it onto the surface without testing or rewriting the Z buffer?


On Wed, Sep 18, 2019 at 2:57 PM speterson at idealaero.com <
speterson at idealaero.com> wrote:

> Hello again,
>
>
>
> I have gotten some of the things I want done somewhat working.
>
>
>
> I am now having an issue attempting to get a layer to update within a
> system thread I made.
>
>
>
> First off I built all this using the Simple Ocean plugin code as my base
> line.  I then added a way to get a simple yellow box to show where I wanted
> programically with osgEarth.  I do have shader code working but what I need
> help with now is updating my layer ever so often with new data for my
> shaders to run on.
>
>
>
> Below is my simple function that my thread runs,  layer is a valid layer
> that is displayed named “newlayer”.
>
>
>
> The code runs and ramps up the alpha channel for a while (sometimes few
> seconds, sometimes minutes) and starts the ramp again with almost
> transparent, but eventually I get a read access violation in
> osg/NodeVisitor.cpp line 107.
>
>
>
> Can anyone look and hint to what might be causing this issue?
>
>
>
> It is almost as if my code and osg code are conflicting with some pointer
> somewhere and I am not sure how to mutex my code correctly.  Maybe it is my
> thread?  I am using a std::thread to run this function on.  Am I updating
> my layer wrong completely by removing and adding a new one?
>
>
>
> Thanks in advance.
>
>
>
> void mysimpleocean::mylayer_redraw(osg::ref_ptr<osgEarth::ImageLayer>
> layer) {
>
>     int width = 200;
>
>     int height = 200;
>
>
>
>     double wlon = -104.00;
>
>     double nlat = 49.00;
>
>     double elon = -96.00;
>
>     double slat = 45.00;
>
>
>
>     int target_height = 200;
>
>     int target_width = 200;
>
>
>
>     double geoTransform[6];
>
>     geoTransform[0] = wlon;
>
>     geoTransform[1] = (elon - wlon) / width;
>
>     geoTransform[2] = 0.00;
>
>     geoTransform[3] = nlat;
>
>     geoTransform[4] = 0.00;
>
>     geoTransform[5] = (slat - nlat) / height;
>
>
>
>     GDALAllRegister();
>
>     GDALDataset* nmemDS;
>
>     osgEarth::SpatialReference* srs = const_cast<osgEarth::
> SpatialReference*>(_map->getProfile()->getSRS());
>
>     GDALRasterBand* bandRed;
>
>     GDALRasterBand* bandGreen;
>
>     GDALRasterBand* bandBlue;
>
>     GDALRasterBand* bandAlpha;
>
>     osgEarth::Drivers::GDALOptions gdaloptions;
>
>     osg::ref_ptr<osgEarth::Drivers::GDALOptions::ExternalDataset> eds;
>
>     Threading::Mutex _mutex;
>
>     osg::ref_ptr<osgEarth::ImageLayer> tlayer;
>
>
>
>   int alpha = 143;
>
>   while (true) {
>
>     nmemDS = (GDALDataset*)GDALCreate(GDALGetDriverByName("MEM"), "",
> 200, 200, 0, GDT_Byte, nullptr);
>
>     GDALSetProjection(nmemDS, srs->getWKT().c_str());
>
>     GDALSetGeoTransform(nmemDS, geoTransform);
>
>
>
>     nmemDS->AddBand(GDT_Byte, nullptr);
>
>     nmemDS->AddBand(GDT_Byte, nullptr);
>
>     nmemDS->AddBand(GDT_Byte, nullptr);
>
>     nmemDS->AddBand(GDT_Byte, nullptr);
>
>
>
>     bandRed = nmemDS->GetRasterBand(1);
>
>     bandGreen = nmemDS->GetRasterBand(2);
>
>     bandBlue = nmemDS->GetRasterBand(3);
>
>     bandAlpha = nmemDS->GetRasterBand(4);
>
>
>
>     BYTE* rrowbuff = new BYTE[width];
>
>     BYTE* growbuff = new BYTE[width];
>
>     BYTE* browbuff = new BYTE[width];
>
>     BYTE* arowbuff = new BYTE[width];
>
>
>
>     for (int y = 0; y < height; y++) {
>
>       for (int x = 0; x < width; x++) {
>
>         rrowbuff[x] = (BYTE)255;
>
>         growbuff[x] = (BYTE)253;
>
>         browbuff[x] = (BYTE)143;
>
>         arowbuff[x] = (BYTE)alpha;
>
>
>
>       }
>
>       CPLErr rerr = bandRed->RasterIO(GF_Write, 0, 0, target_width,
> target_height, rrowbuff, target_width * ((elon - wlon) / target_width),
> target_height * abs((slat - nlat) / target_height), GDT_Byte, 4, 0);
>
>       CPLErr gerr = bandGreen->RasterIO(GF_Write, 0, 0, target_width,
> target_height, growbuff, target_width * ((elon - wlon) / target_width),
> target_height * abs((slat - nlat) / target_height), GDT_Byte, 4, 0);
>
>       CPLErr berr = bandBlue->RasterIO(GF_Write, 0, 0, target_width,
> target_height, browbuff, target_width * ((elon - wlon) / target_width),
> target_height * abs((slat - nlat) / target_height), GDT_Byte, 4, 0);
>
>       CPLErr aerr = bandAlpha->RasterIO(GF_Write, 0, 0, target_width,
> target_height, arowbuff, target_width * ((elon - wlon) / target_width),
> target_height * abs((slat - nlat) / target_height), GDT_Byte, 4, 0);
>
>     }
>
>
>
>     alpha = alpha + 10;
>
>     if (alpha > 255)
>
>       alpha = alpha - 255;
>
>
>
>     eds = new osgEarth::Drivers::GDALOptions::ExternalDataset(nmemDS, true
> );
>
>     gdaloptions.externalDataset() = eds;
>
>
>
>     tlayer = dynamic_cast<osgEarth::ImageLayer*>(_map->getLayerByName(
> "newlayer"));
>
>
>
>     tlayer->setDataVariance(osg::Object::DYNAMIC);
>
>     tlayer->getOrCreateStateSet()->setDataVariance(osg::Object::DYNAMIC);
>
>
>
>     // tlayer->disable("");
>
>     Threading::ScopedMutexLock exclusiveLock(_mutex);
>
>     _map->removeLayer(tlayer);
>
>
>
>     layer = new osgEarth::ImageLayer("newlayer", gdaloptions);
>
>
>
>     layer->setDataVariance(osg::Object::DYNAMIC);
>
>     layer->getOrCreateStateSet()->setDataVariance(osg::Object::DYNAMIC);
>
>
>
>     _map->addLayer(layer);
>
>
>
>     delete rrowbuff;
>
>     delete growbuff;
>
>     delete browbuff;
>
>     delete arowbuff;
>
>
>
>     Sleep(2000);
>
>
>
>   }
>
> }
>
> *From:* Shannon Peterson
> *Sent:* Friday, August 30, 2019 3:27 PM
> *To:* 'osg-users at lists.openscenegraph.org' <
> osg-users at lists.openscenegraph.org>
> *Subject:* questions about developing drivers for osg/osgEarth
>
>
>
> I have a few questions about how to build a driver to do some specific
> tasks in osgEarth.
>
>
>
> Simple example.
>
> Using simple ocean as an example replace the texture piece with
> geo-spacial image and then build a shader to add effect to the image.
>
> Ie. Arrowed line that changes color in towards the direction a path should
> be followed start to end.
>
>
>
> The shader piece can be figured out by us working with the shader code.
>
>
>
> The part I am having issues with is adding an arrow image or geometry
> polygon of an arrow to the map at the position I need it at to run the
> shader effect on.
>
>
>
> Is this the correct place to aske this sort of question or is there a
> different mailing list or thread I should use to get help with getting this
> designed.
>
>
>
> Thank you in advance
>
>
>
> Shannon Peterson
>
> speterson at idealaero.com
>
> The information contained in this email and any attachments is intended
> only for the personal and confidential use of the intended recipients. This
> email message may be or may contain privileged and confidential
> communications. If the reader of this e-mail is not an intended recipient,
> you are hereby notified that you have received this communication in error
> and that any retention, review, use, dissemination, distribution or copying
> of this communication or the information contained herein is strictly
> prohibited. If you have received this communication in error, please notify
> the sender immediately and delete the original message and all attachments
> from your system. The recipient should check this email and any attachments
> for the presence of viruses. The company accepts no liability for any
> damage caused, directly or indirectly, by any virus transmitted in this
> email. This communication may also contain data subject to U.S. export
> laws. If so, that data subject to the International Traffic in Arms
> Regulation (ITAR) cannot be disseminated, distributed or copied to foreign
> nationals, residing in the U.S. or abroad, absent the express prior
> approval of the U.S. Department of State. If you have received this
> communication in error, please notify the sender by reply e-mail and
> destroy the e-mail message and any physical copies made of the
> communication. Thank you.
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>


-- 
Chris 'Xenon' Hanson, omo sanza lettere. Xenon at AlphaPixel.com
http://www.alphapixel.com/
Training • Consulting • Contracting
3D • Scene Graphs (Open Scene Graph/OSG) • OpenGL 2 • OpenGL 3 • OpenGL 4 •
GLSL • OpenGL ES 1 • OpenGL ES 2 • OpenCL
Legal/IP • Forensics • Imaging • UAVs • GIS • GPS •
osgEarth • Terrain • Telemetry • Cryptography • LIDAR • Embedded • Mobile •
iPhone/iPad/iOS • Android
@alphapixel <https://twitter.com/alphapixel> facebook.com/alphapixel (775)
623-PIXL [7495]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20190918/40f839ae/attachment-0001.html>


More information about the osg-users mailing list