Hello Ted,
sorry, for my incorrect guess. I just looked into SimpleMaterial its ctor for
default values.
But, what I do different from your code is that I always return OpenSG objects,
which I have created in functions by the respective
TransitPtr. For instance, I have the following function working
OSG::ChunkMaterialTransitPtr createChunkMaterial(const SolidMaterial& rMat)
{
using namespace OSG;
ChunkMaterialUnrecPtr chunkMaterial = ChunkMaterial::create();
MaterialChunkUnrecPtr mat = MaterialChunk::create();
updateMaterialChunk(mat, rMat);
chunkMaterial->addChunk(mat);
PolygonChunkUnrecPtr chunkPolygonModel = PolygonChunk::create();
chunkPolygonModel->setFrontMode(GL_FILL);
chunkPolygonModel->setBackMode(GL_FILL);
chunkPolygonModel->setOffsetFactor(1.f);
chunkPolygonModel->setOffsetBias(1.f);
chunkPolygonModel->setOffsetFill(true);
chunkPolygonModel->setCullFace(GL_NONE);
TwoSidedLightingChunkUnrecPtr chunkTwoSidedLighting =
TwoSidedLightingChunk::create();
chunkTwoSidedLighting->setIgnore(false);
chunkMaterial->addChunk(chunkPolygonModel);
chunkMaterial->addChunk(chunkTwoSidedLighting);
return ChunkMaterialTransitPtr(chunkMaterial);
}
void updateMaterialChunk(osg::MaterialChunk* chunk, const SolidMaterial& rMat)
{
using namespace osg;
float colEmissive[4], colAmbient[4], colDiffuse[4], colSpecular[4];
if (rMat.getGlobalColored()) {
Color colGlobal = rMat.getColor(SolidMaterial::GLOBAL); colDiffuse[3] =
1.f - rMat.getTransparency();
colGlobal.getRgb(colDiffuse);
XWORD2 w2Hue, w2Saturation, w2Value;
colGlobal.HsvGet(&w2Hue, &w2Saturation, &w2Value);
w2Value /= 3;
colGlobal.HsvSet(w2Hue, w2Saturation, w2Value);
colGlobal.getRgb(colAmbient);
for (int i = 0; i < 3; ++i) {
colEmissive[i] = 0.f;
colSpecular[i] = 0.f;
}
colEmissive[3] = 1.f;
colAmbient [3] = 1.f;
colSpecular[3] = 1.f;
} else {
rMat.getColor(SolidMaterial::EMISSIVE).getRgb(colEmissive);
colEmissive[3] = 1.f;
rMat.getColor(SolidMaterial::AMBIENT) .getRgb(colAmbient);
colAmbient[3] = 1.0;
rMat.getColor(SolidMaterial::DIFFUSE) .getRgb(colDiffuse);
colDiffuse[3] = 1.f - rMat.getTransparency();
rMat.getColor(SolidMaterial::SPECULAR).getRgb(colSpecular);
colSpecular[3] = 1.f;
}
chunk->setAmbient (Color4f(colAmbient[0], colAmbient[1],
colAmbient[2], colAmbient[3]));
chunk->setDiffuse (Color4f(colDiffuse[0], colDiffuse[1],
colDiffuse[2], colDiffuse[3]));
chunk->setEmission (Color4f(colEmissive[0], colEmissive[1],
colEmissive[2], colEmissive[3]));
chunk->setSpecular (Color4f(colSpecular[0], colSpecular[1],
colSpecular[2], colSpecular[3]));
chunk->setShininess (rMat.getShininess());
}
Hope, that this is a proper guess, otherwise I will try to compile your example.
Best,
Johannes
------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
_______________________________________________
Opensg-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-users