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