Combining Octree & Heightmap code, easy question!
Hi. Thanx for looking. The question I have is fairly easy I guess, because it''s quite basic C++ I guess, but for some reason it won''t work.
In my game engine, I implemented octree code like in the gametutorials.com tutorials. (Octree Tutorial 1 & 2)
This was done after I implemented the heightmap loading, also much like on this site. (At least, it also loads in the heightmap in a byte. The rendering is quite different but that''s of no matter at this subject)
The octree code loades from a .RAW file in which every line contains 3 floats (x, y, z for a vertex)
But a normal .RAW file like the ones used for the heightmap tutorial are totally different. What I''m trying to do is convert the "normal" .RAW data (which I load in into a byte like in the heightmap tutorials) to the data format used in the octree tutorials (load all the vertex data into a list of Vectors, which is necessary/really usefull for the frustum checking)
Still with me? K. First, my code for loading in a heightmap .RAW file (into a byte)
BOOL CHeightmap::LoadRAW(LPSTR strFile, int size, BYTE *pByteArray)
{
FILE *pFile = NULL;
pFile = fopen(strFile, "rb");
if (pFile == NULL)
{
g_log.Print("Could not load map file");
return FALSE;
}
fread(pByteArray, 1, size, pFile);
int result = ferror(pFile);
if (result)
{
g_log.Print("Could not get data out of map file");
return FALSE;
}
fclose(pFile);
return TRUE;
}
now the Y-coord data is in the byte array.
The loading code for the octree data is like this:
void LoadWorld(char filename[])
{
FILE *fp = fopen(filename, "r");
if (!fp)
g_log.Print("Could not load world");
CVector vTemp;
while (TRUE)
{
BOOL result = fscanf(fp, "%f %f %f\n", &vTemp.x, &vTemp.y, &vTemp.z);
if (result == EOF)
break;
g_NumberOfVerts++;
}
g_pVertices = new CVector [g_NumberOfVerts];
rewind(fp);
int index = 0;
for (int i = 0; i < g_NumberOfVerts; i++)
{
fscanf(fp, "%f %f %f\n", &g_pVertices[index].x, &g_pVertices[index].y, &g_pVertices[index].z);
index++;
}
fclose(fp);
}
What I want to do again: Load in a .RAW like in method one, but convert the data in the BYTE pByteArray to the data type which you get from the 2nd piece o'' code. (an int g_NumberOfVerts and the x, y, z for the vertices in Cvector array g_pVertices. I think these 2 variabeles are the only 2 needed for the octree code right? So my attempt was this:
if (!g_Heightmapper.LoadRAW("world.raw", 128, g_HeightMap))
return FALSE;
g_pVertices = new CVector [128 * 128];
for (int i = 0; i < 128; i++)
{
for (int j = 0; j < 128; j++)
{
g_pVertices.x = float(j);
g_pVertices.y = float(g_HeightMap);
g_pVertices.z = float(i);
}
}
g_NumberOfVerts = 128 * 128;
It doesn''t work though… I get REALLY REALLY weird errors (can''t really explain, no debug errors but really weird windows errors.)
Once I strip the line g_NumberOfverts = 128 * 128; I don''t get the errors, but now there''s no working code of course…
Can anybody tell me what I''m doing wrong or give me a working piece o'' code? Thanks in advance!
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement