Esempio n. 1
0
void
vsVector3D::Floor()
{
    x = (float)vsFloor(x);
    y = (float)vsFloor(y);
    z = (float)vsFloor(z);
}
Esempio n. 2
0
float
vsPerlinOctave::InterpolatedNoise2D(float x, float y, int wrap)
{
	int integer_X    = vsFloor(x);
	float fractional_X = x - integer_X;

	int integer_Y    = vsFloor(y);
	float fractional_Y = y - integer_Y;

	vsAssert( fractional_X >= 0.f && fractional_X < 1.f, "Maths error:  fractional_X out of bounds!" );
	vsAssert( fractional_Y >= 0.f && fractional_Y < 1.f, "Maths error:  fractional_Y out of bounds!" );

	fractional_X = (3.0f * fractional_X * fractional_X) - (2.0f * fractional_X * fractional_X * fractional_X);
	fractional_Y = (3.0f * fractional_Y * fractional_Y) - (2.0f * fractional_Y * fractional_Y * fractional_Y);

	float v1 = Noise2D(integer_X,     integer_Y, wrap);
	float v2 = Noise2D(integer_X + 1, integer_Y, wrap);
	float v3 = Noise2D(integer_X,     integer_Y + 1, wrap);
	float v4 = Noise2D(integer_X + 1, integer_Y + 1, wrap);

	float i1 = vsInterpolate(fractional_X, v1 , v2);
	float i2 = vsInterpolate(fractional_X, v3 , v4);

	return vsInterpolate(fractional_Y, i1 , i2);
}
Esempio n. 3
0
// To force linking in all needed Intel routines
// See compileCX for details (linking against .a)
void Dummy(void)
{
	vsAdd();
	vsSub();
	vsDiv();
	vsSqr();
	vsMul();
	vsAbs();
	vsInv();

	vsSin();   
	vsCos();   
	vsSinCos();
	vsTan();   
	vsAsin();  
	vsAcos();  
	vsAtan();  
	vsAtan2();

	vsSinh(); 
	vsCosh(); 
	vsTanh(); 
	vsAsinh();
	vsAcosh();
	vsAtanh();

	vsPow();    
	vsPowx();   
	vsSqrt();   
	vsCbrt();   
	vsInvSqrt();
	vsInvCbrt();
	vsHypot();

	vsFloor();   
	vsCeil();    
	vsRound();   
	vsTrunc();   
	vsRint();    
	vsNearbyInt();
	vsModf();

	vsExp();  	     
	vsLn();   
	vsLog10();

	vsErf();   
	vsErfc();  
	vsErfInv();
}
Esempio n. 4
0
int
vsMeshMaker::BakeTriangleVertex( vsMeshMakerTriangleVertex &vertex, const vsVector3D &faceNormal )
{
	if ( m_attemptMerge )
	{
		float bestPriority = -1.f;
		vsMeshMakerTriangleVertex *best = NULL;

		vsVector2D deltaTexel;

		const float testDistance = 1.1f;
		vsArray<vsMeshMakerTriangleVertex*> array;
		m_octree->FindPointsWithin( &array, vertex.GetPosition(), testDistance );

		for (int i = 0; i < array.ItemCount(); i++)
		{
			//vsMeshMakerTriangleVertex *other = &m_vertex[i];
			vsMeshMakerTriangleVertex *other = array[i];
			if ( m_buildingNormals )
			{
				const float epsilon = 0.01f;
				const float sqEpsilon = epsilon*epsilon;

				const bool closeEnough = (other->GetPosition() - vertex.GetPosition()).SqLength() < sqEpsilon;
				//			bool texelMatches = ((other.m_texel - m_texel).SqLength() < sqEpsilon);

				deltaTexel = other->GetTexel() - vertex.GetTexel();
				if ( deltaTexel.x > 1.f )
				{
					deltaTexel.x -= vsFloor(deltaTexel.x);
				}
				if ( deltaTexel.y > 1.f )
				{
					deltaTexel.y -= vsFloor(deltaTexel.y);
				}
				//			const bool texelMatches = deltaTexel.SqLength() < sqEpsilon;
				bool texelMatches = true;

				if ( closeEnough && texelMatches )
				{
					float priority = other->GetMergePriorityWith(vertex, faceNormal);

					if ( priority > bestPriority )
					{
						bestPriority = priority;
						best = other;
					}
				}
			}
			else
			{
				if ( *other == vertex )
				{
					return i;
				}
			}
		}

		if ( best && bestPriority >= 0.f )
		{
			vsMeshMakerTriangleVertex newVertex = vertex;

			bool didMerge = best->AttemptMergeWith(&newVertex, faceNormal);
			if ( didMerge )
			{
				return best->m_index;
			}
			else
			{
				// did a fake merge.
				newVertex.m_index = m_vertexCount;
				m_vertex[m_vertexCount] = newVertex;
				//cell->m_vertexIndex.push_back(m_vertexCount);
				m_octree->AddPoint( &m_vertex[m_vertexCount] );
				m_vertexCount++;

				return m_vertexCount-1;
			}
		}
	}

	vertex.m_index = m_vertexCount;
	m_vertex[m_vertexCount] = vertex;
	m_octree->AddPoint( &m_vertex[m_vertexCount] );
	//cell->m_vertexIndex.push_back(m_vertexCount);

	if ( m_buildingNormals )
	{
		m_vertex[m_vertexCount].SetNormal( faceNormal );
	}

	m_vertexCount++;

	return m_vertexCount-1;
}