Hi,
I'm doing a planet generator for my game. But I've some problems with the c++ libnoise.
I successfully generated a quadtree (maybe with a bad algo... ^^') and successfully transformed it into a sphere according to this great blog.
But now, I want to apply a perlin noise using the c++ libnoise library. But the render is not really good... But I think I'm in the right way. My problem is about the noise coherence between each faces of my cube. The faces are not joined. Here is a screenshot.
I do this following code to generate one face of my cube :
//generating the front face...
Surface* frontFace = model->AddSurface();
for(int i = 0 ; i<numSquare ; i++)
{
for(int j = 0 ; j<numSquare ; j++)
{
float x = -1+i*segment;
float y = -1+j*segment;
float z = -1;
float dx = (x * sqrtf(1.0 - (y*y/2.0) - (z*z/2.0) + (y*y*z*z/3.0))) * Radius; //transform into sphere
float dy = (y * sqrtf(1.0 - (z*z/2.0) - (x*x/2.0) + (z*z*x*x/3.0))) * Radius;
float dz = (z * sqrtf(1.0 - (x*x/2.0) - (y*y/2.0) + (x*x*y*y/3.0))) * Radius;
float ndz = dz + perlinModule.GetValue(dx,dy,dz);//generate noise
int v0 = frontFace->AddVertex(dx,dy,ndz);
x = -1+(i*segment)+segment;
y = -1+j*segment;
z = -1;
dx = (x * sqrtf(1.0 - (y*y/2.0) - (z*z/2.0) + (y*y*z*z/3.0))) * Radius;
dy = (y * sqrtf(1.0 - (z*z/2.0) - (x*x/2.0) + (z*z*x*x/3.0))) * Radius;
dz = (z * sqrtf(1.0 - (x*x/2.0) - (y*y/2.0) + (x*x*y*y/3.0))) * Radius;
ndz = dz + perlinModule.GetValue(dx,dy,dz);
int v1 = frontFace->AddVertex(dx,dy,ndz);
x = -1+(i*segment)+segment;
y = -1+(j*segment)+segment;
z = -1;
dx = (x * sqrtf(1.0 - (y*y/2.0) - (z*z/2.0) + (y*y*z*z/3.0))) * Radius;
dy = (y * sqrtf(1.0 - (z*z/2.0) - (x*x/2.0) + (z*z*x*x/3.0))) * Radius;
dz = (z * sqrtf(1.0 - (x*x/2.0) - (y*y/2.0) + (x*x*y*y/3.0))) * Radius;
ndz = dz + perlinModule.GetValue(dx,dy,dz);
int v2 = frontFace->AddVertex(dx,dy,ndz);
x = -1+i*segment;
y = -1+(j*segment)+segment;
z = -1;
dx = (x * sqrtf(1.0 - (y*y/2.0) - (z*z/2.0) + (y*y*z*z/3.0))) * Radius;
dy = (y * sqrtf(1.0 - (z*z/2.0) - (x*x/2.0) + (z*z*x*x/3.0))) * Radius;
dz = (z * sqrtf(1.0 - (x*x/2.0) - (y*y/2.0) + (x*x*y*y/3.0))) * Radius;
ndz = dz + perlinModule.GetValue(dx,dy,dz);
int v3 = frontFace->AddVertex(dx,dy,ndz);
frontFace->AddTriangle(v2,v1,v0);
frontFace->AddTriangle(v0,v3,v2);
}
}
I don't know how to solve this. I didn't find good explanations on the web. I'm not really good in maths but I've some logic ideas (I think ...), it's a miracle if this code works xD. Maybe it's my cube generation algorythm which is bad...
I understood that some others use a lerp function to join "smoothly" each faces, but I don't know how I can apply this to my code. ^^' If someone can help it would be great.
Thx !
PS: I'm french so really sorry for my english