void reset() { mat = ChunkMaterial::create(); colChunk = MaterialChunk::create(); colChunk->setBackMaterial(false); mat->addChunk(colChunk); twoSidedChunk = TwoSidedLightingChunk::create(); mat->addChunk(twoSidedChunk); blendChunk = 0; texChunk = 0; genChunk = 0; envChunk = 0; lineChunk = 0; pointChunk = 0; polygonChunk = 0; texture = 0; video = 0; shaderChunk = 0; clipChunk = 0; stencilChunk = 0; deffered = false; colChunk->setDiffuse( Color4f(1, 1, 1, 1) ); colChunk->setAmbient( Color4f(0.3, 0.3, 0.3, 1) ); colChunk->setSpecular( Color4f(1, 1, 1, 1) ); colChunk->setShininess( 50 ); }
void VRMaterial::setMaterial(MaterialRecPtr m) { if ( dynamic_pointer_cast<MultiPassMaterial>(m) ) { MultiPassMaterialRecPtr mm = dynamic_pointer_cast<MultiPassMaterial>(m); for (unsigned int i=0; i<mm->getNPasses(); i++) { if (i > 0) addPass(); setMaterial(mm->getMaterials(i)); } setActivePass(0); return; } if ( isSMat(m) ) { SimpleMaterialRecPtr sm = dynamic_pointer_cast<SimpleMaterial>(m); setDiffuse(sm->getDiffuse()); setAmbient(sm->getAmbient()); setSpecular(sm->getSpecular()); if ( isSTMat(m) ) { SimpleTexturedMaterialRecPtr stm = dynamic_pointer_cast<SimpleTexturedMaterial>(m); setTexture( VRTexture::create(stm->getImage()), true); } return; } if ( isCMat(m) ) { MaterialChunkRecPtr mc = 0; BlendChunkRecPtr bc = 0; TextureEnvChunkRecPtr ec = 0; TextureObjChunkRecPtr tc = 0; ChunkMaterialRecPtr cmat = dynamic_pointer_cast<ChunkMaterial>(m); for (uint i=0; i<cmat->getMFChunks()->size(); i++) { StateChunkRecPtr chunk = cmat->getChunk(i); if (mc == 0) mc = dynamic_pointer_cast<MaterialChunk>(chunk); if (bc == 0) bc = dynamic_pointer_cast<BlendChunk>(chunk); if (ec == 0) ec = dynamic_pointer_cast<TextureEnvChunk>(chunk); if (tc == 0) tc = dynamic_pointer_cast<TextureObjChunk>(chunk); } auto md = mats[activePass]; if (mc) mc->setBackMaterial(false); if (mc) { if (md->colChunk) md->mat->subChunk(md->colChunk); md->colChunk = mc; md->mat->addChunk(mc); } if (bc) { if (md->blendChunk) md->mat->subChunk(md->blendChunk); md->blendChunk = bc; md->mat->addChunk(bc); } if (ec) { if (md->envChunk) md->mat->subChunk(md->envChunk); md->envChunk = ec; md->mat->addChunk(ec); } if (tc) { if (md->texChunk) md->mat->subChunk(md->texChunk); md->texChunk = tc; md->mat->addChunk(tc); } return; } cout << "Warning: unhandled material type\n"; if (dynamic_pointer_cast<Material>(m)) cout << " Material" << endl; if (dynamic_pointer_cast<PrimeMaterial>(m)) cout << " PrimeMaterial" << endl; if (dynamic_pointer_cast<SimpleMaterial>(m)) cout << " SimpleMaterial" << endl; if (dynamic_pointer_cast<SimpleTexturedMaterial>(m)) cout << " SimpleTexturedMaterial" << endl; if (dynamic_pointer_cast<VariantMaterial>(m)) cout << " VariantMaterial" << endl; if (dynamic_pointer_cast<ChunkMaterial>(m)) cout << " ChunkMaterial" << endl; if (dynamic_pointer_cast<MultiPassMaterial>(m)) cout << " MultiPassMaterial" << endl; if (dynamic_pointer_cast<CompositeMaterial>(m)) cout << " CompositeMaterial" << endl; if (dynamic_pointer_cast<SwitchMaterial>(m)) cout << " SwitchMaterial" << endl; }