Esempio n. 1
0
Terrain::~Terrain(void)
{
	glDeleteBuffers(1, &vboId);
	glDeleteBuffers(1, &eboId);
	SAFE_DELETE_ARRAY_PTR( heightMap );
	SAFE_DELETE_ARRAY_PTR(vertices);
	SAFE_DELETE_ARRAY_PTR(normals);
	SAFE_DELETE_ARRAY_PTR(elements);
}
Esempio n. 2
0
void Terrain::loadHeightMap(string filename, int res_x, int res_y)
{
	PNG inputFile;
	inputFile.load(filename);
	dim_x = inputFile.width;
	dim_y = inputFile.height;
	unsigned char * data = inputFile.getData();

	int size = dim_x*dim_y;
	float * originalHeightMap = new float[size];
	int i,x,y;

	for (i=0; i<size; i++){
		originalHeightMap[i] = 256*data[2*i]+data[2*i + 1];
	}
	// recalculate to the given resolution (use linear interpolation...)
	size = res_x*res_y;
	heightMap = new float[size];
	float step_x = float(dim_x)/float(res_x);
	float step_y = float(dim_y)/float(res_y);
	
	for(x=0; x<res_x; x++)
	{
		for(y=0; y<res_y; y++)
		{
			heightMap[x*res_y + y] = getHeightAt(originalHeightMap, dim_x, dim_y, float(x*step_x), float(y*step_y));
		}
	}
	SAFE_DELETE_ARRAY_PTR(originalHeightMap);

}
Esempio n. 3
0
int CLDEditTxtFile::_fgets(CSimpleArray<CString>& arrFileItems)
{
	int nRet = -1;
	USES_CONVERSION;
	arrFileItems.RemoveAll();
	HANDLE hFile = INVALID_HANDLE_VALUE;
	hFile = CreateFile(m_strTxtFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
	if (INVALID_HANDLE_VALUE == hFile)
		return nRet;
	char *pszFileBuffer = NULL;

	do 
	{
		DWORD dwFileSize = 0;
		dwFileSize = ::GetFileSize(hFile, NULL);
		if (0 == dwFileSize || dwFileSize > 1*1024*1024)//大于1M的文件默认任务失败
			break;

		dwFileSize += 1;
		pszFileBuffer = new char[dwFileSize];
		ZeroMemory(pszFileBuffer, dwFileSize);
		DWORD dwRetSize = 0;
		if (FALSE == ReadFile(hFile, pszFileBuffer, dwFileSize, &dwRetSize, NULL) || 0 == dwRetSize)
			break;
		int nFind = -1;
		CString strValue;//(CA2W(pszFileBuffer));
		strValue = CA2W(pszFileBuffer);
		if (FALSE == strValue.IsEmpty())
			strValue += TEXT("\r\n");

		nFind = strValue.Find('\n');
		while(nFind >= 0)
		{
			if (NULL != m_pStop && TRUE == *m_pStop)
				break;

			CString strTmp;
			strTmp = strValue.Left(nFind+1);
			arrFileItems.Add(strTmp);
			strValue = strValue.Mid(nFind+1);
			nFind = -1;
			nFind = strValue.Find('\n');
		}
		nRet = 0;

	} while (FALSE);

	if (INVALID_HANDLE_VALUE != hFile)
		CloseHandle(hFile);

	hFile = NULL;
	SAFE_DELETE_ARRAY_PTR(pszFileBuffer);

	return nRet;
}