コード例 #1
0
ファイル: collision.cpp プロジェクト: quandrei/DragonCity
GLdouble dotProd(const Vec &one, const Vec &two){
	GLdouble x = (one.getX() * two.getX());
	GLdouble y = (one.getY() * two.getY());
	GLdouble z = (one.getZ() * two.getZ());

	return (x + y + z);
}
コード例 #2
0
ファイル: matr.cpp プロジェクト: aikide/RayTracing
/* Multiplication vector and matrix. (*this * v)
 * ARGUMENTS:
 * - vector to multiply from right
 *     Vec v;  
 * RETURNS:
 * - result vector
 *     Vec;
 */
Vec Matrix::operator*( Vec &v )
{
  Vec res = Vec(v.getX() * M[0][0] + v.getY() * M[1][0] + v.getZ() * M[2][0] + M[3][0],
  	            v.getX() * M[0][1] + v.getY() * M[1][1] + v.getZ() * M[2][1] + M[3][1],
	              v.getX() * M[0][2] + v.getY() * M[1][2] + v.getZ() * M[2][2] + M[3][2]);

  return res;
} /* End of 'operator*' function */
コード例 #3
0
ファイル: matr.cpp プロジェクト: aikide/RayTracing
/* Multiplication vector and matrix. (vec * *this)
 * ARGUMENTS:
 * - vector to multiply from right
 *     Vec &v;  
 * RETURNS:
 * - result vector
 *     Vec;
 */
Vec Matrix::MultiplyVectorFromLeft( Vec &v )
{  
  Vec res = Vec(v.getX() * M[0][0] + v.getY() * M[0][1] + v.getZ() * M[0][2] + M[0][3],
  	            v.getX() * M[1][0] + v.getY() * M[1][1] + v.getZ() * M[1][2] + M[1][3],
	              v.getX() * M[2][0] + v.getY() * M[2][2] + v.getZ() * M[2][2] + M[2][3]);
             
  return res;
} /* End of 'operator*' function */
コード例 #4
0
ファイル: collision.cpp プロジェクト: quandrei/DragonCity
Vec crossProd(const Vec &one, const Vec &two){
	GLdouble cp[3];

	cp[0] = one.getY() * two.getZ() - two.getY() * one.getZ();
	cp[1] = one.getZ() * two.getX() - two.getZ() * one.getX();
	cp[2] = one.getX() * two.getY() - two.getX() * one.getY();

	Vec result(cp[0], cp[1], cp[2]);

	return result;
}
コード例 #5
0
ファイル: kdtree.cpp プロジェクト: enriquefynn/libvns
void KdTree::searchInternal(KdNode* node,const BBox& bb,int d,List<VecItem*>& items){
	if( node ){
		Vec pn = node->item->getPosition();
		if( (d==0 && bb.getMinX()<pn.getX()) || bb.getMinY()<pn.getY() ){
			searchInternal(node->left,bb,(d+1)%m_k,items);
		}
		if( bb.contains(pn) ){
			items.append( node->item );
		}
		if( (d==0 && pn.getX()<=bb.getMaxX()) || pn.getY()<=bb.getMaxY() ){
			searchInternal(node->right,bb,(d+1)%m_k,items);
		}
	}
}
コード例 #6
0
ファイル: kdtree.cpp プロジェクト: enriquefynn/libvns
void KdTree::searchInternal(KdNode* node,const Vec& p,double range,int d,List<VecItem*>& items){
	if( node ){
		Vec pn = node->item->getPosition();

		if( (d==0 && (p.getX()-range)<pn.getX()) || (p.getY()-range)<pn.getY() ){
			searchInternal(node->left,p,range,(d+1)%m_k,items);
		}
		if( p.distanceToLessThan(pn,range) ){
			items.append( node->item );
		}
		if( (d==0 && pn.getX()<=(p.getX()+range)) || pn.getY()<=(p.getY()+range) ){
			searchInternal(node->right,p,range,(d+1)%m_k,items);
		}
	}
}
コード例 #7
0
ファイル: vec.cpp プロジェクト: matja307/TFYA50
//This function is stupid, I know.
//This is NOT a comparison of vector lengths!
//It needs to look this way for 'maps' to work...
bool Vec::operator<(const Vec vecA) const {
    
    Vec tmp = vecA;
    Vec tmp2 = *this;
    if (tmp2.getX() < tmp.getX()) {
        return true;
    }
    else if((tmp2.getX() == tmp.getX()) && (tmp2.getY() < tmp.getY())){
        return true;
    }
    else if((tmp2.getX() == tmp.getX()) && (tmp2.getY() == tmp.getY()) && (tmp2.getZ() < tmp.getZ())){
        return true;
    }
    else return false;
}
コード例 #8
0
ファイル: vec.cpp プロジェクト: matja307/TFYA50
Vec Vec::operator=(Vec vecA){

	x = vecA.getX();
	y = vecA.getY();
	z = vecA.getZ();
	return *this;
}
コード例 #9
0
ファイル: vec.cpp プロジェクト: matja307/TFYA50
bool Vec::operator==(const Vec vecA) const{

    Vec tmp = vecA;
    if (x==tmp.getX() && y==tmp.getY() && z==tmp.getZ()) {
        return true;
    }
    else return false;
}
コード例 #10
0
ファイル: vec.cpp プロジェクト: matja307/TFYA50
bool Vec::operator!=(const Vec vecA) const{
    
    Vec tmp = vecA;
    if (x!=tmp.getX() || y!=tmp.getY() || z!=tmp.getZ()) {
        return true;
    }
    else return false;
}
コード例 #11
0
ファイル: lighting.cpp プロジェクト: quandrei/DragonCity
Lighting::Lighting(Vec pos, Vec dir, char color, GLfloat spot, GLfloat intense, int lightNum, GLfloat colour[])
{
	this->white[0] = 1.0;
	this->white[1] = 1.0;
	this->white[2] = 1.0;
	this->white[3] = 1.0;

	this->red[0] = 1.0;
	this->red[1] = 0.0;
	this->red[2] = 0.0;
	this->red[3] = 1.0;

	this->green[0] = 0.0;
	this->green[1] = 1.0;
	this->green[2] = 0.0;
	this->green[3] = 1.0;

	this->blue[0] = 0.0;
	this->blue[1] = 0.0;
	this->blue[2] = 1.0;
	this->blue[3] = 1.0;

	this->other[0] = colour[0];
	this->other[1] = colour[1];
	this->other[2] = colour[2];
	this->other[3] = colour[3];

	this->position[0] = pos.getX();
	this->position[1] = pos.getY();
	this->position[2] = pos.getZ();
	this->position[3] = 1.0;
	
	this->direction[0] = dir.getX();
	this->direction[1] = dir.getY();
	this->direction[2] = dir.getZ();

	this->fSpotLight = spot;
	this->spotIntensity = intense;
	this->init(color, lightNum);
}
コード例 #12
0
ファイル: matr.cpp プロジェクト: aikide/RayTracing
/* Create rotation Matrix.
 * ARGUMENTS:
 * - rotation angle in degrees
 *     float angle;
 * - rotation vector
 *     Vec radVec;
 * RETURNS: 
 * - rotation matrix
 *     Matrix ;
 */
Matrix CreateRotation( float angle, Vec &radVec )
{
  Matrix rot;
  /**/float si = sin(D2R(angle)), co = cos(D2R(angle)), len,
    radX = radVec.getX(), radY = radVec.getY(), radZ = radVec.getZ();  

  len = !radVec;
  if (len == 0)
    len = 1;
 
  radX /= len;
  radY /= len;
  radZ /= len;
		
  rot.SetElement(0, 0, co + radX * radX * (1 - co));
  rot.SetElement(0, 1, radX * radY * (1 - co) - radZ * si);
  rot.SetElement(0, 2, radX * radZ * (1 - co) + radY * si);

  rot.SetElement(1, 0, radX * radY * (1 - co) + radZ * si);
  rot.SetElement(1, 1, co + radY * radY * (1 - co));
  rot.SetElement(1, 2, radZ * radY * (1 - co) - radX * si);

  rot.SetElement(2, 0, radX * radZ * (1 - co) - radY * si);
  rot.SetElement(2, 1, radZ * radY * (1 - co) + radX * si);
  rot.SetElement(2, 2, co + radZ * radZ * (1 - co));/*


  float si = sin(D2R(angle / 2)), co = cos(D2R(angle / 2)), len,  // ÏÎËÎÂÈÍÍÛÉ ÓÃÎË!!!
    radX = radVec.getX(), radY = radVec.getY(), radZ = radVec.getZ();

  len = !radVec;
  if (len == 0)
    len = 1;
 
  radX *= si / len;
  radY *= si / len;
  radZ *= si / len;
		
  rot.SetElement(0, 0, 1 - 2 * (radY * radY + radZ * radZ));
  rot.SetElement(0, 1, 2 * radX * radY - 2 * co * radZ);
  rot.SetElement(0, 2, 2 * co * radY + 2 * radX * radZ);

  rot.SetElement(1, 0, 2 * radX * radY + 2 * co * radZ);
  rot.SetElement(1, 1, 1 - 2 * (radX * radX + radZ * radZ));
  rot.SetElement(1, 2, 2 * radY * radZ - 2 * co * radX);

  rot.SetElement(2, 0, 2 * radX * radZ - 2 * co * radY);
  rot.SetElement(2, 1, 2 * co * radX + 2 * radY * radZ);
  rot.SetElement(2, 2, 1 - 2 * (radX * radX + radY * radY));/**/

  return rot;
} /* End of 'CreateRotation' function */
コード例 #13
0
ファイル: vec.cpp プロジェクト: quandrei/DragonCity
GLdouble Vec::dot( const Vec &other ) const
{
    return (getX() * other.getX() + getY() * other.getY() + getZ() * other.getZ());
}
コード例 #14
0
ファイル: vec.cpp プロジェクト: quandrei/DragonCity
Vec Vec::operator+ ( const Vec &other ) const
{
    Vec result(this->x + other.getX(), this->y + other.getY(), this->z + other.getZ());
    return result;
}
コード例 #15
0
ファイル: vec.cpp プロジェクト: matja307/TFYA50
Vec Vec::operator+(Vec vecA){

	Vec newVec(vecA.getX()+this->getX(),vecA.getY()+this->getY(),vecA.getZ()+this->getZ());
	return newVec;
}
コード例 #16
0
ファイル: vec.cpp プロジェクト: quandrei/DragonCity
Vec Vec::operator- ( const Vec &other ) const
{
    Vec result(this->x - other.getX(), this->y - other.getY(), this->z - other.getZ());
    return result;
}
コード例 #17
0
ファイル: vec.cpp プロジェクト: quandrei/DragonCity
void Vec::set( const Vec &other )
{
    this->x = other.getX();
    this->y = other.getY();
    this->z = other.getZ();
}
コード例 #18
0
ファイル: vec.cpp プロジェクト: quandrei/DragonCity
void Vec::operator= ( Vec other )
{
    this->x = other.getX();
    this->y = other.getY();
    this->z = other.getZ();
}
コード例 #19
0
ファイル: vec.cpp プロジェクト: quandrei/DragonCity
void Vec::operator-= ( Vec other )
{
    this->x -= other.getX();
    this->y -= other.getY();
    this->z -= other.getZ();
}
コード例 #20
0
ファイル: vec.cpp プロジェクト: matja307/TFYA50
Vec Vec::operator-(Vec vecA){

	Vec newVec(this->getX()-vecA.getX(),this->getY()-vecA.getY(),this->getZ()-vecA.getZ());
	return newVec;
}
コード例 #21
0
ファイル: vec.cpp プロジェクト: quandrei/DragonCity
void Vec::operator+= ( Vec other )
{
    this->x += other.getX();
    this->y += other.getY();
    this->z += other.getZ();
}