আমি এই নিবন্ধ অনুযায়ী একটি হীরা-বর্গাকার অ্যালগরিদম প্রয়োগ করেছি: http://www.lightthouse3d.com/opengl/terrain/index.php?mpd2
সমস্যাটি হ'ল আমি সমস্ত মানচিত্রে এই খাড়া খালি পেয়েছি। এটি প্রান্তগুলিতে ঘটে যখন অঞ্চলটি পুনরাবৃত্তভাবে উপ-বিভক্ত হয়:
উত্সটি এখানে:
void DiamondSquare(unsigned x1,unsigned y1,unsigned x2,unsigned y2,float range)
{
int c1 = (int)x2 - (int)x1;
int c2 = (int)y2 - (int)y1;
unsigned hx = (x2 - x1)/2;
unsigned hy = (y2 - y1)/2;
if((c1 <= 1) || (c2 <= 1))
return;
// Diamond stage
float a = m_heightmap[x1][y1];
float b = m_heightmap[x2][y1];
float c = m_heightmap[x1][y2];
float d = m_heightmap[x2][y2];
float e = (a+b+c+d) / 4 + GetRnd() * range;
m_heightmap[x1 + hx][y1 + hy] = e;
// Square stage
float f = (a + c + e + e) / 4 + GetRnd() * range;
m_heightmap[x1][y1+hy] = f;
float g = (a + b + e + e) / 4 + GetRnd() * range;
m_heightmap[x1+hx][y1] = g;
float h = (b + d + e + e) / 4 + GetRnd() * range;
m_heightmap[x2][y1+hy] = h;
float i = (c + d + e + e) / 4 + GetRnd() * range;
m_heightmap[x1+hx][y2] = i;
DiamondSquare(x1, y1, x1+hx, y1+hy, range / 2.0); // Upper left
DiamondSquare(x1+hx, y1, x2, y1+hy, range / 2.0); // Upper right
DiamondSquare(x1, y1+hy, x1+hx, y2, range / 2.0); // Lower left
DiamondSquare(x1+hx, y1+hy, x2, y2, range / 2.0); // Lower right
}
পরামিতি: (x1, y1), (x2, y2) - স্থানাঙ্কগুলি যা একটি অঞ্চলকে একটি উচ্চতা ম্যাপ (ডিফল্ট (0,0) (128,128)) এ সংজ্ঞায়িত করে। পরিসীমা - মূলত সর্বাধিক উচ্চতা। (ডিফল্ট 32)
সাহায্যের প্রশংসা করা হবে।