MapTerrainT::MapTerrainT(const BoundingBox3fT& Box, const wxString& HeightMapFile, EditorMaterialI* Material) : MapPrimitiveT(wxColour(50 + (rand() % 50), 150 + (rand() % 106), 30)), m_Resolution(65), m_HeightData(), m_TerrainBounds(Box), m_Material(Material), m_ToolBounds(Vector3fT()), m_RenderEyeDropper(false), m_NeedsUpdate(true), m_Terrain(), m_TerrainMesh(MatSys::MeshT::TriangleStrip) { // Try to load the height data from the passed height map file. Create empty terrain if it fails. try { //XXX Hmmmmm. Evtl. sollten wir eine TerrainLoaderT Klasse machen (die später auch speichern kann)... LoadHeightData(HeightMapFile); } catch (const BitmapT::LoadErrorT& /*E*/) { // Set default resolution in case LoadHeightData has already changed it. m_Resolution=65; for (unsigned int i=0; i<m_Resolution*m_Resolution; i++) m_HeightData.PushBack(0); } }
void MapTerrainT::SetToolBounds(int PosX, int PosY, int Radius) { if (PosX==-1 || PosY==-1 || Radius==-1) { // Set bounding box to zero. m_ToolBounds=BoundingBox3fT(Vector3fT()); return; } // First we have to flip the y position horizontally. PosY=m_Resolution-1-PosY; // Calculate tool bounds from terrain bounds. const float ToolMinX=float(PosX-Radius-1)/float(m_Resolution-1); const float ToolMinY=float(PosY-Radius-1)/float(m_Resolution-1); const float ToolMaxX=float(PosX+Radius+1)/float(m_Resolution-1); const float ToolMaxY=float(PosY+Radius+1)/float(m_Resolution-1); const float TerrainXLength=m_TerrainBounds.Max.x-m_TerrainBounds.Min.x; const float TerrainYLength=m_TerrainBounds.Max.y-m_TerrainBounds.Min.y; const Vector3fT ToolMin(m_TerrainBounds.Min.x+TerrainXLength*ToolMinX, m_TerrainBounds.Min.y+TerrainYLength*ToolMinY, 0.0f); const Vector3fT ToolMax(m_TerrainBounds.Min.x+TerrainXLength*ToolMaxX, m_TerrainBounds.Min.y+TerrainYLength*ToolMaxY, 0.0f); m_ToolBounds=BoundingBox3fT(ToolMin, ToolMax); }
inline Vector3fT conv(const btVector3& v) { return Vector3fT(v.x(), v.y(), v.z()); }