29#ifndef __Ogre_Terrain_H__
30#define __Ogre_Terrain_H__
401 : terrainAlign(ALIGN_X_Z)
410 , deleteInputData(
false)
418 : terrainAlign(ALIGN_X_Z)
427 , deleteInputData(
false)
437 terrainAlign =
rhs.terrainAlign;
438 terrainSize =
rhs.terrainSize;
439 maxBatchSize =
rhs.maxBatchSize;
440 minBatchSize =
rhs.minBatchSize;
442 worldSize =
rhs.worldSize;
443 constantHeight =
rhs.constantHeight;
444 deleteInputData =
rhs.deleteInputData;
445 inputScale =
rhs.inputScale;
446 inputBias =
rhs.inputBias;
447 layerDeclaration =
rhs.layerDeclaration;
448 layerList =
rhs.layerList;
451 if (
rhs.deleteInputData)
461 memcpy(inputFloat,
rhs.inputFloat,
sizeof(
float) * terrainSize*terrainSize);
469 inputImage =
rhs.inputImage;
470 inputFloat =
rhs.inputFloat;
499 NEIGHBOUR_NORTHEAST = 1,
501 NEIGHBOUR_NORTHWEST = 3,
503 NEIGHBOUR_SOUTHWEST = 5,
505 NEIGHBOUR_SOUTHEAST = 7,
565 uint16 skirtRowColSkip) = 0;
1800 GEN_COMPOSITE_MAP_MATERIAL
#define _OgreTerrainExport
Superclass for all objects that wish to use custom memory allocators when their new / delete operator...
A 3D box aligned with the x/y/z axes.
A viewpoint from which the scene will be rendered.
Class representing colour.
Shared pointer implementation used to share index buffers.
Shared pointer implementation used to share vertex buffers.
Class representing an image file.
Class encapsulating a standard 4x4 homogeneous matrix.
Utility class to generate a sequentially numbered series of names.
A primitive describing a volume (3D), image (2D) or line (1D) of pixels in memory.
Representation of a ray in space, i.e.
Class that allows listening in on the various stages of SceneManager processing, so that custom behav...
Manages the organisation and rendering of a 'scene' i.e.
IlluminationRenderStage
Describes the stage of rendering when performing complex illumination.
Class representing a node in the scene graph.
Reference-counted shared pointer, used for objects where implicit destruction is required.
Template class for creating single-instance global classes.
Utility class providing helper methods for reading / writing structured data held in a DataStream.
Options class which just stores default options for the terrain.
TerrainMaterialGeneratorPtr getDefaultMaterialGenerator()
Get the default material generator.
void setUseVertexCompressionWhenAvailable(bool enable)
Set whether to allow vertex compression to be used when the material generator states that it support...
void setDefaultResourceGroup(const String &grp)
Set the default resource group to use to load / save terrains.
void setCompositeMapSize(uint16 sz)
Sets the default size of composite maps for a new terrain.
Real getDefaultLayerTextureWorldSize() const
Get the default world size for a layer 'splat' texture to cover.
void setCompositeMapAmbient(const ColourValue &c)
Set the composite map ambient light to use.
Real getMaxPixelError() const
Get the maximum screen pixel error that should be allowed when rendering.
uint16 mDefaultGlobalColourMapSize
void setMaxPixelError(Real pixerr)
Set the maximum screen pixel error that should be allowed when rendering.
static TerrainGlobalOptions * getSingletonPtr(void)
Override standard Singleton retrieval.
void setSkirtSize(Real skirtSz)
method - the default size of 'skirts' used to hide terrain cracks (default 10)
bool mUseVertexCompressionWhenAvailable
const ColourValue & getCompositeMapAmbient() const
Get the composite map ambient light to use.
void setCompositeMapDiffuse(const ColourValue &c)
Set the composite map diffuse light to use.
void setUseRayBoxDistanceCalculation(bool rb)
Sets whether to use an accurate ray / box intersection to determine distance from a terrain tile,...
bool getUseRayBoxDistanceCalculation() const
Returns whether or not to use an accurate calculation of camera distance from a terrain tile (ray / A...
Real getSkirtSize() const
The default size of 'skirts' used to hide terrain cracks (default 10)
void setLightMapDirection(const Vector3 &v)
Set the shadow map light direction to use (world space).
Real mDefaultLayerTextureWorldSize
uint16 getLightMapSize() const
Get the default size of the lightmaps for a new terrain.
const ColourValue & getCompositeMapDiffuse() const
Get the composite map iffuse light to use.
void setLayerBlendMapSize(uint16 sz)
Sets the default size of blend maps for a new terrain.
void setLightMapSize(uint16 sz)
Sets the default size of lightmaps for a new terrain.
Real getCompositeMapDistance() const
Get the distance at which to start using a composite map if present.
void setDefaultGlobalColourMapSize(uint16 sz)
Set the default size of the terrain global colour map for a new terrain.
void setDefaultLayerTextureWorldSize(Real sz)
Set the default world size for a layer 'splat' texture to cover.
uint32 getQueryFlags(void) const
Get the default query flags for terrains.
void setQueryFlags(uint32 flags)
Set the default query flags for terrains.
bool getCastsDynamicShadows() const
Whether the terrain will be able to cast shadows (texture shadows only are supported,...
uint16 getCompositeMapSize() const
Get the default size of the composite maps for a new terrain.
TerrainMaterialGeneratorPtr mDefaultMaterialGenerator
uint8 getRenderQueueGroup(void) const
Get the render queue group that this terrain will be rendered into.
bool getUseVertexCompressionWhenAvailable() const
Get whether to allow vertex compression to be used when the material generator states that it support...
void setVisibilityFlags(uint32 flags)
Set the visbility flags that terrains will be rendered with.
uint16 getDefaultGlobalColourMapSize() const
Get the default size of the terrain global colour map for a new terrain.
ColourValue mCompositeMapAmbient
uint32 getVisibilityFlags(void) const
Get the visbility flags that terrains will be rendered with.
void setCastsDynamicShadows(bool s)
Whether the terrain will be able to cast shadows (texture shadows only are supported,...
virtual ~TerrainGlobalOptions()
void setCompositeMapDistance(Real c)
Set the distance at which to start using a composite map if present.
void addQueryFlags(uint32 flags)
As setQueryFlags, except the flags passed as parameters are appended to the existing flags on this ob...
uint16 getLayerBlendMapSize() const
Get the default size of the blend maps for a new terrain.
Real mCompositeMapDistance
uint16 mLayerBlendMapSize
const String & getDefaultResourceGroup() const
Get the default resource group to use to load / save terrains.
bool mUseRayBoxDistanceCalculation
ColourValue mCompositeMapDiffuse
void setRenderQueueGroup(uint8 grp)
Set the render queue group that terrains will be rendered into.
void setDefaultMaterialGenerator(TerrainMaterialGeneratorPtr gen)
Set the default material generator.
void removeQueryFlags(uint32 flags)
const Vector3 & getLightMapDirection() const
Get the shadow map light direction to use (world space)
static TerrainGlobalOptions & getSingleton(void)
Override standard Singleton retrieval.
Class exposing an interface to a blend map for a given layer.
Terrain LOD data manager.
int getHighestLodPrepared()
int getHighestLodLoaded()
A node in a quad tree used to store a patch of terrain.
Standard implementation of a buffer allocator which re-uses buffers.
map< uint32, HardwareIndexBufferSharedPtr >::type IBufMap
void freeAllBuffers()
Free any buffers we're holding.
VBufList mFreeDeltaBufList
HardwareIndexBufferSharedPtr getSharedIndexBuffer(uint16 batchSize, uint16 vdatasize, size_t vertexIncrement, uint16 xoffset, uint16 yoffset, uint16 numSkirtRowsCols, uint16 skirtRowColSkip)
Get a shared index buffer for a given number of settings.
list< HardwareVertexBufferSharedPtr >::type VBufList
HardwareVertexBufferSharedPtr getVertexBuffer(VBufList &list, size_t vertexSize, size_t numVertices)
uint32 hashIndexBuffer(uint16 batchSize, uint16 vdatasize, size_t vertexIncrement, uint16 xoffset, uint16 yoffset, uint16 numSkirtRowsCols, uint16 skirtRowColSkip)
void allocateVertexBuffers(Terrain *forTerrain, size_t numVertices, HardwareVertexBufferSharedPtr &destPos, HardwareVertexBufferSharedPtr &destDelta)
Allocate (or reuse) vertex buffers for a terrain LOD.
virtual ~DefaultGpuBufferAllocator()
void warmStart(size_t numInstances, uint16 terrainSize, uint16 maxBatchSize, uint16 minBatchSize)
'Warm start' the allocator based on needing x instances of terrain with the given configuration.
DefaultGpuBufferAllocator()
void freeVertexBuffers(const HardwareVertexBufferSharedPtr &posbuf, const HardwareVertexBufferSharedPtr &deltabuf)
Free (or return to the pool) vertex buffers for terrain.
Interface used to by the Terrain instance to allocate GPU buffers.
virtual void allocateVertexBuffers(Terrain *forTerrain, size_t numVertices, HardwareVertexBufferSharedPtr &destPos, HardwareVertexBufferSharedPtr &destDelta)=0
Allocate (or reuse) vertex buffers for a terrain LOD.
virtual HardwareIndexBufferSharedPtr getSharedIndexBuffer(uint16 batchSize, uint16 vdatasize, size_t vertexIncrement, uint16 xoffset, uint16 yoffset, uint16 numSkirtRowsCols, uint16 skirtRowColSkip)=0
Get a shared index buffer for a given number of settings.
virtual ~GpuBufferAllocator()
virtual void freeAllBuffers()=0
Free any buffers we're holding.
virtual void freeVertexBuffers(const HardwareVertexBufferSharedPtr &posbuf, const HardwareVertexBufferSharedPtr &deltabuf)=0
Free (or return to the pool) vertex buffers for terrain.
The main containing class for a chunk of terrain.
void getVectorAlign(const Vector3 &inVec, Alignment align, Vector3 *outVec) const
Translate a vector into world space based on a specified alignment.
PixelBox * mCpuTerrainNormalMap
Pending data.
void deleteBlendMaps(uint8 lowIndex)
Delete blend maps for all layers >= lowIndex.
TerrainLayerBlendMapList mLayerBlendMapList
void setVisibilityFlags(uint32 flags)
Set the visibility flags for this terrain.
static const uint16 WORKQUEUE_DERIVED_DATA_REQUEST
void dirtyLightmapRect(const Rect &rect)
Mark a region of the lightmap as dirty.
void sceneManagerDestroyed(SceneManager *source)
Overridden from SceneManager::Listener.
Vector3 convertPosition(Space inSpace, const Vector3 &inPos, Space outSpace) const
Convert a position from one space to another with respect to this terrain.
WorkQueue::Response * handleRequest(const WorkQueue::Request *req, const WorkQueue *srcQ)
WorkQueue::RequestHandler override.
BytePointerList mCpuBlendMapStorage
Staging post for blend map data.
void dirtyRect(const Rect &rect)
Mark a region of the terrain as dirty.
void createLayerBlendMaps()
void createOrDestroyGPULightmap()
bool isHeightDataModified() const
Returns whether terrain heights have been modified since the terrain was first loaded / defined.
void createOrDestroyGPUNormalMap()
void _setCompositeMapRequired(bool compositeMap)
Request internal implementation options for the terrain material to use, in this case a terrain-wide ...
bool mPrepareInProgress
Don't release Height/DeltaData when preparing.
uint32 getVisibilityFlags(void) const
Get the visibility flags for this terrain.
static void writeLayerDeclaration(const TerrainLayerDeclaration &decl, StreamSerialiser &ser)
Utility method to write a layer declaration to a stream.
static const uint64 TERRAIN_GENERATE_MATERIAL_INTERVAL_MS
uint16 getLayerBlendMapSize() const
Get the requested size of the blend maps used to blend between layers for this terrain.
static const uint16 TERRAINLAYERDECLARATION_CHUNK_VERSION
static NeighbourIndex getNeighbourIndex(long offsetx, long offsety)
Get the neighbour enum for a given offset in a grid (signed).
uint16 mGlobalColourMapSize
static NameGenerator msNormalMapNameGenerator
void clearGPUBlendChannel(uint8 index, uint channel)
Reset a blend channel back to full black.
uint16 mLightmapSizeActual
void widenRectByVector(const Vector3 &vec, const Rect &inRect, Real minHeight, Real maxHeight, Rect &outRect)
Widen a rectangular area of terrain to take into account an extrusion vector, but specify the min / m...
void finaliseNormals(const Rect &rect, PixelBox *normalsBox)
Finalise the normals.
SceneNode * _getRootSceneNode() const
Get the root scene node for the terrain (internal use only)
void getPosition(const Vector3 &TSpos, Vector3 *outWSpos) const
Convert a position from terrain basis space to world space.
uint16 mLayerBlendMapSizeActual
void addLayer(uint8 index, Real worldSize=0, const StringVector *textureNames=0)
Add a new layer to this terrain at a specific index.
void getTerrainPositionAlign(Real x, Real y, Real z, Alignment align, Vector3 *outTSpos) const
Convert a position from world space to terrain basis space based on a specified alignment.
uint8 getLayerCount() const
Get the number of layers in this terrain.
void _dumpTextures(const String &prefix, const String &suffix)
Dump textures to files.
Rect mDirtyGeometryRectForNeighbours
PixelBox * calculateLightmap(const Rect &rect, const Rect &extraTargetRect, Rect &outFinalRect)
Calculate (or recalculate) the terrain lightmap.
void finaliseHeightDeltas(const Rect &rect, bool cpuData)
Finalise the height deltas.
static const uint8 DERIVED_DATA_LIGHTMAP
void shiftUpGPUBlendChannels(uint8 index)
Shift/slide all GPU blend texture channels > index up one slot. Blend data may shift into the next te...
std::pair< bool, Vector3 > checkQuadIntersection(int x, int y, const Ray &ray)
Test a single quad of the terrain for ray intersection.
bool prepare(StreamSerialiser &stream)
Prepare terrain data from saved data.
const TexturePtr & getCompositeMap() const
Get access to the composite map, if enabled (as requested by the material generator)
bool canHandleRequest(const WorkQueue::Request *req, const WorkQueue *srcQ)
WorkQueue::RequestHandler override.
float * getHeightData(long x, long y) const
Get a pointer to the height data for a given point.
void determineLodLevels()
TexturePtr mTerrainNormalMap
Texture storing normals for the whole terrrain.
Real getMinHeight() const
Get the minimum height of the terrain.
TerrainMaterialGeneratorPtr mMaterialGenerator
bool mGlobalColourMapEnabled
SceneManager * getSceneManager() const
void _setMorphRequired(bool morph)
Request internal implementation options for the terrain material to use, in this case vertex morphing...
bool prepare(const ImportData &importData)
Prepare the terrain from some import data rather than loading from native data.
static uint16 _calcSkirtVertexIndex(uint16 mainIndex, uint16 vdatasize, bool isCol, uint16 numSkirtRowsCols, uint16 skirtRowColSkip)
Utility method to calculate the skirt index for a given original vertex index.
NeighbourIndex
Neighbour index enumeration - indexed anticlockwise from East like angles.
uint8 getBlendTextureCount(uint8 numLayers) const
Get the number of blend textures needed for a given number of layers.
uint16 getNumLodLevels() const
Get the total number of LOD levels in the terrain.
bool prepare(DataStreamPtr &stream)
Prepare terrain data from saved data.
uint16 getLODLevelWhenVertexEliminated(long rowOrColulmn) const
Utility method, get the first LOD Level at which this vertex is no longer included.
Real getLayerWorldSize(uint8 index) const
How large an area in world space the texture in a terrain layer covers before repeating.
static void _populateIndexBuffer(uint16 *pIndexes, uint16 batchSize, uint16 vdatasize, size_t vertexIncrement, uint16 xoffset, uint16 yoffset, uint16 numSkirtRowsCols, uint16 skirtRowColSkip)
Utility method to populate a (locked) index buffer.
uint16 getMaxBatchSize() const
Get the maximum size in vertices along one side of a batch.
Vector3 convertDirection(Space inSpace, const Vector3 &inDir, Space outSpace) const
Convert a direction from one space to another with respect to this terrain.
GpuBufferAllocator * mCustomGpuBufferAllocator
static const uint16 TERRAINLAYERSAMPLER_CHUNK_VERSION
void finaliseLightmap(const Rect &rect, PixelBox *lightmapBox)
Finalise the lightmap.
uint16 getCompositeMapSize() const
Get the requested size of composite map for this terrain.
static const uint16 TERRAINGENERALINFO_CHUNK_VERSION
bool _getUseVertexCompression() const
Whether we're using vertex compression or not.
void getPointAlign(long x, long y, float height, Alignment align, Vector3 *outpos) const
Get a Vector3 of the world-space point on the terrain, supplying the height data manually (can be mor...
void _setNormalMapRequired(bool normalMap)
Request internal implementation options for the terrain material to use, in this case a terrain-wide ...
bool canHandleResponse(const WorkQueue::Response *res, const WorkQueue *srcQ)
WorkQueue::ResponseHandler override.
Rect mDirtyLightmapFromNeighboursRect
void getTerrainPositionAlign(const Vector3 &WSpos, Alignment align, Vector3 *outTSpos) const
Convert a position from world space to terrain basis space based on a specified alignment.
int getPositiveLodLevel(int lodLevel) const
Get the real lod level.
void setLayerWorldSize(uint8 index, Real size)
How large an area in world space the texture in a terrain layer covers before repeating.
Real mBase
Base position in world space, relative to mPos.
void getPoint(long x, long y, float height, Vector3 *outpos) const
Get a Vector3 of the world-space point on the terrain, supplying the height data manually (can be mor...
void setQueryFlags(uint32 flags)
Set the query flags for this terrain.
void copyBlendTextureChannel(uint8 srcIndex, uint8 srcChannel, uint8 destIndex, uint8 destChannel)
Copy a GPU blend channel from one source to another. Source and Dest are not required to be in the sa...
TerrainLayerBlendMap * getLayerBlendMap(uint8 layerIndex)
Retrieve the layer blending map for a given layer, which may be used to edit the blending information...
bool mDerivedDataUpdateInProgress
void freeTemporaryResources()
Free as many resources as possible for optimal run-time memory use.
void getPosition(Real x, Real y, Real z, Vector3 *outWSpos) const
Convert a position from terrain basis space to world space.
static const uint32 TERRAINDERIVEDDATA_CHUNK_ID
uint16 mCompositeMapSizeActual
bool isDerivedDataUpdateInProgress() const
Query whether a derived data update is in progress or not.
uint16 mLayerBlendMapSize
void shiftDownGPUBlendChannels(uint8 index)
Shift/slide all GPU blend texture channels > index down one slot. Blend data may shift into the previ...
unsigned long mLastMillis
void getVectorAlign(Real x, Real y, Real z, Alignment align, Vector3 *outVec) const
Translate a vector into world space based on a specified alignment.
const MaterialPtr & _getCompositeMapMaterial() const
Internal getting of material for the terrain composite map.
static const uint32 TERRAINLAYERSAMPLER_CHUNK_ID
const String & _getDerivedResourceGroup() const
Get the final resource group to use when loading / saving.
bool mLightMapShadowsOnly
const float * getDeltaData(long x, long y) const
Get a pointer to the delta data for a given point.
unsigned long mLastLODFrame
Rect calculateHeightDeltas(const Rect &rect)
Calculate (or recalculate) the delta values of heights between a vertex in its recorded position,...
void handleGenerateMaterialResponse(const WorkQueue::Response *res, const WorkQueue *srcQ)
Handler for GenerateMaterial.
void getNeighbourPointOverflow(long x, long y, NeighbourIndex *outindex, long *outx, long *outy) const
TexturePtrList mBlendTextureList
void neighbourModified(NeighbourIndex index, const Rect &edgerect, const Rect &shadowrect)
Notify that a neighbour has just finished updating and that this change affects this tile.
static const uint16 TERRAIN_MAX_BATCH_SIZE
bool _getMorphRequired() const
Get whether LOD morphing is needed.
void deriveUVMultipliers()
void updateCompositeMapWithDelay(Real delay=2)
Performs an update on the terrain composite map based on its dirty region, but only at a maximum freq...
static bool readLayerInstanceList(StreamSerialiser &ser, size_t numSamplers, Terrain::LayerInstanceList &targetlst)
Utility method to read a layer instance list from a stream.
Real getSkirtSize() const
The default size of 'skirts' used to hide terrain cracks (default 10, set for new Terrain using Terra...
static const uint32 TERRAINGENERALINFO_CHUNK_ID
void getTerrainVector(const Vector3 &inVec, Vector3 *outVec) const
Translate a vector from world space to local terrain space based on the alignment options.
static const uint8 DERIVED_DATA_NORMALS
uint8 * mCpuLightmapStorage
const AxisAlignedBox & getAABB() const
Get the AABB (local coords) of the entire terrain.
std::pair< bool, Vector3 > rayIntersects(const Ray &ray, bool cascadeToNeighbours=false, Real distanceLimit=0)
Test for intersection of a given ray with the terrain.
TerrainQuadTreeNode * getQuadTree()
Get the top level of the quad tree which is used to divide up the terrain.
void convertDirection(Space inSpace, const Vector3 &inDir, Space outSpace, Vector3 &outDir) const
Convert a direction from one space to another with respect to this terrain.
void convertPosition(Space inSpace, const Vector3 &inPos, Space outSpace, Vector3 &outPos) const
Convert a position from one space to another with respect to this terrain.
void calculateCurrentLod(Viewport *vp)
static const uint16 TERRAINLAYERSAMPLERELEMENT_CHUNK_VERSION
void updateGeometryWithoutNotifyNeighbours()
Performs an update on the terrain geometry based on the dirty region.
void increaseLodLevel(bool synchronous=false)
Increase Terrain's LOD level by 1.
Vector3 convertTerrainToWorldAxes(const Vector3 &inVec) const
void updateDerivedDataImpl(const Rect &rect, const Rect &lightmapExtraRect, bool synchronous, uint8 typeMask)
RealVector mLayerUVMultiplier
const TexturePtr & getLightmap() const
Get access to the lightmap, if enabled (as requested by the material generator)
void getPositionAlign(Real x, Real y, Real z, Alignment align, Vector3 *outWSpos) const
Convert a position from terrain basis space to world space based on a specified alignment.
Vector3 convertWorldToTerrainAxes(const Vector3 &inVec) const
void addLayer(Real worldSize=0, const StringVector *textureNames=0)
Add a new layer to this terrain.
static size_t _getNumIndexesForBatchSize(uint16 batchSize)
Utility method to get the number of indexes required to render a given batch.
void createGPUBlendTextures()
vector< TexturePtr >::type TexturePtrList
std::pair< uint8, uint8 > getLayerBlendTextureIndex(uint8 layerIndex) const
Get the texture index and colour channel of the blend information for a given layer.
bool mCompositeMapRequired
int getTargetLodLevel() const
float getHeightAtWorldPosition(Real x, Real y, Real z) const
Get the height data for a given world position (projecting the point down on to the terrain).
void createOrDestroyGPUColourMap()
void load(int lodLevel=0, bool synchronous=true)
Load the terrain based on the data already populated via prepare methods.
static void writeLayerInstanceList(const Terrain::LayerInstanceList &lst, StreamSerialiser &ser)
Utility method to write a layer instance list to a stream.
Alignment getAlignment() const
Get the alignment of the terrain.
void getPoint(long x, long y, Vector3 *outpos) const
Get a Vector3 of the world-space point on the terrain, aligned as per options.
void getTerrainPosition(Real x, Real y, Real z, Vector3 *outTSpos) const
Convert a position from world space to terrain basis space.
const TexturePtr & getGlobalColourMap() const
Get access to the global colour map, if enabled.
vector< LayerInstance >::type LayerInstanceList
float getHeightAtPoint(long x, long y) const
Get the height data for a given terrain point.
TerrainLodManager * mLodManager
float * mHeightData
The height data (world coords relative to mPos)
void updateCompositeMap()
Performs an update on the terrain composite map based on its dirty region.
uint8 getRenderQueueGroup(void) const
Get the render queue group that this terrain will be rendered into.
static void convertWorldToTerrainAxes(Alignment align, const Vector3 &worldVec, Vector3 *terrainVec)
Utility method to convert axes from world space to terrain space (xy terrain, z up)
Real mScale
Relationship between one point on the terrain and world size.
const Camera * mLastLODCamera
uint8 getMaxLayers() const
Get the maximum number of layers supported with the current options.
float * mDeltaData
The delta information defining how a vertex moves before it is removed at a lower LOD.
static NameGenerator msBlendTextureGenerator
int getHighestLodLoaded() const
Real getMaxHeight() const
Get the maximum height of the terrain.
void updateGeometry()
Performs an update on the terrain geometry based on the dirty region.
void waitForDerivedProcesses()
void distributeVertexData()
void getEdgeRect(NeighbourIndex index, long range, Rect *outRect) const
PixelBox * calculateNormals(const Rect &rect, Rect &outFinalRect)
Calculate (or recalculate) the normals on the terrain.
void _setLightMapRequired(bool lightMap, bool shadowsOnly=false)
Request internal implementation options for the terrain material to use, in this case a terrain-wide ...
uint8 getBlendTextureCount() const
Get the number of blend textures in use.
static const uint16 TERRAINDERIVEDDATA_CHUNK_VERSION
void getNeighbourEdgeRect(NeighbourIndex index, const Rect &inRect, Rect *outRect) const
void setSize(uint16 newSize)
Set the size of terrain in vertices along one side.
const float * getDeltaData() const
Get a pointer to all the delta data for this terrain.
void getPointFromSelfOrNeighbour(long x, long y, Vector3 *outpos) const
Get a Vector3 of the world-space point on the terrain, aligned as per options.
void getVector(const Vector3 &inVec, Vector3 *outVec) const
Translate a vector into world space based on the alignment options.
OGRE_RW_MUTEX(mNeighbourMutex)
void notifyNeighbours()
Tell this instance to notify all neighbours that will be affected by a height change that has taken p...
Terrain(SceneManager *sm)
Constructor.
PixelFormat getBlendTextureFormat(uint8 textureIndex, uint8 numLayers) const
void dirtyLightmap()
Mark a the entire lightmap as dirty.
size_t getDeltaBufVertexSize() const
void setRenderQueueGroup(uint8 grp)
Set the render queue group that this terrain will be rendered into.
void setNeighbour(NeighbourIndex index, Terrain *neighbour, bool recalculate=false, bool notifyOther=true)
Set a terrain's neighbour, or null to detach one.
void removeQueryFlags(uint32 flags)
void updateDerivedData(bool synchronous=false, uint8 typeMask=0xFF)
Updates derived data for the terrain (LOD, lighting) to reflect changed height data,...
uint16 getSize() const
Get the size of the terrain in vertices along one side.
Real getBoundingRadius() const
Get the bounding radius of the entire terrain.
const Vector3 & getPosition() const
Get the world position of the terrain centre.
vector< Real >::type RealVector
void _dirtyCompositeMapRect(const Rect &rect)
Mark a region of the terrain composite map as dirty.
bool getGlobalColourMapEnabled() const
Get whether a global colour map is enabled on this terrain.
void unprepare()
Free CPU resources created during prepare methods.
void setPosition(const Vector3 &pos)
Set the position of the terrain centre in world coordinates.
static const uint16 WORKQUEUE_GENERATE_MATERIAL_REQUEST
void dirty()
Mark the entire terrain as dirty.
void getTerrainPosition(const Vector3 &WSpos, Vector3 *outTSpos) const
Convert a position from world space to terrain basis space.
void setResourceGroup(const String &resGroup)
Set the resource group to use when loading / saving.
void getTerrainVectorAlign(const Vector3 &inVec, Alignment align, Vector3 *outVec) const
Translate a vector from world space to local terrain space based on a specified alignment.
TexturePtr getTerrainNormalMap() const
Get the (global) normal map texture.
const TerrainLayerDeclaration & getLayerDeclaration() const
Get the declaration which describes the layers in this terrain.
static const uint8 DERIVED_DATA_ALL
bool prepare(const String &filename)
Prepare the terrain from a standalone file.
static NameGenerator msCompositeMapNameGenerator
void convertSpace(Space inSpace, const Vector3 &inVec, Space outSpace, Vector3 &outVec, bool translation) const
uint16 mNumLodLevelsPerLeafNode
const String & getBlendTextureName(uint8 textureIndex) const
Get the name of the packed blend texture at a specific index.
void createOrDestroyGPUCompositeMap()
size_t getPositionBufVertexSize() const
const MaterialPtr & getMaterial() const
Get the material being used for the terrain.
void getTerrainVector(Real x, Real y, Real z, Vector3 *outVec) const
Translate a vector from world space to local terrain space based on the alignment options.
uint32 getQueryFlags(void) const
Get the query flags for this terrain.
uint getGeoDataSizeAtLod(uint16 lodLevel) const
Gets the data size at a given LOD level.
const MaterialPtr & getCompositeMapMaterial() const
Get the material being used for the terrain composite map.
uint8 * mCpuCompositeMapStorage
uint8 getBlendTextureIndex(uint8 layerIndex) const
Get the index of the blend texture that a given layer uses.
Real getWorldSize() const
Get the size of the terrain in world units.
bool isModified() const
Returns whether this terrain has been modified since it was first loaded / defined.
void decreaseLodLevel()
Removes highest LOD level loaded.
void setGlobalColourMapEnabled(bool enabled, uint16 size=0)
Set whether a global colour map is enabled.
Real getLayerUVMultiplier(uint8 index) const
Get the layer UV multiplier.
static const uint16 TERRAINLAYERINSTANCE_CHUNK_VERSION
static bool readLayerDeclaration(StreamSerialiser &ser, TerrainLayerDeclaration &targetdecl)
Utility method to read a layer declaration from a stream.
static const uint32 TERRAINLAYERDECLARATION_CHUNK_ID
uint16 getLODLevelWhenVertexEliminated(long x, long y) const
Utility method, get the first LOD Level at which this vertex is no longer included.
Alignment
The alignment of the terrain.
static const uint32 TERRAINLAYERINSTANCE_CHUNK_ID
void save(const String &filename)
Save terrain data in native form to a standalone file.
uint16 getGlobalColourMapSize() const
Get the size of the global colour map (if used)
void getPointTransform(Matrix4 *outXform) const
Get a transform which converts Vector4(xindex, yindex, height, 1) into an object-space position inclu...
void unload()
Unload the terrain and free GPU resources.
const String & getLayerTextureName(uint8 layerIndex, uint8 samplerIndex) const
Get the name of the texture bound to a given index within a given layer.
AxisAlignedBox getWorldAABB() const
Get the AABB (world coords) of the entire terrain.
static const uint32 TERRAIN_CHUNK_ID
float getHeightAtWorldPosition(const Vector3 &pos) const
Get the height data for a given world position (projecting the point down on to the terrain).
unsigned long long int mMaterialGenerationCount
bool mCompositeMapDirtyRectLightmapUpdate
True if the updates included lightmap changes (widen)
bool mMaterialParamsDirty
vector< uint8 * >::type BytePointerList
void setHeightAtPoint(long x, long y, float h)
Set the height data for a given terrain point.
void addQueryFlags(uint32 flags)
As setQueryFlags, except the flags passed as parameters are appended to the existing flags on this ob...
const MaterialPtr & _getMaterial() const
Internal getting of material.
void removeFromNeighbours()
Removes this terrain instance from neighbouring terrain's list of neighbours.
void setWorldSize(Real newWorldSize)
Set the world size of terrain.
static NeighbourIndex getOppositeNeighbour(NeighbourIndex index)
Get the opposite neighbour relationship (useful for finding the neighbour index from the perspective ...
void handleResponse(const WorkQueue::Response *res, const WorkQueue *srcQ)
WorkQueue::ResponseHandler override.
void preFindVisibleObjects(SceneManager *source, SceneManager::IlluminationRenderStage irs, Viewport *v)
Overridden from SceneManager::Listener.
float * getHeightData() const
Get a pointer to all the height data for this terrain.
const String & getMaterialName() const
Get the name of the material being used for the terrain.
void getPointAlign(long x, long y, Alignment align, Vector3 *outpos) const
Get a Vector3 of the world-space point on the terrain, aligned Y-up always.
static const uint8 DERIVED_DATA_DELTAS
static const uint32 TERRAINLAYERSAMPLERELEMENT_CHUNK_ID
uint16 getLightmapSize() const
Get the requested size of lightmap for this terrain.
void replaceLayer(uint8 index, bool keepBlends, Real worldSize=0, const StringVector *textureNames=0)
Replace an existing terrain layer, optionally preserving all other layer blend maps.
void removeLayer(uint8 index)
Remove a layer from the terrain.
const TexturePtr & getLayerBlendTexture(uint8 index) const
Get a blend texture with a given index.
void update(bool synchronous=false)
Trigger the update process for the terrain.
void getNeighbourPoint(NeighbourIndex index, long x, long y, long *outx, long *outy) const
void load(StreamSerialiser &stream)
Prepare and load the terrain in one simple call from a stream.
float getHeightAtTerrainPosition(Real x, Real y) const
Get the height data for a given terrain position.
Terrain * getNeighbour(NeighbourIndex index) const
Retrieve the terrain's neighbour, or null if not present.
void load(const String &filename)
Prepare and load the terrain in one simple call from a standalone file.
uint16 getNumLodLevelsPerLeaf() const
Get the number of LOD levels in a leaf of the terrain quadtree.
Space
Enumeration of relative spaces that you might want to use to address the terrain.
Rect mCompositeMapDirtyRect
static NameGenerator msLightmapNameGenerator
DefaultGpuBufferAllocator mDefaultGpuBufferAllocator
static const size_t LOD_MORPH_CUSTOM_PARAM
Rect mDirtyDerivedDataRect
bool isLoaded() const
Return whether the terrain is loaded.
uint8 * mCpuColourMapStorage
GpuBufferAllocator * getGpuBufferAllocator()
Get the current buffer allocator.
void setLayerTextureName(uint8 layerIndex, uint8 samplerIndex, const String &textureName)
Set the name of the texture bound to a given index within a given layer.
LayerInstanceList mLayers
TerrainQuadTreeNode * mQuadTree
void getTerrainVectorAlign(Real x, Real y, Real z, Alignment align, Vector3 *outVec) const
Translate a vector from world space to local terrain space based on a specified alignment.
uint8 mDerivedUpdatePendingMask
If another update is requested while one is already running.
MaterialPtr mCompositeMapMaterial
void getPositionAlign(const Vector3 &TSpos, Alignment align, Vector3 *outWSpos) const
Convert a position from terrain basis space to world space based on a specified alignment.
void getVector(Real x, Real y, Real z, Vector3 *outVec) const
Translate a vector into world space based on the alignment options.
unsigned long mCompositeMapUpdateCountdown
static void convertTerrainToWorldAxes(Alignment align, const Vector3 &terrainVec, Vector3 *worldVec)
Utility method to convert axes from terrain space (xy terrain, z up) tp world space.
void checkLayers(bool includeGPUResources)
const String & getResourceGroup() const
Get the resource group to use when loading / saving.
void save(StreamSerialiser &stream)
Save terrain data in native form to a serializing stream.
int getHighestLodPrepared() const
void setGpuBufferAllocator(GpuBufferAllocator *alloc)
Tell this instance to use the given GpuBufferAllocator.
static const uint16 TERRAIN_CHUNK_VERSION
Terrain * raySelectNeighbour(const Ray &ray, Real distanceLimit=0)
Utility method to pick a neighbour based on a ray.
bool mGenerateMaterialInProgress
uint16 getMinBatchSize() const
Get the minimum size in vertices along one side of a batch.
uint16 getResolutionAtLod(uint16 lodLevel) const
Gets the resolution of the entire terrain (down one edge) at a given LOD level.
void widenRectByVector(const Vector3 &vec, const Rect &inRect, Rect &outRect)
Widen a rectangular area of terrain to take into account an extrusion vector.
TerrainLayerDeclaration mLayerDecl
Standard 3-dimensional vector.
An abstraction of a viewport, i.e.
Interface definition for a handler of requests.
General purpose request structure.
Interface definition for a handler of responses.
Interface to a general purpose request / response style background work queue.
PixelFormat
The pixel format used for images, textures, and render surfaces.
#define OGRE_ALLOC_T(T, count, category)
Allocate a block of memory for a primitive type, and indicate the category of usage.
#define OGRE_FREE(ptr, category)
Free the memory allocated with OGRE_MALLOC or OGRE_ALLOC_T. Category is required to be restated to en...
@ MEMCATEGORY_GEOMETRY
Geometry held in main memory.
unsigned long long uint64
The definition of the information each layer will contain in this terrain.
A data holder for communicating with the background derived data update.
Rect lightmapExtraDirtyRect
_OgreTerrainExport friend std::ostream & operator<<(std::ostream &o, const DerivedDataRequest &r)
A data holder for communicating with the background derived data update.
Rect normalUpdateRect
The area of normals that was updated.
Rect deltaUpdateRect
The area of deltas that was updated.
Rect lightmapUpdateRect
The area of lightmap that was updated.
_OgreTerrainExport friend std::ostream & operator<<(std::ostream &o, const DerivedDataResponse &r)
uint8 remainingTypeMask
Remaining types not yet processed.
PixelBox * normalMapBox
All CPU-side data, independent of textures; to be blitted in main thread.
A data holder for communicating with the background GetMaterial.
_OgreTerrainExport friend std::ostream & operator<<(std::ostream &o, const GenerateMaterialRequest &r)
GenerateMaterialStage stage
Structure encapsulating import data that you may use to bootstrap the terrain without loading from a ...
uint16 terrainSize
Terrain size (along one edge) in vertices; must be 2^n+1.
float constantHeight
If neither inputImage or inputFloat are supplied, the constant height at which the initial terrain sh...
LayerInstanceList layerList
List of layer structures, one for each layer required.
Real worldSize
The world size of the terrain.
uint16 minBatchSize
Minimum batch size (along one edge) in vertices; must be 2^n+1.
Image * inputImage
Optional heightmap providing the initial heights for the terrain.
void destroy()
Delete any input data if this struct is set to do so.
ImportData(const ImportData &rhs)
ImportData & operator=(const ImportData &rhs)
Alignment terrainAlign
The alignment of the terrain.
Real inputBias
How to bias the input values provided (if any)
float * inputFloat
Optional list of terrainSize * terrainSize floats defining the terrain.
bool deleteInputData
Whether this structure should 'own' the input data (inputImage and inputFloat), and therefore delete ...
uint16 maxBatchSize
Maximum batch size (along one edge) in vertices; must be 2^n+1 and <= 65.
Vector3 pos
Position of the terrain.
TerrainLayerDeclaration layerDeclaration
Definition of the contents of each layer (required).
Real inputScale
How to scale the input values provided (if any)
An instance of a layer, with specific texture names.
StringVector textureNames
List of texture names to import; must match with TerrainLayerDeclaration.
Real worldSize
The world size of the texture to be applied in this layer.
General purpose response structure.
std::map< K, V, P, A > type