Salve a tutti.
Apro questo post perchè non so più che pesce pigliare per capire cosa fa questa funzione:
codice:
void BasicTutorial3::initBlendMaps(Ogre::Terrain* terrain)
{
Ogre::TerrainLayerBlendMap* blendMap0 = terrain->getLayerBlendMap(1);
Ogre::TerrainLayerBlendMap* blendMap1 = terrain->getLayerBlendMap(2);
Ogre::Real minHeight0 = 70;
Ogre::Real fadeDist0 = 40;
Ogre::Real minHeight1 = 70;
Ogre::Real fadeDist1 = 15;
float* pBlend1 = blendMap1->getBlendPointer();
for (Ogre::uint16 y = 0; y < terrain->getLayerBlendMapSize(); ++y)
{
for (Ogre::uint16 x = 0; x < terrain->getLayerBlendMapSize(); ++x)
{
Ogre::Real tx, ty;
blendMap0->convertImageToTerrainSpace(x, y, &tx, &ty);
Ogre::Real height = terrain->getHeightAtTerrainPosition(tx, ty);
Ogre::Real val = (height - minHeight0) / fadeDist0;
val = Ogre::Math::Clamp(val, (Ogre::Real)0, (Ogre::Real)1);
val = (height - minHeight1) / fadeDist1;
val = Ogre::Math::Clamp(val, (Ogre::Real)0, (Ogre::Real)1);
*pBlend1++ = val;
}
}
blendMap0->dirty();
blendMap1->dirty();
blendMap0->update();
blendMap1->update();
}
Ma cominciamo dall'inzio. Questa mattina ho finalmente cominciato a studiare come funziona Ogre3D, il celebre engine grafico 3D scritto in C++. Sono arrivato al terzo tutorial di base, dove vengono spiegati l'Ogre Terrain System, il rendering del cielo e della nebbia. Il mio problema sta nel primo dei tre argomenti: non riesco a capire come funziona. Così è dall'una di oggi pomeriggio che cerco tra la documentazione ufficiale e sono riuscito a capire come funziona tutto, tranne la funzione che ho postato sopra che, guarda caso, è il fulcro di tutto
Ritengo che postare tutto il codice sia troppo lungo, per questo vi rimando al link che ho lasciato, sperando che qualche anima pia mi aiuti. Per inciso, non ottengo errori, ma voglio solo capire come funziona il tutto.
P.S.: Ho provato a cercare i vari metodi adoperati nella funzione, ma dalla documentazione ufficiale ottengo questo (ad esempio):
TerrainLayerBlendMap* Ogre::Terrain::getLayerBlendMap ( uint8 layerIndex )
Retrieve the layer blending map for a given layer, which may be used to edit the blending information for that layer.
Note:
You can only do this after the terrain has been loaded. You may edit the content of the blend layer in another thread, but you may only upload it in the main render thread.
Parameters:
layerIndex The layer index, which should be 1 or higher (since the bottom layer has no blending).
Returns:
Pointer to the TerrainLayerBlendMap requested. The caller must not delete this instance, use freeTemporaryResources if you want to save the memory after completing your editing.
Nonostante tutto, non riesco a capire cosa sia il layer blending map for a given layer, visto che come traduzione di blending google mi suggerisce "miscelazione". E poi, che cos'è il "livello dato"(given layer) menzionato prima?
Grazie mille a chi mi aiuterà