00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "std3d.h"
00027
00028 #include "3d/light_influence_interpolator.h"
00029 #include "nel/misc/debug.h"
00030 #include "3d/point_light_named.h"
00031
00032
00033 namespace NL3D
00034 {
00035
00036
00037
00038 void CLightInfluenceInterpolator::interpolate(std::vector<CPointLightInfluence> &pointLightList, float subX, float subY)
00039 {
00040 uint crn;
00041
00042 nlassert(NumLightPerCorner==2);
00043
00044
00045 for(crn= 0; crn<4; crn++)
00046 {
00047 CCorner &corner= Corners[crn];
00048
00049 if(corner.Lights[0])
00050 corner.Lights[0]->_IdInInfluenceList= -1;
00051 if(corner.Lights[1])
00052 corner.Lights[1]->_IdInInfluenceList= -1;
00053 }
00054
00055
00056 Corners[0].Influence= (1-subX) * (1-subY);
00057 Corners[1].Influence= subX * (1-subY);
00058 Corners[2].Influence= (1-subX) * subY;
00059 Corners[3].Influence= subX * subY;
00060
00061
00062 for(crn= 0; crn<4; crn++)
00063 {
00064 CCorner &corner= Corners[crn];
00065
00066
00067 if(corner.Lights[0])
00068 {
00069 if(corner.Lights[0]->_IdInInfluenceList==-1)
00070 {
00071
00072 pointLightList.push_back(CPointLightInfluence());
00073 sint id= pointLightList.size()-1;
00074
00075 corner.Lights[0]->_IdInInfluenceList= id;
00076 pointLightList[id].PointLight= corner.Lights[0];
00077 pointLightList[id].Influence= corner.Influence;
00078 }
00079 else
00080 {
00081
00082 sint id= corner.Lights[0]->_IdInInfluenceList;
00083
00084 pointLightList[id].Influence+= corner.Influence;
00085 }
00086 }
00087
00088 if(corner.Lights[1])
00089 {
00090 if(corner.Lights[1]->_IdInInfluenceList==-1)
00091 {
00092
00093 pointLightList.push_back(CPointLightInfluence());
00094 sint id= pointLightList.size()-1;
00095
00096 corner.Lights[1]->_IdInInfluenceList= id;
00097 pointLightList[id].PointLight= corner.Lights[1];
00098 pointLightList[id].Influence= corner.Influence;
00099 }
00100 else
00101 {
00102
00103 sint id= corner.Lights[1]->_IdInInfluenceList;
00104
00105 pointLightList[id].Influence+= corner.Influence;
00106 }
00107 }
00108 }
00109 }
00110
00111
00112
00113 }