0ad/source/tools/pmdexp/VNormal.cpp
2004-05-30 00:46:58 +00:00

57 lines
820 B
C++
Executable File

#include "MaxInc.h"
#include "VNormal.h"
void VNormal::add(CVector3D& n,unsigned int s)
{
if (!(s&smooth) && init) {
if (next) {
next->add(n,s);
} else {
next=new VNormal(n,s);
}
} else {
_normal+=n;
smooth|=s;
init=true;
}
}
VNormal* VNormal::get(unsigned int s)
{
if (smooth&s || !next) {
return this;
} else {
return next->get(s);
}
}
void VNormal::get(unsigned int s,CVector3D& normal)
{
if (smooth&s || !next) {
normal=_normal;
} else {
next->get(s,normal);
}
}
void VNormal::normalize()
{
VNormal *ptr = next, *prev = this;
while (ptr) {
if (ptr->smooth&smooth) {
_normal += ptr->_normal;
prev->next = ptr->next;
delete ptr;
ptr = prev->next;
} else {
prev = ptr;
ptr = ptr->next;
}
}
_normal.Normalize();
if (next) next->normalize();
}