Ejemplo n.º 1
0
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);
    }
}
Ejemplo n.º 2
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);
}
Ejemplo n.º 3
0
inline Vector3fT conv(const btVector3& v) { return Vector3fT(v.x(), v.y(), v.z()); }