Changed handling of ambientIntensity; change of major version in SG* lib
This commit is contained in:
parent
67832dbc74
commit
99aba8f261
|
@ -56,15 +56,18 @@ static void formatMaterial( SMATERIAL& mat, SGAPPEARANCE const* app )
|
|||
{
|
||||
float v0, v1, v2;
|
||||
|
||||
v0 = app->ambient;
|
||||
app->ambient.GetColor( v0, v1, v2 );
|
||||
mat.m_Ambient.x = v0;
|
||||
mat.m_Ambient.y = v0;
|
||||
mat.m_Ambient.z = v0;
|
||||
mat.m_Ambient.y = v1;
|
||||
mat.m_Ambient.z = v2;
|
||||
|
||||
app->diffuse.GetColor( v0, v1, v2 );
|
||||
mat.m_Diffuse.x = v0;
|
||||
mat.m_Diffuse.y = v1;
|
||||
mat.m_Diffuse.z = v2;
|
||||
mat.m_Ambient.x *= v0;
|
||||
mat.m_Ambient.y *= v1;
|
||||
mat.m_Ambient.z *= v2;
|
||||
|
||||
app->emissive.GetColor( v0, v1, v2 );
|
||||
mat.m_Emissive.x = v0;
|
||||
|
@ -459,7 +462,7 @@ S3DMODEL* S3D::GetModel( SCENEGRAPH* aNode )
|
|||
// also typical of MCAD applications. When a model has no associated
|
||||
// material color it shall be assigned the index 0.
|
||||
SGAPPEARANCE app( NULL );
|
||||
app.ambient = 0.9;
|
||||
app.ambient = SGCOLOR( 0.6, 0.6, 0.6 );
|
||||
app.diffuse = SGCOLOR( 0.6, 0.6, 0.6 );
|
||||
app.specular = app.diffuse;
|
||||
app.shininess = 0.05;
|
||||
|
|
|
@ -322,7 +322,7 @@ bool IFSG_APPEARANCE::SetSpecular( const SGCOLOR& aRGBColor )
|
|||
}
|
||||
|
||||
|
||||
bool IFSG_APPEARANCE::SetAmbient( float aAmbientLight )
|
||||
bool IFSG_APPEARANCE::SetAmbient( float aRVal, float aGVal, float aBVal )
|
||||
{
|
||||
if( NULL == m_node )
|
||||
{
|
||||
|
@ -334,21 +334,42 @@ bool IFSG_APPEARANCE::SetAmbient( float aAmbientLight )
|
|||
return false;
|
||||
}
|
||||
|
||||
if( aAmbientLight < 0 || aAmbientLight > 1.0 )
|
||||
return ((SGAPPEARANCE*)m_node)->SetAmbient( aRVal, aGVal, aBVal );
|
||||
}
|
||||
|
||||
|
||||
bool IFSG_APPEARANCE::SetAmbient( const SGCOLOR* aRGBColor )
|
||||
{
|
||||
if( NULL == m_node )
|
||||
{
|
||||
#ifdef DEBUG
|
||||
std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
|
||||
std::cerr << " * [BUG] ambient intensity out of range [0..1]\n";
|
||||
std::cerr << BadObject << "\n";
|
||||
#endif
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
((SGAPPEARANCE*)m_node)->ambient = aAmbientLight;
|
||||
|
||||
return true;
|
||||
return ((SGAPPEARANCE*)m_node)->SetAmbient( aRGBColor );
|
||||
}
|
||||
|
||||
|
||||
bool IFSG_APPEARANCE::SetAmbient( const SGCOLOR& aRGBColor )
|
||||
{
|
||||
if( NULL == m_node )
|
||||
{
|
||||
#ifdef DEBUG
|
||||
std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
|
||||
std::cerr << BadObject << "\n";
|
||||
#endif
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return ((SGAPPEARANCE*)m_node)->SetAmbient( aRGBColor );
|
||||
}
|
||||
|
||||
|
||||
bool IFSG_APPEARANCE::SetShininess( float aShininess )
|
||||
{
|
||||
if( NULL == m_node )
|
||||
|
|
|
@ -32,7 +32,7 @@ SGAPPEARANCE::SGAPPEARANCE( SGNODE* aParent ) : SGNODE( aParent)
|
|||
m_SGtype = S3D::SGTYPE_APPEARANCE;
|
||||
|
||||
// defaults in accord with VRML2.0 spec
|
||||
ambient = 0.2;
|
||||
ambient.SetColor( 0.05317, 0.17879, 0.01804 );
|
||||
shininess = 0.2;
|
||||
transparency = 0.0;
|
||||
diffuse.SetColor( 0.8, 0.8, 0.8 );
|
||||
|
@ -175,6 +175,34 @@ bool SGAPPEARANCE::SetSpecular( const SGCOLOR& aRGBColor )
|
|||
}
|
||||
|
||||
|
||||
bool SGAPPEARANCE::SetAmbient( float aRVal, float aGVal, float aBVal )
|
||||
{
|
||||
return ambient.SetColor( aRVal, aGVal, aBVal );
|
||||
}
|
||||
|
||||
|
||||
bool SGAPPEARANCE::SetAmbient( const SGCOLOR* aRGBColor )
|
||||
{
|
||||
if( NULL == aRGBColor )
|
||||
{
|
||||
#ifdef DEBUG
|
||||
std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
|
||||
std::cerr << " * [BUG] NULL pointer passed for aRGBColor\n";
|
||||
#endif
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return ambient.SetColor( aRGBColor );
|
||||
}
|
||||
|
||||
|
||||
bool SGAPPEARANCE::SetAmbient( const SGCOLOR& aRGBColor )
|
||||
{
|
||||
return ambient.SetColor( aRGBColor );
|
||||
}
|
||||
|
||||
|
||||
SGNODE* SGAPPEARANCE::FindNode(const char *aNodeName, const SGNODE *aCaller)
|
||||
{
|
||||
if( NULL == aNodeName || 0 == aNodeName[0] )
|
||||
|
@ -264,7 +292,21 @@ bool SGAPPEARANCE::WriteVRML( std::ofstream& aFile, bool aReuseFlag )
|
|||
aFile << " material Material {\n";
|
||||
|
||||
std::string tmp;
|
||||
S3D::FormatFloat( tmp, ambient );
|
||||
float ambr, ambg, ambb;
|
||||
ambient.GetColor( ambr, ambg, ambb );
|
||||
float amb = ( 0.212671 * ambr + 0.71516 * ambg + 0.072169 * ambb );
|
||||
diffuse.GetColor( ambr, ambg, ambb );
|
||||
float den = ( 0.212671 * ambr + 0.71516 * ambg + 0.072169 * ambb );
|
||||
|
||||
if( den < 0.004 )
|
||||
den = 0.004;
|
||||
|
||||
amb /= den;
|
||||
|
||||
if( amb > 1.0 )
|
||||
amb = 1.0;
|
||||
|
||||
S3D::FormatFloat( tmp, amb );
|
||||
aFile << " ambientIntensity " << tmp << "\n";
|
||||
|
||||
float red, green, blue;
|
||||
|
|
|
@ -34,9 +34,9 @@
|
|||
class SGAPPEARANCE : public SGNODE
|
||||
{
|
||||
public:
|
||||
float ambient; // default 0.2
|
||||
float shininess; // default 0.2
|
||||
float transparency; // default 0.0
|
||||
SGCOLOR ambient; // default 0.05317 0.17879 0.01804
|
||||
SGCOLOR diffuse; // default 0.8 0.8 0.8
|
||||
SGCOLOR emissive; // default 0.0 0.0 0.0
|
||||
SGCOLOR specular; // default 0.0 0.0 0.0
|
||||
|
@ -62,6 +62,10 @@ public:
|
|||
bool SetSpecular( const SGCOLOR* aRGBColor );
|
||||
bool SetSpecular( const SGCOLOR& aRGBColor );
|
||||
|
||||
bool SetAmbient( float aRVal, float aGVal, float aBVal );
|
||||
bool SetAmbient( const SGCOLOR* aRGBColor );
|
||||
bool SetAmbient( const SGCOLOR& aRGBColor );
|
||||
|
||||
SGNODE* FindNode(const char *aNodeName, const SGNODE *aCaller);
|
||||
bool AddRefNode( SGNODE* aNode );
|
||||
bool AddChildNode( SGNODE* aNode );
|
||||
|
|
|
@ -54,7 +54,10 @@ public:
|
|||
bool SetSpecular( const SGCOLOR* aRGBColor );
|
||||
bool SetSpecular( const SGCOLOR& aRGBColor );
|
||||
|
||||
bool SetAmbient( float aAmbientLight );
|
||||
bool SetAmbient( float aRVal, float aGVal, float aBVal );
|
||||
bool SetAmbient( const SGCOLOR* aRGBColor );
|
||||
bool SetAmbient( const SGCOLOR& aRGBColor );
|
||||
|
||||
bool SetShininess( float aShininess );
|
||||
bool SetTransparency( float aTransparency );
|
||||
};
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
#ifndef SG_VERSION_H
|
||||
#define SG_VERSION_H
|
||||
|
||||
#define KICADSG_VERSION_MAJOR 1
|
||||
#define KICADSG_VERSION_MAJOR 2
|
||||
#define KICADSG_VERSION_MINOR 0
|
||||
#define KICADSG_VERSION_PATCH 0
|
||||
#define KICADSG_VERSION_REVISION 0
|
||||
|
|
|
@ -98,7 +98,7 @@ static SGNODE* getColor( IFSG_SHAPE& shape, int colorIdx )
|
|||
// green for PCB
|
||||
material.SetSpecular( 0.13, 0.81, 0.22 );
|
||||
material.SetDiffuse( 0.13, 0.81, 0.22 );
|
||||
material.SetAmbient( 0.9 );
|
||||
// default ambient intensity
|
||||
material.SetShininess( 0.3 );
|
||||
|
||||
break;
|
||||
|
@ -107,7 +107,7 @@ static SGNODE* getColor( IFSG_SHAPE& shape, int colorIdx )
|
|||
// magenta
|
||||
material.SetSpecular( 0.8, 0.0, 0.8 );
|
||||
material.SetDiffuse( 0.6, 0.0, 0.6 );
|
||||
material.SetAmbient( 0.9 );
|
||||
// default ambient intensity
|
||||
material.SetShininess( 0.3 );
|
||||
|
||||
break;
|
||||
|
@ -116,7 +116,7 @@ static SGNODE* getColor( IFSG_SHAPE& shape, int colorIdx )
|
|||
// red
|
||||
material.SetSpecular( 0.69, 0.14, 0.14 );
|
||||
material.SetDiffuse( 0.69, 0.14, 0.14 );
|
||||
material.SetAmbient( 0.9 );
|
||||
// default ambient intensity
|
||||
material.SetShininess( 0.3 );
|
||||
|
||||
break;
|
||||
|
@ -125,7 +125,7 @@ static SGNODE* getColor( IFSG_SHAPE& shape, int colorIdx )
|
|||
// orange
|
||||
material.SetSpecular( 1.0, 0.44, 0.0 );
|
||||
material.SetDiffuse( 1.0, 0.44, 0.0 );
|
||||
material.SetAmbient( 0.9 );
|
||||
// default ambient intensity
|
||||
material.SetShininess( 0.3 );
|
||||
|
||||
break;
|
||||
|
@ -134,7 +134,7 @@ static SGNODE* getColor( IFSG_SHAPE& shape, int colorIdx )
|
|||
// yellow
|
||||
material.SetSpecular( 0.93, 0.94, 0.16 );
|
||||
material.SetDiffuse( 0.93, 0.94, 0.16 );
|
||||
material.SetAmbient( 0.9 );
|
||||
// default ambient intensity
|
||||
material.SetShininess( 0.3 );
|
||||
|
||||
break;
|
||||
|
@ -143,7 +143,7 @@ static SGNODE* getColor( IFSG_SHAPE& shape, int colorIdx )
|
|||
// blue
|
||||
material.SetSpecular( 0.1, 0.11, 0.88 );
|
||||
material.SetDiffuse( 0.1, 0.11, 0.88 );
|
||||
material.SetAmbient( 0.9 );
|
||||
// default ambient intensity
|
||||
material.SetShininess( 0.3 );
|
||||
|
||||
break;
|
||||
|
@ -152,7 +152,7 @@ static SGNODE* getColor( IFSG_SHAPE& shape, int colorIdx )
|
|||
// violet
|
||||
material.SetSpecular( 0.32, 0.07, 0.64 );
|
||||
material.SetDiffuse( 0.32, 0.07, 0.64 );
|
||||
material.SetAmbient( 0.9 );
|
||||
// default ambient intensity
|
||||
material.SetShininess( 0.3 );
|
||||
|
||||
break;
|
||||
|
|
|
@ -349,8 +349,7 @@ SGNODE* WRL1MATERIAL::GetAppearance( int aIndex )
|
|||
checkRange( red );
|
||||
checkRange( green );
|
||||
checkRange( blue );
|
||||
val = (red + green + blue)/3.0;
|
||||
app.SetAmbient( val );
|
||||
app.SetAmbient( red, green, blue );
|
||||
|
||||
if( aIndex == 0 || diffuseColor.empty() )
|
||||
{
|
||||
|
|
|
@ -410,7 +410,7 @@ SGNODE* WRL2APPEARANCE::TranslateToSG( SGNODE* aParent )
|
|||
matNode.SetEmissive( 0.0, 0.0, 0.0 );
|
||||
matNode.SetSpecular( 0.65, 0.65, 0.65 );
|
||||
matNode.SetDiffuse( 0.65, 0.65, 0.65 );
|
||||
matNode.SetAmbient( 0.99 );
|
||||
// default ambient
|
||||
matNode.SetShininess( 0.2 );
|
||||
matNode.SetTransparency( 0.0 );
|
||||
m_sgNode = matNode.GetRawPtr();
|
||||
|
|
|
@ -340,7 +340,10 @@ SGNODE* WRL2MATERIAL::TranslateToSG( SGNODE* aParent )
|
|||
matNode.SetEmissive( emissiveColor.x, emissiveColor.y, emissiveColor.z );
|
||||
matNode.SetSpecular( specularColor.x, specularColor.y, specularColor.z );
|
||||
matNode.SetDiffuse( diffuseColor.x, diffuseColor.y, diffuseColor.z );
|
||||
matNode.SetAmbient( ambientIntensity );
|
||||
float ambr = ambientIntensity * diffuseColor.x;
|
||||
float ambg = ambientIntensity * diffuseColor.y;
|
||||
float ambb = ambientIntensity * diffuseColor.z;
|
||||
matNode.SetAmbient( ambr, ambb, ambg );
|
||||
matNode.SetShininess( shininess );
|
||||
matNode.SetTransparency( transparency );
|
||||
m_sgNode = matNode.GetRawPtr();
|
||||
|
|
|
@ -218,7 +218,7 @@ bool X3DAPP::SetParent( X3DNODE* aParent, bool doUnlink )
|
|||
}
|
||||
|
||||
|
||||
bool X3DAPP::AddChildNode( X3DNODE* aNode )
|
||||
bool X3DAPP::AddChildNode( X3DNODE* aNode )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -274,7 +274,10 @@ SGNODE* X3DAPP::TranslateToSG( SGNODE* aParent )
|
|||
matNode.SetEmissive( emissiveColor.x, emissiveColor.y, emissiveColor.z );
|
||||
matNode.SetSpecular( specularColor.x, specularColor.y, specularColor.z );
|
||||
matNode.SetDiffuse( diffuseColor.x, diffuseColor.y, diffuseColor.z );
|
||||
matNode.SetAmbient( ambientIntensity );
|
||||
float ambr = ambientIntensity * diffuseColor.x;
|
||||
float ambg = ambientIntensity * diffuseColor.y;
|
||||
float ambb = ambientIntensity * diffuseColor.z;
|
||||
matNode.SetAmbient( ambr, ambg, ambb );
|
||||
matNode.SetShininess( shininess );
|
||||
matNode.SetTransparency( transparency );
|
||||
m_sgNode = matNode.GetRawPtr();
|
||||
|
|
|
@ -139,7 +139,6 @@ bool X3DTRANSFORM::Read( wxXmlNode* aNode, X3DNODE* aTopNode, X3D_DICT& aDict )
|
|||
{
|
||||
if( NULL == aTopNode || NULL == aNode )
|
||||
return false;
|
||||
std::cerr << "XXX: Reading Transform\n";
|
||||
|
||||
m_Dict = &aDict;
|
||||
readFields( aNode );
|
||||
|
|
Loading…
Reference in New Issue