Hi!

if I use a ShapeDrawable I get a figure with an only color, because "draw -> setColor (...)" it doesn't allow me to color every altitude

   osg::Geode* geode= new osg::Geode();
   osg::ShapeDrawable* draw= new osg::ShapeDrawable(hF);
   double highColor=1.0;
   double lowColor=0.2;

   double R=0.0, G=0.0, B=0.0;
for(int i=0; i< 410; i++)
           {
               for(int j=0; j<296 ;j++)
               {
                   float altitude = hF->getHeight(j,i);

R =(highColor - lowColor) * ((altitude - min) / max) + lowColor; G =(highColor - lowColor) * ((altitude - min) / max) + lowColor; B =(highColor - lowColor) * ((altitude - min) / max) + lowColor;

draw->setColor(osg::Vec4(R,G,B,1.0)); } } geode->addDrawable(draw);


if I draw a TerrainNode with GeometryTechnique and use
terrainNode - > setColorTransferFunction (0, tf.get());
I get a figure with an only color if I use "tf -> allocate (1);"
otherwise, if I use "tf -> allocate (2);" I get a colored figure to two zones, etc...

osg::ref_ptr<osg::TransferFunction1D> tf = new osg::TransferFunction1D;
       tf->setInputRange(min, max); //minAltitude = 0, maxAltitude = 1400
       tf->allocate(1);
      //or    tf->allocate(2);

       for(int i=0; i< 410; i++)
          {
              for(int j=0; j<296 ;j++)
              {
                  float altitude = hF->getHeight(j,i);

R =(highColor - lowColor) * ((altitude - min) / max) + lowColor; G =(highColor - lowColor) * ((altitude - min) / max) + lowColor; B =(highColor - lowColor) * ((altitude - min) / max) + lowColor;

                  tf->setValue(0, osg::Vec4(R,G,B,1.0));
                  //tf->setValue(1, osg::Vec4(1.0,0.0,1.0,1.0));
                  terrainNode->setColorTransferFunction(0, tf.get());
}
          }

how can I color every altitude with different color?
I apologize for the trouble
Thanks
Aurora




Vincent Bourdier ha scritto:
Hi Aurora,

With his proposition, you can create the color that you need.
Setcolor(vec4) uses RGBA (Red, Green, Blue, Alpha) color (if i remember well) so put A to 1.0 (opacity) , and the RGB can be defined using the function he gives to you... you can use it for each component if you want a greyscale color (R=G=B) or only use it on one component... try it and you will see...

for greyscale image, you can try :

hightcolor = 1.0
lowcolor = 0.0

and then

R =(highColor - lowColor) * ((altitude - minAltitude) / maxAltitude) + lowColor; G =(highColor - lowColor) * ((altitude - minAltitude) / maxAltitude) + lowColor; B =(highColor - lowColor) * ((altitude - minAltitude) / maxAltitude) + lowColor;

this is just a simple example...

Regards,

Vincent.

2008/2/29, aurora restivo <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>:

    The Sukender ha scritto:
    Hum... I don't have a global solution, but you may set a color for each 
vertex with something lile :
    color = (highColor - lowColor) * ((altitude - minAltitude) / maxAltitude) + 
lowColor;



    I apologize but I am still inexperienced.

    I have a HeightField associated to shapeDrawable (this because if
    I use Locator and GeometryTechnique I succeed in visualizing the
    alone ground "GEOCENTRIC"),
    therefore if I use

    shapeDrawable - > setColor (Vec4);

    I don't know whether to plan the values of the Vec4 with the
    formula that you have sent me

    besides of what type it is color?

    Aurora



    You can allso do it in HSL coordinates (instead of RGB).

    Sukender

    ----------------------------------------
    Date: Fri, 29 Feb 2008 12:54:48 +0100
    From: [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
    To: [email protected] 
<mailto:[email protected]>

    Subject: Re: [osg-users] [Fwd: Re: to draw landscapes beginning from a      
matrix]

    Hi!

does a way exists to color from the tallest altitude of a ground to the lowest with gradations of color?

    thanks

    Aurora



_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to