# Home    # nevrax.com   
Nevrax
Nevrax.org
#News
#Mailing-list
#Documentation
#CVS
#Bugs
#License
Docs
 
Documentation  
Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages   Search  

tile_lumel.cpp

Go to the documentation of this file.
00001 
00007 /* Copyright, 2000 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 "3d/tile_lumel.h"
00029 
00030 using namespace NLMISC;
00031 
00032 namespace NL3D 
00033 {
00034 
00035 
00036 // ***************************************************************************
00037 void CTileLumel::createUncompressed (uint8 interpolated, uint8 shaded)
00038 {
00039         // Shading 
00040         Shaded=shaded;
00041 
00042         // Same color ?
00043         if (interpolated!=shaded)
00044         {
00045                 // Compute compressed value
00046                 sint temp=((shaded<<3)/(sint)(interpolated?interpolated:1));
00047                 clamp (temp, 0, 15);
00048 
00049                 // After decompression
00050                 uint decompressed=(((uint)interpolated*((uint)temp))>>3)+4;
00051                 if (decompressed>255)
00052                         decompressed=255;
00053 
00054                 // Need to compress ?
00055                 if (abs((sint)shaded-(sint)decompressed)>=abs((sint)shaded-(sint)interpolated))
00056                 {
00057                         // Shadow not present
00058                         _ShadowValue=0xff;
00059                 }
00060                 else
00061                 {
00062                         // Shadow
00063                         _ShadowValue=temp;
00064                 }
00065         }
00066         else
00067         {
00068                 // Shadow not present
00069                 _ShadowValue=0xff;
00070         }
00071 }
00072 
00073 // ***************************************************************************
00074 void CTileLumel::pack (CStreamBit& stream) const
00075 {
00076         // There is shadow here ?
00077         if (isShadowed ())
00078         {
00079                 // Put a true
00080                 stream.pushBackBool(true);
00081 
00082                 // Read the shadow value
00083                 stream.pushBack4bits(_ShadowValue);
00084         }
00085         else
00086                 // Put a false
00087                 stream.pushBackBool(false);
00088 }
00089 
00090 
00091 } // NL3D
00092 
00093 
00094 /* End of tile_lumel.h */