//----------------------------------------------------------------------- void BeamRenderer::_prepare(ParticleTechnique* technique) { if (!technique || mRendererInitialised) return; // Register itself to the technique if (mParentTechnique) { // Although it is safe to assume that technique == mParentTechnique, use the mParentTechnique, because the mParentTechnique is // also used for unregistering. mParentTechnique->addTechniqueListener(this); } mQuota = technique->getVisualParticleQuota(); Ogre::SceneNode* parentNode = technique->getParentSystem()->getParentSceneNode(); if (parentNode) { // Create BillboardChain Ogre::SceneManager* sceneManager = mParentTechnique->getParentSystem()->getSceneManager(); std::stringstream ss; ss << this; mBillboardChainName = "Beam" + ss.str(); mBillboardChain = sceneManager->createBillboardChain(mBillboardChainName); mBillboardChain->setDynamic(true); mBillboardChain->setNumberOfChains(mQuota); mBillboardChain->setMaxChainElements(mMaxChainElements); mBillboardChain->setMaterialName(technique->getMaterialName()); mBillboardChain->setRenderQueueGroup(mQueueId); mBillboardChain->setTextureCoordDirection(mTexCoordDirection); setUseVertexColours(mUseVertexColours); mBillboardChain->setOtherTextureCoordRange(0.0f, 1.0f); mBillboardChain->setVisible(true); // Create number of VisualData objects for (size_t i = 0; i < mQuota; i++) { for (size_t j = 0; j < mMaxChainElements; j++) { Ogre::BillboardChain::Element element; element = Ogre::BillboardChain::Element(Vector3::ZERO, _mRendererScale.x * mParentTechnique->getDefaultWidth(), 0.0f, ColourValue::White, Ogre::Quaternion::IDENTITY); // V1.51 mBillboardChain->addChainElement(i, element); } BeamRendererVisualData* visualData = PU_NEW_T(BeamRendererVisualData, MEMCATEGORY_SCENE_OBJECTS)(i, mBillboardChain); for (size_t numDev = 0; numDev < mNumberOfSegments; ++numDev) { // Initialise the positions visualData->half[numDev] = Vector3::ZERO; visualData->destinationHalf[numDev] = Vector3::ZERO; } mAllVisualData.push_back(visualData); // Managed by this renderer mVisualData.push_back(visualData); // Used to assign to a particle } mRendererInitialised = true; parentNode->attachObject(mBillboardChain); } }
void PUBeamRender::prepare() { if (!_particleSystem) return; // Register itself to the technique if (_particleSystem) { // Although it is safe to assume that technique == mParentTechnique, use the mParentTechnique, because the mParentTechnique is // also used for unregistering. static_cast<PUParticleSystem3D *>(_particleSystem)->addListener(this); } _quota = _particleSystem->getParticleQuota(); // Create BillboardChain std::stringstream ss; ss << this; _billboardChainName = "Beam" + ss.str(); _billboardChain = new (std::nothrow) PUBillboardChain(_billboardChainName, _texFile); _billboardChain->setDynamic(true); _billboardChain->setNumberOfChains(_quota); _billboardChain->setMaxChainElements(_maxChainElements); _billboardChain->setTextureCoordDirection(_texCoordDirection); setUseVertexColours(_useVertexColours); _billboardChain->setOtherTextureCoordRange(0.0f, 1.0f); _billboardChain->setDepthTest(_depthTest); _billboardChain->setDepthWrite(_depthWrite); // Create number of VisualData objects for (size_t i = 0; i < _quota; i++) { for (size_t j = 0; j < _maxChainElements; j++) { PUBillboardChain::Element element; element = PUBillboardChain::Element(Vec3::ZERO, _rendererScale.x * static_cast<PUParticleSystem3D *>(_particleSystem)->getDefaultWidth(), 0.0f, Vec4::ONE, Quaternion::identity()); // V1.51 _billboardChain->addChainElement(i, element); } PUParticle3DBeamVisualData* visualData = new (std::nothrow) PUParticle3DBeamVisualData(i, _billboardChain); for (size_t numDev = 0; numDev < _numberOfSegments; ++numDev) { // Initialise the positions visualData->half[numDev] = Vec3::ZERO; visualData->destinationHalf[numDev] = Vec3::ZERO; } _allVisualData.push_back(visualData); // Managed by this renderer _visualData.push_back(visualData); // Used to assign to a particle } }
//------------------------------------------------------------------------- bool TerrainSceneManager::setOption( const String & name, const void *value ) { if (name == "PageSize") { setPageSize(*static_cast<const int*>(value)); return true; } else if (name == "TileSize") { setTileSize(*static_cast<const int*>(value)); return true; } else if (name == "PrimaryCamera") { setPrimaryCamera(static_cast<const Camera*>(value)); return true; } else if (name == "MaxMipMapLevel") { setMaxGeoMipMapLevel(*static_cast<const int*>(value)); return true; } else if (name == "Scale") { setScale(*static_cast<const Vector3*>(value)); return true; } else if (name == "MaxPixelError") { setMaxPixelError(*static_cast<const int*>(value)); return true; } else if (name == "UseTriStrips") { setUseTriStrips(*static_cast<const bool*>(value)); return true; } else if (name == "VertexProgramMorph") { setUseLODMorph(*static_cast<const bool*>(value)); return true; } else if (name == "DetailTile") { setDetailTextureRepeat(*static_cast<const int*>(value)); return true; } else if (name == "LodMorphStart") { setLODMorphStart(*static_cast<const Real*>(value)); return true; } else if (name == "VertexNormals") { setUseVertexNormals(*static_cast<const bool*>(value)); return true; } else if (name == "VertexColours") { setUseVertexColours(*static_cast<const bool*>(value)); return true; } else if (name == "MorphLODFactorParamName") { setCustomMaterialMorphFactorParam(*static_cast<const String*>(value)); return true; } else if (name == "MorphLODFactorParamIndex") { setCustomMaterialMorphFactorParam(*static_cast<const size_t*>(value)); return true; } else if (name == "CustomMaterialName") { setCustomMaterial(*static_cast<const String*>(value)); return true; } else if (name == "WorldTexture") { setWorldTexture(*static_cast<const String*>(value)); return true; } else if (name == "DetailTexture") { setDetailTexture(*static_cast<const String*>(value)); return true; } else { return OctreeSceneManager::setOption(name, value); } return false; }