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); }
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); }
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; }