示例#1
0
void AHair::UpdateSegment(AHairSegment* InSegment)
{
	if (!InSegment || InSegment->Spline->GetNumberOfSplinePoints() < 2) return;
	InSegment->ProceduralMesh->ClearAllMeshSections();
	ClearMeshData(InSegment);

	// Update node rotations to match spline
	for (int i = 0; i < InSegment->Spline->GetNumberOfSplinePoints(); i++)
	{
		FRotator Rot = InSegment->Spline->GetRotationAtSplinePoint(i, ESplineCoordinateSpace::World);
		InSegment->Nodes[i]->SetActorRotation(Rot);
	}

	// Populate new data
	if (!MiddleMeshData) return;
	for (int i = 0; i <= InSegment->NumSegments; i++)
	{
		float TotalDistance = InSegment->Spline->GetSplineLength();
		float Distance = (TotalDistance / InSegment->NumSegments)*i;
		float NextDistance = (TotalDistance / InSegment->NumSegments)*i+1;
		AssignPositions(InSegment->Spline->GetLocationAtDistanceAlongSpline(Distance, ESplineCoordinateSpace::Local),
			InSegment->Spline->GetLocationAtDistanceAlongSpline(NextDistance, ESplineCoordinateSpace::Local));

		//Weight = 1.0f - Distance / TotalDistance;
		
		float Displacement = InSegment->FallOff - 1.0f;
		Weight = 1.0f + (Distance / TotalDistance)*Displacement;

		// Interpolate distance to closest spline point index
		float Delta = ((InSegment->Spline->GetNumberOfSplinePoints() - 1)*1.0f) / (InSegment->NumSegments*1.0f);
		int Index = FGenericPlatformMath::RoundToInt(i*Delta);
		if (i == 0)
		{
			AddVertices(0, MiddleMeshData->Vertices, InSegment, Distance);
			AddTriangles(InSegment);
			AddUVs(InSegment, true);
		}
		else
		{
			AddVertices(2, MiddleMeshData->Vertices, InSegment, Distance);
			AddTriangles(InSegment);
			AddUVs(InSegment, false);
		}
	}
	// Create mesh 
	InSegment->ProceduralMesh->CreateMeshSection(0, InSegment->ProceduralMeshData->Vertices,
													InSegment->ProceduralMeshData->Triangles,
													TArray<FVector>(), 
													InSegment->ProceduralMeshData->UVs,
													TArray<FColor>(), TArray<FProcMeshTangent>(), true);
	// Duplicate for outline as custom depth not available for translucent materials
	InSegment->OutlineMesh->CreateMeshSection(0, InSegment->ProceduralMeshData->Vertices,
													InSegment->ProceduralMeshData->Triangles,
													TArray<FVector>(),
													InSegment->ProceduralMeshData->UVs,
													TArray<FColor>(), TArray<FProcMeshTangent>(), true);
}
示例#2
0
void CGraphics_OpenGL::QuadsDrawFreeform(const CFreeformItem *pArray, int Num)
{
	dbg_assert(m_Drawing == DRAWING_QUADS, "called quads_draw_freeform without begin");
	
	for(int i = 0; i < Num; ++i)
	{
		m_aVertices[m_NumVertices + 4*i].m_Pos.x = pArray[i].m_X0;
		m_aVertices[m_NumVertices + 4*i].m_Pos.y = pArray[i].m_Y0;
		m_aVertices[m_NumVertices + 4*i].m_Tex = m_aTexture[0];
		m_aVertices[m_NumVertices + 4*i].m_Color = m_aColor[0];

		m_aVertices[m_NumVertices + 4*i + 1].m_Pos.x = pArray[i].m_X1;
		m_aVertices[m_NumVertices + 4*i + 1].m_Pos.y = pArray[i].m_Y1;
		m_aVertices[m_NumVertices + 4*i + 1].m_Tex = m_aTexture[1];
		m_aVertices[m_NumVertices + 4*i + 1].m_Color = m_aColor[1];

		m_aVertices[m_NumVertices + 4*i + 2].m_Pos.x = pArray[i].m_X3;
		m_aVertices[m_NumVertices + 4*i + 2].m_Pos.y = pArray[i].m_Y3;
		m_aVertices[m_NumVertices + 4*i + 2].m_Tex = m_aTexture[3];
		m_aVertices[m_NumVertices + 4*i + 2].m_Color = m_aColor[3];

		m_aVertices[m_NumVertices + 4*i + 3].m_Pos.x = pArray[i].m_X2;
		m_aVertices[m_NumVertices + 4*i + 3].m_Pos.y = pArray[i].m_Y2;
		m_aVertices[m_NumVertices + 4*i + 3].m_Tex = m_aTexture[2];
		m_aVertices[m_NumVertices + 4*i + 3].m_Color = m_aColor[2];
	}
	
	AddVertices(4*Num);
}
示例#3
0
//-----------------------------------------------------------------------------
// Name : iwfSurface () (Alternate Constructor)
// Desc : iwfSurface Class Constructor, adds specified number of vertices
//-----------------------------------------------------------------------------
iwfSurface::iwfSurface( USHORT Count )
{
	// Reset / Clear all required values
    Components          = 0;
    Normal              = VECTOR3( 0.0f, 0.0f, 0.0f );
    ZBias               = 0;
    Style               = 0;
    RenderEffect        = -1;
    ChannelCount        = 0;
    TextureIndices      = NULL;
    MaterialIndices     = NULL;
    ShaderIndices       = NULL;
    BlendModes          = NULL;
    CustomDataSize      = 0;
    CustomData          = NULL;
    
    VertexComponents    = 0;
    VertexFlags         = 0;
    VertexCount         = 0;
    TexChannelCount     = 0;
    TexCoordSize        = NULL;

    IndexVPool          = 0;
    IndexFlags          = 0;
    IndexCount          = 0;
    
    Vertices            = NULL;
    Indices             = NULL;

    // Add vertices
    AddVertices( Count );
}
// -------------------------------------------------------------------------- //
void Class_SurfTri::AddSimplicies(
    dvecarr3E       &V,
    ivector2D       &E
) {

// ========================================================================== //
// void Class_SurfTri::AddSimplicies(                                         //
//     dvecarr3E       &V,                                                    //
//     ivector2D       &E)                                                    //
//                                                                            //
// Add multiple simplicies to the tasselation                                 //
// ========================================================================== //
// INPUT                                                                      //
// ========================================================================== //
// - V     : dvecarr3E, vertex coordinate list                                //
// - E     : ivector2D, simplex-vertex connectivity for each simplex          //
//           to be added                                                      //
// ========================================================================== //
// OUTPUT                                                                     //
// ========================================================================== //
// - none                                                                     //
// ========================================================================== //

// ========================================================================== //
// VARIABLES DECLARATION                                                      //
// ========================================================================== //

// Local variables
    int           v_off = nVertex;
    int           m, n = E.size();
    ivector1D     idummy1D;

// Counters
    int           i, j;

// ========================================================================== //
// ADD SIMPLES                                                                //
// ========================================================================== //

// Add vertices ------------------------------------------------------------- //
    AddVertices(V);

// Add simplicies ----------------------------------------------------------- //
    for (i = 0; i < n; i++) {
        m = E[i].size();
        idummy1D.resize(m, -1);
        for (j = 0; j < m; j++) {
            idummy1D[j] = E[i][j] + v_off;
        } //next j
        AddSimplex(idummy1D);
    } //next i

    return;
}
示例#5
0
void CGraphics_OpenGL::QuadsDrawTL(const CQuadItem *pArray, int Num)
{
	CPoint Center;
	Center.z = 0;

	dbg_assert(m_Drawing == DRAWING_QUADS, "called Graphics()->QuadsDrawTL without begin");

	for(int i = 0; i < Num; ++i)
	{
		m_aVertices[m_NumVertices + 4*i].m_Pos.x = pArray[i].m_X;
		m_aVertices[m_NumVertices + 4*i].m_Pos.y = pArray[i].m_Y;
		m_aVertices[m_NumVertices + 4*i].m_Tex = m_aTexture[0];
		m_aVertices[m_NumVertices + 4*i].m_Color = m_aColor[0];

		m_aVertices[m_NumVertices + 4*i + 1].m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
		m_aVertices[m_NumVertices + 4*i + 1].m_Pos.y = pArray[i].m_Y;
		m_aVertices[m_NumVertices + 4*i + 1].m_Tex = m_aTexture[1];
		m_aVertices[m_NumVertices + 4*i + 1].m_Color = m_aColor[1];

		m_aVertices[m_NumVertices + 4*i + 2].m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
		m_aVertices[m_NumVertices + 4*i + 2].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
		m_aVertices[m_NumVertices + 4*i + 2].m_Tex = m_aTexture[2];
		m_aVertices[m_NumVertices + 4*i + 2].m_Color = m_aColor[2];

		m_aVertices[m_NumVertices + 4*i + 3].m_Pos.x = pArray[i].m_X;
		m_aVertices[m_NumVertices + 4*i + 3].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
		m_aVertices[m_NumVertices + 4*i + 3].m_Tex = m_aTexture[3];
		m_aVertices[m_NumVertices + 4*i + 3].m_Color = m_aColor[3];

		if(m_Rotation != 0)
		{
			Center.x = pArray[i].m_X + pArray[i].m_Width/2;
			Center.y = pArray[i].m_Y + pArray[i].m_Height/2;

            if (m_Center.x != -1 && m_Center.y != -1)
            {
                Center.x = pArray[i].m_X + m_Center.x;
                Center.y = pArray[i].m_Y + m_Center.y;
            }

			Rotate4(Center, &m_aVertices[m_NumVertices + 4*i]);
		}
	}

	AddVertices(4*Num);
}
// -------------------------------------------------------------------------- //
void Class_SurfTri::AddSimplex(
    dvecarr3E       &V
) {

// ========================================================================== //
// void Class_SurfTri::AddSimplex(                                            //
//     dvecarr3E       &V)                                                    //
//                                                                            //
// Add simplex to the tasselation                                             //
// ========================================================================== //
// INPUT                                                                      //
// ========================================================================== //
// - V     : dvecarr3E, vertex of simplex to be added                         //
// ========================================================================== //
// OUTPUT                                                                     //
// ========================================================================== //
// - none                                                                     //
// ========================================================================== //

// ========================================================================== //
// VARIABLES DECLARATION                                                      //
// ========================================================================== //

// Local variables
    int             n = V.size();
    ivector1D       dummy(V.size(),-1);

// Counters
    int             i;

// ========================================================================== //
// ADD SIMPLES                                                                //
// ========================================================================== //

// Add simplex vertexes
    AddVertices(V);

// Add simplex
    n = V.size();
    for (i = 0; i < n; i++) {
        dummy[i] = nVertex - n + i;
    } //next i
    AddSimplex(dummy);

    return;
};
示例#7
0
void CGraphics_OpenGL::LinesDraw(const CLineItem *pArray, int Num)
{
	dbg_assert(m_Drawing == DRAWING_LINES, "called draw without begin");
	
	for(int i = 0; i < Num; ++i)
	{
		m_aVertices[m_NumVertices + 2*i].m_Pos.x = pArray[i].m_X0;
		m_aVertices[m_NumVertices + 2*i].m_Pos.y = pArray[i].m_Y0;
		m_aVertices[m_NumVertices + 2*i].m_Tex = m_aTexture[0];
		m_aVertices[m_NumVertices + 2*i].m_Color = m_aColor[0];

		m_aVertices[m_NumVertices + 2*i + 1].m_Pos.x = pArray[i].m_X1;
		m_aVertices[m_NumVertices + 2*i + 1].m_Pos.y = pArray[i].m_Y1;
		m_aVertices[m_NumVertices + 2*i + 1].m_Tex = m_aTexture[1];
		m_aVertices[m_NumVertices + 2*i + 1].m_Color = m_aColor[1];
	}

	AddVertices(2*Num);
}
示例#8
0
void CGraphics_Threaded::LinesDraw(const CLineItem *pArray, int Num)
{
	dbg_assert(m_Drawing == DRAWING_LINES, "called Graphics()->LinesDraw without begin");

	for(int i = 0; i < Num; ++i)
	{
		GetVertex(m_NumVertices + 2*i)->m_Pos.x = pArray[i].m_X0;
		GetVertex(m_NumVertices + 2*i)->m_Pos.y = pArray[i].m_Y0;
		GetVertex(m_NumVertices + 2*i)->m_Tex = m_aTexture[0];
		SetColor(GetVertex(m_NumVertices + 2*i), 0);

		GetVertex(m_NumVertices + 2*i + 1)->m_Pos.x = pArray[i].m_X1;
		GetVertex(m_NumVertices + 2*i + 1)->m_Pos.y = pArray[i].m_Y1;
		GetVertex(m_NumVertices + 2*i + 1)->m_Tex = m_aTexture[1];
		SetColor(GetVertex(m_NumVertices + 2*i + 1), 1);
	}

	AddVertices(2*Num);
}
// -------------------------------------------------------------------------- //
void Class_SurfTri::Append(
    Class_SurfTri   &Source
) {

// ========================================================================== //
// void Class_SurfTri::Append(                                                //
//     Class_SurfTri   &Source)                                               //
//                                                                            //
// Append tasselation in Source to the present tasselation                    //
// ========================================================================== //
// INPUT                                                                      //
// ========================================================================== //
// - Source   : Class_SurfTri, source tasselation to be appended              //
// ========================================================================== //
// OUTPUT                                                                     //
// ========================================================================== //
// - none                                                                     //
// ========================================================================== //

// ========================================================================== //
// VARIABLES DECLARATION                                                      //
// ========================================================================== //

// Local variables
    int        v_off, s_off;

// Counters
    int        i, j, m;

    darray3E    temp ;
    temp.fill(0.) ;

// ========================================================================== //
// INTIIALIZE PARAMETERS                                                      //
// ========================================================================== //

// Vertex offset
    v_off = nVertex;

// Simplex offset
    s_off = nSimplex;

// ========================================================================== //
// APPEND SIMPLEX IN SOURCE TO THE PRESENT TASSELATION                        //
// ========================================================================== //

// Vertex ------------------------------------------------------------------- //
    if (Source.nVertex > 0) {


        // Resize vertex list
        Vertex.resize(nVertex + Source.nVertex, temp);

        // Add vertexes
        AddVertices(Source.Vertex);
    }

// Simplex ------------------------------------------------------------------ //
    if (Source.nSimplex > 0) {

        // Resize simplex list
        Simplex.resize(nSimplex + Source.nSimplex);

        // Add simplex
        for (i = 0; i < Source.nSimplex; i++) {
            Simplex[i + s_off] = Source.Simplex[i] + v_off;
            nSimplex++;
        } //next i
    }

// Normals ------------------------------------------------------------------ //
    if ((Source.Normal.size() > 0) && (Source.Normal.size() >= Source.nSimplex)) {

        // Resize normal list
        Normal.resize(nSimplex, temp);

        // Add normals
        for (i = 0; i < Source.nSimplex; i++) {
            Normal[i + s_off] = Source.Normal[i];
        } //next i
    }

// Adjacencies -------------------------------------------------------------- //
    if ((Source.Adjacency.size() > 0) && (Source.Adjacency.size() >= Source.nSimplex)) {

        // Resize adjacency list
        Adjacency.resize(nSimplex);

        // Add adjacencies
        for (i = 0; i < Source.nSimplex; i++) {
            Adjacency[i + s_off].resize(Source.Adjacency[i].size());
            m = Source.Adjacency[i].size();
            for (j = 0; j < m; j++) {
                if (Source.Adjacency[i][j][0] >= 0) {
                    Adjacency[i + s_off][j] = Source.Adjacency[i][j] + s_off;
                }
                else {
                    Adjacency[i + s_off][j].resize(1, -1);
                }
            } //next j
        } //next i
    }

    return;
};
示例#10
0
void CGraphics_Threaded::QuadsDrawFreeform(const CFreeformItem *pArray, int Num)
{
	dbg_assert(m_Drawing == DRAWING_QUADS, "called Graphics()->QuadsDrawFreeform without begin");

	if(g_Config.m_GfxQuadAsTriangle)
	{
		for(int i = 0; i < Num; ++i)
		{
			m_aVertices[m_NumVertices + 6*i].m_Pos.x = pArray[i].m_X0;
			m_aVertices[m_NumVertices + 6*i].m_Pos.y = pArray[i].m_Y0;
			m_aVertices[m_NumVertices + 6*i].m_Tex = m_aTexture[0];
			m_aVertices[m_NumVertices + 6*i].m_Color = m_aColor[0];

			m_aVertices[m_NumVertices + 6*i + 1].m_Pos.x = pArray[i].m_X1;
			m_aVertices[m_NumVertices + 6*i + 1].m_Pos.y = pArray[i].m_Y1;
			m_aVertices[m_NumVertices + 6*i + 1].m_Tex = m_aTexture[1];
			m_aVertices[m_NumVertices + 6*i + 1].m_Color = m_aColor[1];

			m_aVertices[m_NumVertices + 6*i + 2].m_Pos.x = pArray[i].m_X3;
			m_aVertices[m_NumVertices + 6*i + 2].m_Pos.y = pArray[i].m_Y3;
			m_aVertices[m_NumVertices + 6*i + 2].m_Tex = m_aTexture[3];
			m_aVertices[m_NumVertices + 6*i + 2].m_Color = m_aColor[3];

			m_aVertices[m_NumVertices + 6*i + 3].m_Pos.x = pArray[i].m_X0;
			m_aVertices[m_NumVertices + 6*i + 3].m_Pos.y = pArray[i].m_Y0;
			m_aVertices[m_NumVertices + 6*i + 3].m_Tex = m_aTexture[0];
			m_aVertices[m_NumVertices + 6*i + 3].m_Color = m_aColor[0];

			m_aVertices[m_NumVertices + 6*i + 4].m_Pos.x = pArray[i].m_X3;
			m_aVertices[m_NumVertices + 6*i + 4].m_Pos.y = pArray[i].m_Y3;
			m_aVertices[m_NumVertices + 6*i + 4].m_Tex = m_aTexture[3];
			m_aVertices[m_NumVertices + 6*i + 4].m_Color = m_aColor[3];

			m_aVertices[m_NumVertices + 6*i + 5].m_Pos.x = pArray[i].m_X2;
			m_aVertices[m_NumVertices + 6*i + 5].m_Pos.y = pArray[i].m_Y2;
			m_aVertices[m_NumVertices + 6*i + 5].m_Tex = m_aTexture[2];
			m_aVertices[m_NumVertices + 6*i + 5].m_Color = m_aColor[2];
		}

		AddVertices(3*2*Num);
	}
	else
	{
		for(int i = 0; i < Num; ++i)
		{
			m_aVertices[m_NumVertices + 4*i].m_Pos.x = pArray[i].m_X0;
			m_aVertices[m_NumVertices + 4*i].m_Pos.y = pArray[i].m_Y0;
			m_aVertices[m_NumVertices + 4*i].m_Tex = m_aTexture[0];
			m_aVertices[m_NumVertices + 4*i].m_Color = m_aColor[0];

			m_aVertices[m_NumVertices + 4*i + 1].m_Pos.x = pArray[i].m_X1;
			m_aVertices[m_NumVertices + 4*i + 1].m_Pos.y = pArray[i].m_Y1;
			m_aVertices[m_NumVertices + 4*i + 1].m_Tex = m_aTexture[1];
			m_aVertices[m_NumVertices + 4*i + 1].m_Color = m_aColor[1];

			m_aVertices[m_NumVertices + 4*i + 2].m_Pos.x = pArray[i].m_X3;
			m_aVertices[m_NumVertices + 4*i + 2].m_Pos.y = pArray[i].m_Y3;
			m_aVertices[m_NumVertices + 4*i + 2].m_Tex = m_aTexture[3];
			m_aVertices[m_NumVertices + 4*i + 2].m_Color = m_aColor[3];

			m_aVertices[m_NumVertices + 4*i + 3].m_Pos.x = pArray[i].m_X2;
			m_aVertices[m_NumVertices + 4*i + 3].m_Pos.y = pArray[i].m_Y2;
			m_aVertices[m_NumVertices + 4*i + 3].m_Tex = m_aTexture[2];
			m_aVertices[m_NumVertices + 4*i + 3].m_Color = m_aColor[2];
		}

		AddVertices(4*Num);
	}
}
示例#11
0
void CGraphics_Threaded::QuadsDrawTL(const CQuadItem *pArray, int Num)
{
	CCommandBuffer::SPoint Center;
	Center.z = 0;

	dbg_assert(m_Drawing == DRAWING_QUADS, "called Graphics()->QuadsDrawTL without begin");

	if(g_Config.m_GfxQuadAsTriangle)
	{
		for(int i = 0; i < Num; ++i)
		{
			// first triangle
			m_aVertices[m_NumVertices + 6*i].m_Pos.x = pArray[i].m_X;
			m_aVertices[m_NumVertices + 6*i].m_Pos.y = pArray[i].m_Y;
			m_aVertices[m_NumVertices + 6*i].m_Tex = m_aTexture[0];
			m_aVertices[m_NumVertices + 6*i].m_Color = m_aColor[0];

			m_aVertices[m_NumVertices + 6*i + 1].m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
			m_aVertices[m_NumVertices + 6*i + 1].m_Pos.y = pArray[i].m_Y;
			m_aVertices[m_NumVertices + 6*i + 1].m_Tex = m_aTexture[1];
			m_aVertices[m_NumVertices + 6*i + 1].m_Color = m_aColor[1];

			m_aVertices[m_NumVertices + 6*i + 2].m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
			m_aVertices[m_NumVertices + 6*i + 2].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
			m_aVertices[m_NumVertices + 6*i + 2].m_Tex = m_aTexture[2];
			m_aVertices[m_NumVertices + 6*i + 2].m_Color = m_aColor[2];

			// second triangle
			m_aVertices[m_NumVertices + 6*i + 3].m_Pos.x = pArray[i].m_X;
			m_aVertices[m_NumVertices + 6*i + 3].m_Pos.y = pArray[i].m_Y;
			m_aVertices[m_NumVertices + 6*i + 3].m_Tex = m_aTexture[0];
			m_aVertices[m_NumVertices + 6*i + 3].m_Color = m_aColor[0];

			m_aVertices[m_NumVertices + 6*i + 4].m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
			m_aVertices[m_NumVertices + 6*i + 4].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
			m_aVertices[m_NumVertices + 6*i + 4].m_Tex = m_aTexture[2];
			m_aVertices[m_NumVertices + 6*i + 4].m_Color = m_aColor[2];

			m_aVertices[m_NumVertices + 6*i + 5].m_Pos.x = pArray[i].m_X;
			m_aVertices[m_NumVertices + 6*i + 5].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
			m_aVertices[m_NumVertices + 6*i + 5].m_Tex = m_aTexture[3];
			m_aVertices[m_NumVertices + 6*i + 5].m_Color = m_aColor[3];

			if(m_Rotation != 0)
			{
				Center.x = pArray[i].m_X + pArray[i].m_Width/2;
				Center.y = pArray[i].m_Y + pArray[i].m_Height/2;

				Rotate(Center, &m_aVertices[m_NumVertices + 6*i], 6);
			}
		}

		AddVertices(3*2*Num);
	}
	else
	{
		for(int i = 0; i < Num; ++i)
		{
			m_aVertices[m_NumVertices + 4*i].m_Pos.x = pArray[i].m_X;
			m_aVertices[m_NumVertices + 4*i].m_Pos.y = pArray[i].m_Y;
			m_aVertices[m_NumVertices + 4*i].m_Tex = m_aTexture[0];
			m_aVertices[m_NumVertices + 4*i].m_Color = m_aColor[0];

			m_aVertices[m_NumVertices + 4*i + 1].m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
			m_aVertices[m_NumVertices + 4*i + 1].m_Pos.y = pArray[i].m_Y;
			m_aVertices[m_NumVertices + 4*i + 1].m_Tex = m_aTexture[1];
			m_aVertices[m_NumVertices + 4*i + 1].m_Color = m_aColor[1];

			m_aVertices[m_NumVertices + 4*i + 2].m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
			m_aVertices[m_NumVertices + 4*i + 2].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
			m_aVertices[m_NumVertices + 4*i + 2].m_Tex = m_aTexture[2];
			m_aVertices[m_NumVertices + 4*i + 2].m_Color = m_aColor[2];

			m_aVertices[m_NumVertices + 4*i + 3].m_Pos.x = pArray[i].m_X;
			m_aVertices[m_NumVertices + 4*i + 3].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
			m_aVertices[m_NumVertices + 4*i + 3].m_Tex = m_aTexture[3];
			m_aVertices[m_NumVertices + 4*i + 3].m_Color = m_aColor[3];

			if(m_Rotation != 0)
			{
				Center.x = pArray[i].m_X + pArray[i].m_Width/2;
				Center.y = pArray[i].m_Y + pArray[i].m_Height/2;

				Rotate(Center, &m_aVertices[m_NumVertices + 4*i], 4);
			}
		}

		AddVertices(4*Num);
	}
}
示例#12
0
void CGraphics_Threaded::QuadsDrawFreeform(const CFreeformItem *pArray, int Num)
{
	dbg_assert(m_Drawing == DRAWING_QUADS, "called Graphics()->QuadsDrawFreeform without begin");

	if(g_Config.m_GfxQuadAsTriangle && !m_UseOpenGL3_3)
	{
		for(int i = 0; i < Num; ++i)
		{
			GetVertex(m_NumVertices + 6*i)->m_Pos.x = pArray[i].m_X0;
			GetVertex(m_NumVertices + 6*i)->m_Pos.y = pArray[i].m_Y0;
			GetVertex(m_NumVertices + 6*i)->m_Tex = m_aTexture[0];
			SetColor(GetVertex(m_NumVertices + 6*i), 0);

			GetVertex(m_NumVertices + 6*i + 1)->m_Pos.x = pArray[i].m_X1;
			GetVertex(m_NumVertices + 6*i + 1)->m_Pos.y = pArray[i].m_Y1;
			GetVertex(m_NumVertices + 6*i + 1)->m_Tex = m_aTexture[1];
			SetColor(GetVertex(m_NumVertices + 6*i + 1), 1);

			GetVertex(m_NumVertices + 6*i + 2)->m_Pos.x = pArray[i].m_X3;
			GetVertex(m_NumVertices + 6*i + 2)->m_Pos.y = pArray[i].m_Y3;
			GetVertex(m_NumVertices + 6*i + 2)->m_Tex = m_aTexture[3];
			SetColor(GetVertex(m_NumVertices + 6*i + 2), 3);

			GetVertex(m_NumVertices + 6*i + 3)->m_Pos.x = pArray[i].m_X0;
			GetVertex(m_NumVertices + 6*i + 3)->m_Pos.y = pArray[i].m_Y0;
			GetVertex(m_NumVertices + 6*i + 3)->m_Tex = m_aTexture[0];
			SetColor(GetVertex(m_NumVertices + 6*i + 3), 0);

			GetVertex(m_NumVertices + 6*i + 4)->m_Pos.x = pArray[i].m_X3;
			GetVertex(m_NumVertices + 6*i + 4)->m_Pos.y = pArray[i].m_Y3;
			GetVertex(m_NumVertices + 6*i + 4)->m_Tex = m_aTexture[3];
			SetColor(GetVertex(m_NumVertices + 6*i + 4), 3);

			GetVertex(m_NumVertices + 6*i + 5)->m_Pos.x = pArray[i].m_X2;
			GetVertex(m_NumVertices + 6*i + 5)->m_Pos.y = pArray[i].m_Y2;
			GetVertex(m_NumVertices + 6*i + 5)->m_Tex = m_aTexture[2];
			SetColor(GetVertex(m_NumVertices + 6*i + 5), 2);
		}

		AddVertices(3*2*Num);
	}
	else
	{
		for(int i = 0; i < Num; ++i)
		{
			GetVertex(m_NumVertices + 4*i)->m_Pos.x = pArray[i].m_X0;
			GetVertex(m_NumVertices + 4*i)->m_Pos.y = pArray[i].m_Y0;
			GetVertex(m_NumVertices + 4*i)->m_Tex = m_aTexture[0];
			SetColor(GetVertex(m_NumVertices + 4*i), 0);

			GetVertex(m_NumVertices + 4*i + 1)->m_Pos.x = pArray[i].m_X1;
			GetVertex(m_NumVertices + 4*i + 1)->m_Pos.y = pArray[i].m_Y1;
			GetVertex(m_NumVertices + 4*i + 1)->m_Tex = m_aTexture[1];
			SetColor(GetVertex(m_NumVertices + 4*i + 1), 1);

			GetVertex(m_NumVertices + 4*i + 2)->m_Pos.x = pArray[i].m_X3;
			GetVertex(m_NumVertices + 4*i + 2)->m_Pos.y = pArray[i].m_Y3;
			GetVertex(m_NumVertices + 4*i + 2)->m_Tex = m_aTexture[3];
			SetColor(GetVertex(m_NumVertices + 4*i + 2), 3);

			GetVertex(m_NumVertices + 4*i + 3)->m_Pos.x = pArray[i].m_X2;
			GetVertex(m_NumVertices + 4*i + 3)->m_Pos.y = pArray[i].m_Y2;
			GetVertex(m_NumVertices + 4*i + 3)->m_Tex = m_aTexture[2];
			SetColor(GetVertex(m_NumVertices + 4*i + 3), 2);
		}

		AddVertices(4*Num);
	}
}
示例#13
0
void CGraphics_Threaded::QuadsDrawTL(const CQuadItem *pArray, int Num)
{
	CCommandBuffer::SPoint Center;

	dbg_assert(m_Drawing == DRAWING_QUADS, "called Graphics()->QuadsDrawTL without begin");

	if(g_Config.m_GfxQuadAsTriangle && !m_UseOpenGL3_3)
	{
		for(int i = 0; i < Num; ++i)
		{
			// first triangle
			GetVertex(m_NumVertices + 6*i)->m_Pos.x = pArray[i].m_X;
			GetVertex(m_NumVertices + 6*i)->m_Pos.y = pArray[i].m_Y;
			GetVertex(m_NumVertices + 6*i)->m_Tex = m_aTexture[0];
			SetColor(GetVertex(m_NumVertices + 6*i), 0);

			GetVertex(m_NumVertices + 6*i + 1)->m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
			GetVertex(m_NumVertices + 6*i + 1)->m_Pos.y = pArray[i].m_Y;
			GetVertex(m_NumVertices + 6*i + 1)->m_Tex = m_aTexture[1];
			SetColor(GetVertex(m_NumVertices + 6*i + 1), 1);

			GetVertex(m_NumVertices + 6*i + 2)->m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
			GetVertex(m_NumVertices + 6*i + 2)->m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
			GetVertex(m_NumVertices + 6*i + 2)->m_Tex = m_aTexture[2];
			SetColor(GetVertex(m_NumVertices + 6*i + 2), 2);

			// second triangle
			GetVertex(m_NumVertices + 6*i + 3)->m_Pos.x = pArray[i].m_X;
			GetVertex(m_NumVertices + 6*i + 3)->m_Pos.y = pArray[i].m_Y;
			GetVertex(m_NumVertices + 6*i + 3)->m_Tex = m_aTexture[0];
			SetColor(GetVertex(m_NumVertices + 6*i + 3), 0);

			GetVertex(m_NumVertices + 6*i + 4)->m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
			GetVertex(m_NumVertices + 6*i + 4)->m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
			GetVertex(m_NumVertices + 6*i + 4)->m_Tex = m_aTexture[2];
			SetColor(GetVertex(m_NumVertices + 6*i + 4), 2);

			GetVertex(m_NumVertices + 6*i + 5)->m_Pos.x = pArray[i].m_X;
			GetVertex(m_NumVertices + 6*i + 5)->m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
			GetVertex(m_NumVertices + 6*i + 5)->m_Tex = m_aTexture[3];
			SetColor(GetVertex(m_NumVertices + 6*i + 5), 3);

			if(m_Rotation != 0)
			{
				Center.x = pArray[i].m_X + pArray[i].m_Width/2;
				Center.y = pArray[i].m_Y + pArray[i].m_Height/2;

				Rotate(Center, GetVertex(m_NumVertices + 6*i), 6);
			}
		}

		AddVertices(3*2*Num);
	}
	else
	{
		for(int i = 0; i < Num; ++i)
		{
			GetVertex(m_NumVertices + 4*i)->m_Pos.x = pArray[i].m_X;
			GetVertex(m_NumVertices + 4*i)->m_Pos.y = pArray[i].m_Y;
			GetVertex(m_NumVertices + 4*i)->m_Tex = m_aTexture[0];
			SetColor(GetVertex(m_NumVertices + 4*i), 0);

			GetVertex(m_NumVertices + 4*i + 1)->m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
			GetVertex(m_NumVertices + 4*i + 1)->m_Pos.y = pArray[i].m_Y;
			GetVertex(m_NumVertices + 4*i + 1)->m_Tex = m_aTexture[1];
			SetColor(GetVertex(m_NumVertices + 4*i + 1), 1);

			GetVertex(m_NumVertices + 4*i + 2)->m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
			GetVertex(m_NumVertices + 4*i + 2)->m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
			GetVertex(m_NumVertices + 4*i + 2)->m_Tex = m_aTexture[2];
			SetColor(GetVertex(m_NumVertices + 4*i + 2), 2);

			GetVertex(m_NumVertices + 4*i + 3)->m_Pos.x = pArray[i].m_X;
			GetVertex(m_NumVertices + 4*i + 3)->m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
			GetVertex(m_NumVertices + 4*i + 3)->m_Tex = m_aTexture[3];
			SetColor(GetVertex(m_NumVertices + 4*i + 3), 3);

			if(m_Rotation != 0)
			{
				Center.x = pArray[i].m_X + pArray[i].m_Width/2;
				Center.y = pArray[i].m_Y + pArray[i].m_Height/2;

				Rotate(Center, GetVertex(m_NumVertices + 4*i), 4);
			}
		}

		AddVertices(4*Num);
	}
}