I've never used a terrainnode so I can't help you on that, but on the
ShapeDrawable something look strange on your code :

you do a drawable->setcolor on each loop (so 410*296 times) and a the end
you add it to the geode.... so I imagine that only the last loop is used,
and it look normal to obtain a single color...

Maybe you should create a vec4Array with the same size of your vertex array,
and in each element of the Colorarray you put the calculated vector.
Last, you make something like :

drawable->setVerticeArray(your_vertex_array);
drawable->setColorArray(your_color_array);

(Maybe your should add normalArray too)

I don't know if you understand what it intend to explain, It's a little bit
difficult for me to write in english ;)

Vincent

2008/3/3, aurora restivo <[EMAIL PROTECTED]>:
>
>  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]>:
> >
> > 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]
> > To: osg-users@lists.openscenegraph.org
> >
> > 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
> osg-users@lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to