Example #1
0
//----------------------------------------------------
MIntArray		edgeFaceData::getNewVtxUVs(int newVtx) const
//----------------------------------------------------
{
	//gibt nur die UVs zurück, die zu neuem Vtx passen

	//zuerst suchen in newVtxArray
	MIntArray UVs(numUVSets, -1);	

	//in diesem Fall sind definitiv keine UVs vorhanden
	if(numUVSets == 0 ||  (numUVSets == 1 && UVRelOffsets[0] == false))
		return UVs;


	UINT l = vtxChange.length();
	UINT r = 0;

	for(int i = 1; i < l; i+=2)
	{
		if(vtxChange[i] == newVtx)
		{			

			int l2 = --i*numUVSets + numUVSets*2;
			for(i = i*numUVSets+1; i < l2; i+=2)
			{
				UVs[r++] = UVChange[i];
			}

			return UVs;
		}
	}

	//forbidden Path
	return UVs;

}
Example #2
0
int Sphere::testRay(const sf::Vector3f& origin, const sf::Vector3f& direction, sf::Vector3f& hitPosition, sf::Vector2f& UVCoordinates)
{
	float factor = -dot((origin-transform.position), direction);
	sf::Vector3f x = origin + factor * direction;
	float distance = sqrt((transform.scale.x/2 * transform.scale.x/2) - squaredLength(x-transform.position));
	if(factor > distance)
	{
		hitPosition = origin + (factor - distance) * direction;
		sf::Vector2f UVs(0.0f, 0.0f);
		if(material.texture)
		{
			sf::Vector3f yAxis(0.0f, 1.0f, 0.0f);
			sf::Vector3f zAxis(0.0f, 0.0f, -1.0f);
			sf::Vector3f normal = getNormal(hitPosition);
			float phi = acos( -dot( yAxis, normal ));
			UVs.y = phi / 3.14f;

			float theta = (acos( dot( normal, zAxis) / sin( phi ))) / ( 2 * 3.14f);
			if ( dot(cross( yAxis, zAxis), normal ) > 0 )
			{
				UVs.x = theta;
			}
			else
			{
				UVs.x = 1 - theta;
			}
		}
		UVCoordinates = UVs;
		return 1;
	}
	else if(factor + distance > 0)
	{
		hitPosition = origin + (factor + distance) * direction;
		return -1;
	}
	else
	{
		return 0;
	}
}
Example #3
0
//----------------------------------------------------
MIntArray		edgeFaceData::getEdgeVtxUVs(int thisVtx) const
//----------------------------------------------------
{

	//UVArray muss immer numUVSets einträge haben
	MIntArray UVs(numUVSets, -1);
	
	//in diesem Fall sind definitiv keine UVs vorhanden
	if(numUVSets == 0 ||  (numUVSets == 1 && UVRelOffsets[0] == false))
		return UVs;

	UINT l = faceVertices.length();

	for(UINT i = 0; i < l; i++)
	{
		if(faceVertices[i] == thisVtx)
		{
			
			//jetzt durch die UVs parsen und UVArray schreiben
			UINT r = 0;

			for(UINT a = 0; a < numUVSets; a++)
			{
				if( UVRelOffsets[a] )
				{
					UVs[r] = UVIndices[UVAbsOffsets[a] + i];
				}

				r++;
			}

			return UVs;
		}
	}

	//forbidden Path
	return UVs;	//dann eben -1 ausgeben, damit der aufrufer was zum vergleichen hat

}
		//-----------------------------------------------------------
		//-----------------------------------------------------------
		void SpriteComponent::SetUVs(f32 in_u, f32 in_v, f32 in_s, f32 in_t)
		{
            m_uvs = UVs(in_u, in_v, in_s, in_t);
            UpdateVertexUVs(m_uvs);
		}
Example #5
0
 //-----------------------------------------------------------
 //-----------------------------------------------------------
 void SpriteComponent::SetUVs(f32 in_u, f32 in_v, f32 in_s, f32 in_t)
 {
     m_uvs = UVs(in_u, in_v, in_s, in_t);
 }