/*
===========================================================================
Copyright (C) 2008 Daniel Örstadius
This file is part of bsp-renderer source code.
bsp-renderer is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
bsp-renderer is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with bsp-renderer. If not, see .
*/
// BspVertex.cpp -- used in the tessellation of the Bezier patches
#include
#include "Q3Map_BspVertex.h"
BspVertex::BspVertex()
{
for (int i=0; i<3; i++)
mPosition[i] = 0;
for (int i=0; i<3; i++)
mNormal[i] = 0;
for(int i=0; i<2; i++)
for(int j=0; j<2; j++)
mTexcoord[i][j] = 0;
}
BspVertex::BspVertex(float p[3], float texcoord[2][2], float n[3])
{
for (int i=0; i<3; i++)
mPosition[i] = p[i];
for (int i=0; i<3; i++)
mNormal[i] = n[i];
for(int i=0; i<2; i++)
for(int j=0; j<2; j++)
{
this->mTexcoord[i][j] = texcoord[i][j];
}
}
BspVertex BspVertex::operator+(BspVertex a)
{
BspVertex res;
for (int i=0; i<3; i++)
{
res.mPosition[i] = this->mPosition[i] + a.mPosition[i];
res.mNormal[i] = this->mNormal[i] + a.mNormal[i];
}
for(int i=0; i<2; i++)
for(int j=0; j<2; j++)
{
res.mTexcoord[i][j] = this->mTexcoord[i][j] + a.mTexcoord[i][j];
}
return res;
}
BspVertex BspVertex::operator*(float a)
{
BspVertex res;
for (int i=0; i<3; i++)
{
res.mPosition[i] = this->mPosition[i] * a;
res.mNormal[i] = this->mNormal[i] * a;
}
for(int i=0; i<2; i++)
for(int j=0; j<2; j++)
res.mTexcoord[i][j] = this->mTexcoord[i][j] * a;
return res;
}
void BspVertex::normalise(void)
{
//QVECTOR n((float)mNormal[0], (float)mNormal[1], (float)mNormal[2]);
//D3DXVec3Normalize(&n, &n);
//mNormal[0] = n.x;
//mNormal[1] = n.y;
//mNormal[2] = n.z;
float flLen=sqrt( mNormal[0]*mNormal[0] + mNormal[1]*mNormal[1] + mNormal[2]*mNormal[2] ) ;
mNormal[0]/=flLen ;
mNormal[1]/=flLen ;
mNormal[2]/=flLen ;
}