Home | nevrax.com |
|
height_map.cppGo to the documentation of this file.00001 00007 /* Copyright, 2001 Nevrax Ltd. 00008 * 00009 * This file is part of NEVRAX NEL. 00010 * NEVRAX NEL is free software; you can redistribute it and/or modify 00011 * it under the terms of the GNU General Public License as published by 00012 * the Free Software Foundation; either version 2, or (at your option) 00013 * any later version. 00014 00015 * NEVRAX NEL is distributed in the hope that it will be useful, but 00016 * WITHOUT ANY WARRANTY; without even the implied warranty of 00017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00018 * General Public License for more details. 00019 00020 * You should have received a copy of the GNU General Public License 00021 * along with NEVRAX NEL; see the file COPYING. If not, write to the 00022 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, 00023 * MA 02111-1307, USA. 00024 */ 00025 00026 #include "std3d.h" 00027 00028 #include "nel/3d/height_map.h" 00029 00030 00031 using namespace NLMISC; 00032 00033 00034 namespace NL3D 00035 { 00036 00037 00038 // *************************************************************************** 00039 void CHeightMap::resize(uint w, uint h) 00040 { 00041 NL3D_MEM_HMAP 00042 _Width= w; 00043 _Height= h; 00044 Heights.resize(w*h); 00045 } 00046 00047 00048 // *************************************************************************** 00049 void CHeightMap::buildFromBitmap(const NLMISC::CBitmap &bitmap0) 00050 { 00051 NL3D_MEM_HMAP 00052 // copy bitmap. 00053 CBitmap bitmap= bitmap0; 00054 // convert to luminance. 00055 bitmap.convertToType(CBitmap::Luminance); 00056 00057 // resize array. 00058 uint w, h; 00059 w= bitmap.getWidth(); 00060 h= bitmap.getHeight(); 00061 resize(w,h); 00062 00063 // get luminance image. 00064 std::vector<uint8> &array= bitmap.getPixels(); 00065 // invert the image in Y. 00066 for(uint y=0;y<h;y++) 00067 { 00068 for(uint x=0;x<w;x++) 00069 { 00070 uint8 v= array[(h-1-y)*w+x]; 00071 Heights[y*w+x]= v; 00072 } 00073 } 00074 } 00075 00076 00077 // *************************************************************************** 00078 float CHeightMap::getZ(uint x, uint y) const 00079 { 00080 NL3D_MEM_HMAP 00081 nlassert(x<_Width && y<_Height); 00082 return Heights[y*_Width+x]*MaxZ/255; 00083 } 00084 00085 00086 00087 } // NL3D |