there is a method?
or i need to create a terrain with a heightmap/mesh, and than modify it

i want to be able to create from code a terrain of 512x512 or 4096x4096 if i want...
thx for the responses

Code: Select all
//! Initializes the terrain data. Loads the vertices from the heightMapFile
bool CTerrainSceneNode::loadHeightMap( io::IReadFile* file, video::SColor vertexColor, s32 smoothFactor )
{
if( !file )
return false;
u32 startTime = os::Timer::getRealTime();
video::IImage* heightMap = SceneManager->getVideoDriver()->createImageFromFile( file );
Code: Select all
driver->createImage( format, dimension2d< s32 >( x, y ) );
Code: Select all
#include "stdafx.h"
using namespace irr;
//using namespace core;
class CTerrain
{
protected:
private:
video::IImage* m_pImage;
scene::ITerrainSceneNode* m_pTerrain;
IrrlichtDevice* m_pDevice;
public:
CTerrain();
~CTerrain();
bool Init(IrrlichtDevice* device);
void GenerateCasual();
};
Code: Select all
#include "stdafx.h"
#include "CTerrain.h"
CTerrain::CTerrain()
{
}
/* */
CTerrain::~CTerrain()
{
}
/* */
bool CTerrain::Init(IrrlichtDevice* device)
{
srand((unsigned)time(0));
m_pDevice = device;
return true;
}
/* */
void CTerrain::GenerateCasual()
{
m_pImage = m_pDevice->getVideoDriver()->createImage(video::ECF_A8R8G8B8, core::dimension2d<s32>(128, 128));
m_pImage->fill(video::SColor(255, 0, 0, 0));
for(int counter = 0; counter < 8; ++counter)
{
s32 x = rand() % 128;
s32 y = rand() % 128;
for(int i = 0; i < 5000; ++i)
{
s32 v = rand() % 4;
switch(v)
{
case 0:
if(++x > 127){ --x; }
break;
case 1:
if(--x < 0){ ++x; }
break;
case 2:
if(++x > 127){ --y; }
break;
case 3:
if(--y < 0){ ++y; }
break;
}
video::SColor color = m_pImage->getPixel(x, y);
u32 red = color.getRed();
u32 blue = color.getBlue();
u32 green = color.getGreen();
color.setRed((red <= 256) ? red += 16 : red);
color.setBlue((blue <= 256) ? blue += 16: blue);
color.setGreen((green <= 256) ? green += 16 : green);
m_pImage->setPixel(x, y, color);
}
}
//io::IWriteFile* file = m_pDevice->getFileSystem()->createAndWriteFile("heightmap.jpg");
m_pDevice->getVideoDriver()->writeImageToFile(m_pImage, "heightmap.jpg");
//file->drop();
m_pTerrain = m_pDevice->getSceneManager()->addTerrainSceneNode("heightmap.jpg", 0, -1,
core::vector3df(0.0f, 0.0f, 0.0f), core::vector3df(0.0f, 0.0f, 0.0f), core::vector3df(40.0f, 4.4f, 40.0f),
video::SColor(255, 255, 255, 255), 5, scene::ETPS_17, 4);
m_pTerrain->setMaterialFlag(video::EMF_LIGHTING, false);
m_pTerrain->setMaterialFlag(video::EMF_WIREFRAME, !m_pTerrain->getMaterial(0).Wireframe);
m_pTerrain->setMaterialFlag(video::EMF_POINTCLOUD, false);
}
Code: Select all
#include <Irrlicht.h>
#ifdef _MSC_VER
#pragma comment(lib, "Irrlicht.lib")
#endif
#include <iostream>
#include <cstdlib>
#include <vector>
#include <string>
#include <ctime>