0
我正在使用libnoise庫生成隨機地形並將其保存在以。米爲單位測量其仰角點的.raw文件中。這個terrain文件包含16位有符號的big-endian值,按照行優先順序從南到北排列。這是我用來閱讀文件的代碼。讀取包含高度圖的.raw文件
struct HeightMapType
{
float x, y, z;
float nx, ny, nz;
float r, g, b;
};
bool Terrain::LoadRawFile()
{
int error, i, j, index;
FILE* filePtr;
unsigned long long imageSize, count;
unsigned short* rawImage;
// Create the float array to hold the height map data.
m_heightMap = new HeightMapType[m_terrainWidth * m_terrainHeight];
if(!m_heightMap)
{
return false;
}
// Open the 16 bit raw height map file for reading in binary.
error = fopen_s(&filePtr, m_terrainFilename, "rb");
if(error != 0)
{
return false;
}
// Calculate the size of the raw image data.
imageSize = m_terrainHeight * m_terrainWidth;
// Allocate memory for the raw image data.
rawImage = new unsigned short[imageSize];
if(!rawImage)
{
return false;
}
// Read in the raw image data.
count = fread(rawImage, sizeof(unsigned short), imageSize, filePtr);
if(count != imageSize)
{
return false;
}
// Close the file.
error = fclose(filePtr);
if(error != 0)
{
return false;
}
// Copy the image data into the height map array.
for(j=0; j<m_terrainHeight; j++)
{
for(i=0; i<m_terrainWidth; i++)
{
index = (m_terrainWidth * j) + i;
// Store the height at this point in the height map array.
m_heightMap[index].y = (float)rawImage[index];
}
}
// Release the bitmap image data.
delete [] rawImage;
rawImage = 0;
// Release the terrain filename now that it has been read in.
delete [] m_terrainFilename;
m_terrainFilename = 0;
return true;
}
該代碼不返回任何錯誤,但是這是呈現的結果:rawFileRendering。
我測試了另一個保存在原始文件中的高度圖代碼(由rastertek給出),它的工作原理。
你知道爲什麼渲染場景是這樣嗎? 謝謝你的幫助。
感謝您的幫助,但它仍然不會改變渲染的圖像。有沒有辦法找到兩個不同的原始文件之間的差異,以瞭解什麼是錯的? – Swagging
必須有一些變化。如果它根本沒有改變,那麼你的代碼還有一些其他的問題。如果你分享.raw文件,我可以研究它,那裏有什麼。 – geza
好的,謝謝!你可以在這裏找到鏈接:https://drive.google.com/file/d/0B5qZUPGKjCpqUW1iMlVIV3Z0M0E/view?usp=sharing – Swagging