当前位置: 首页>>代码示例>>C++>>正文


C++ TArray::GetQuantity方法代码示例

本文整理汇总了C++中TArray::GetQuantity方法的典型用法代码示例。如果您正苦于以下问题:C++ TArray::GetQuantity方法的具体用法?C++ TArray::GetQuantity怎么用?C++ TArray::GetQuantity使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在TArray的用法示例。


在下文中一共展示了TArray::GetQuantity方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: SortByDepth

//----------------------------------------------------------------------------
void NodeCamera::SortByDepth(TArray<NodeCamera*>& rCameras)
{
	for (UInt i = 0; i < rCameras.GetQuantity()-1; ++i)
	{
		for (UInt j = 0; j < rCameras.GetQuantity()-i-1; ++j)
		{
			if (rCameras[j]->GetDepth() > rCameras[j+1]->GetDepth()) 
			{
				NodeCamera* pTemp = rCameras[j];
				rCameras[j] = rCameras[j+1];
				rCameras[j+1] = pTemp;
			}
		}
	}
}
开发者ID:rrath,项目名称:Wire3D,代码行数:16,代码来源:WireNodeCamera.cpp

示例2: memalign

//----------------------------------------------------------------------------
PdrDisplayList::PdrDisplayList(PdrRendererData* pRendererData,
	const PdrIndexBuffer& rIBuffer, UInt indexCount, UInt startIndex,
	const TArray<PdrVertexFormat::VertexElement>& rElements)
{
	// Note that the display-list buffer area must be forced out of
	// the CPU cache since it will be written using the write-gather pipe
	mSize = ((8 + indexCount * rElements.GetQuantity()*2) &
		0xFFFFFFE0) + 64 ;
	mpData = memalign(32, mSize);
	WIRE_ASSERT(mpData);
	DCInvalidateRange(mpData, mSize);

	GXBeginDisplayList(mpData, mSize);
	pRendererData->Draw(rElements, rIBuffer.GetBuffer(), indexCount,
		startIndex);
	mDisplayListSize = GXEndDisplayList();
	WIRE_ASSERT(mDisplayListSize && mDisplayListSize <= mSize);

	DCFlushRange(mpData, mSize);
}
开发者ID:rrath,项目名称:Wire3D,代码行数:21,代码来源:WireGXDisplayList.cpp

示例3: GetHermite

//----------------------------------------------------------------------------
Vector3F SplineCamera::GetHermite(TArray<Transformation*>& rControlPoints,
	UInt idx, Float t)
{
	WIRE_ASSERT(idx > 0 && idx < rControlPoints.GetQuantity()-2);
	Float t2 = t * t;
	Float t3 = t2 * t;

	Vector3F p0 = (*(rControlPoints[idx - 1])).GetTranslate();
	Vector3F p1 = (*(rControlPoints[idx])).GetTranslate();
	Vector3F p2 = (*(rControlPoints[idx + 1])).GetTranslate();
	Vector3F p3 = (*(rControlPoints[idx + 2])).GetTranslate();

	const Float tension = 0.5f;	// 0.5 is catmull-rom

	Vector3F v4 = tension * (p2 - p0);
	Vector3F v5 = tension * (p3 - p1);

	Float blend1 = 2 * t3 - 3 * t2 + 1;
	Float blend2 = -2 * t3 + 3 * t2;
	Float blend3 = t3 - 2 * t2 + t;
	Float blend4 = t3 - t2;

	return blend1 * p1 + blend2 * p2 + blend3 * v4 + blend4 * v5;
}
开发者ID:alanhaugen,项目名称:wire3d,代码行数:25,代码来源:SplineCamera.cpp

示例4: PrepareForStaticBatching

//----------------------------------------------------------------------------
void Node::PrepareForStaticBatching(Bool forceWorldIsCurrent,
	Bool duplicateShared, TArray<MergeArray*>* pMergeArrays)
{
	Bool isInitiator = pMergeArrays == NULL;
	if (isInitiator)
	{
		PrepareForDynamicBatching(forceWorldIsCurrent, duplicateShared);
		pMergeArrays = WIRE_NEW TArray<MergeArray*>;
	}

	if (mspRenderObject && WorldIsCurrent && WorldBoundIsCurrent &&
		World.IsIdentity())
	{
		Mesh* pMesh = mspRenderObject->GetMesh();
		Bool isNewMesh = true;
		for (UInt i = 0; i < pMergeArrays->GetQuantity(); i++)
		{
			MergeArray* pMeshArray = (*pMergeArrays)[i];
			Mesh::VertexBuffers& rMVABs = (*pMeshArray)[0]->GetMesh()->
				GetVertexBuffers();
			Mesh::VertexBuffers& rMVBs = pMesh->GetVertexBuffers();

			Bool isIdentical = true;
			if (rMVABs.GetQuantity() == rMVBs.GetQuantity())
			{
				for (UInt j = 0; j < rMVBs.GetQuantity(); j++)
				{
					if (rMVBs[j]->GetAttributes().GetKey() !=
						rMVABs[j]->GetAttributes().GetKey())
					{
						isIdentical = false;
						break;
					}
				}
			}

			if (isIdentical)
			{
				pMeshArray->Append(mspRenderObject);
				isNewMesh = false;
				break;
			}
		}

		if (isNewMesh)
		{
			MergeArray* pNewArray = WIRE_NEW MergeArray;
			pNewArray->Append(mspRenderObject);
			pMergeArrays->Append(pNewArray);
		}
	}

	for (UInt i = 0; i < GetQuantity(); i++)
	{
		Node* pChild = DynamicCast<Node>(GetChild(i));
		if (pChild)
		{
			pChild->PrepareForStaticBatching(forceWorldIsCurrent,
				duplicateShared, pMergeArrays);
		}
	}

	if (isInitiator)
	{
		TArray<MergeArray*>* pSortedArrays = WIRE_NEW TArray<MergeArray*>;
		for (UInt i = 0; i < pMergeArrays->GetQuantity(); i++)
		{
			MergeArray* pMergeArray = (*pMergeArrays)[i];

			const UInt maxVtxQty = 0x10000;
			UInt vtxCount = 0;
			UInt idxCount = 0;
			MergeArray* pSortedArray = WIRE_NEW MergeArray(pMergeArray->
				GetQuantity(), 16);
			pSortedArrays->Append(pSortedArray);

			for (UInt i = 0; i < pMergeArray->GetQuantity(); i++)
			{
				Mesh* pMesh = (*pMergeArray)[i]->GetMesh();
				if ((vtxCount + pMesh->GetVertexCount()) < maxVtxQty)
				{
					vtxCount += pMesh->GetVertexCount();
					idxCount += pMesh->GetIndexCount();
				}
				else
				{
					pSortedArray = WIRE_NEW MergeArray(pMergeArray->
						GetQuantity(), 16);
					pSortedArrays->Append(pSortedArray);
					vtxCount = 0;
					idxCount = 0;
				}

				pSortedArray->Append((*pMergeArray)[i]);
			}

			WIRE_DELETE pMergeArray;
		}

//.........这里部分代码省略.........
开发者ID:cbalderrama,项目名称:wire3d,代码行数:101,代码来源:WireNode.cpp

示例5: Draw

//----------------------------------------------------------------------------
void NodeCamera::Draw(TArray<NodeCamera*>& rNodeCameras, Spatial* pRoot,
	Culler& rCuller, Renderer* pRenderer)
{
	WIRE_ASSERT(pRenderer && pRoot);
	if (!pRenderer || !pRoot)
	{
		return;
	}

	const UInt maxCameraCount = 64;
	if (rNodeCameras.GetQuantity() >= 64)
	{
		WIRE_ASSERT(false);
		return;
	}

	// cull all skyboxes attached to cameras in the scene
	Spatial::CullingMode tempCullingModes[maxCameraCount];
	for (UInt i = 0; i < rNodeCameras.GetQuantity(); i++)
	{
		NodeCamera* pNodeCamera = rNodeCameras[i];
		WIRE_ASSERT(pNodeCamera);
		Node* pSkybox = pNodeCamera->mspSkybox;
		if (pSkybox && pNodeCamera->IsEnabled())
		{
			tempCullingModes[i] = pSkybox->Culling;
			pSkybox->Culling = Spatial::CULL_ALWAYS;
		}
	}

	for (UInt i = 0; i < rNodeCameras.GetQuantity(); i++)
	{
		NodeCamera* pNodeCamera = rNodeCameras[i];
		WIRE_ASSERT(pNodeCamera && pNodeCamera->Get());
		if (!pNodeCamera->IsEnabled())
		{
			continue;
		}

		Camera* pCamera = pNodeCamera->Get();

		rCuller.SetCamera(pCamera);
		rCuller.ComputeVisibleSet(pRoot);

		Float left;
		Float right;
		Float top;
		Float bottom;
		pCamera->GetViewport(left, right, top, bottom);
		UInt width = pRenderer->GetWidth();
		UInt height = pRenderer->GetHeight();
		Vector4F rect;
		rect.X() = MathF::Round(left*width);
		rect.Y() = MathF::Round((1.0F-top)*height);
		rect.Z() = MathF::Round((right-left)*width);
		rect.W() = MathF::Round((top-bottom)*height);

		ColorRGBA clearColor = pRenderer->GetClearColor();
		switch (rNodeCameras[i]->mClearFlag)
		{
		case CF_ALL:
			pRenderer->SetClearColor(pNodeCamera->GetClearColor());
			pRenderer->ClearBuffers(true, true, rect);
			pRenderer->SetClearColor(clearColor);
			break;

		case CF_Z_ONLY:
			pRenderer->ClearBuffers(false, true, rect);
			break;

		case CF_NONE:		
			break;

		default:
			WIRE_ASSERT(false);
		}

		pRenderer->SetCamera(pCamera);
		pRenderer->Draw(rCuller.GetVisibleSets());

		Node* pSkybox = pNodeCamera->mspSkybox;
		if (pSkybox)
		{
			pSkybox->Culling = Spatial::CULL_NEVER;
			rCuller.ComputeVisibleSet(pSkybox);
			pRenderer->Draw(rCuller.GetVisibleSets());
			pSkybox->Culling = Spatial::CULL_ALWAYS;
		}
	}

	// restore culling mode of all skyboxes attached to cameras in the scene
	for (UInt i = 0; i < rNodeCameras.GetQuantity(); i++)
	{
		NodeCamera* pNodeCamera = rNodeCameras[i];
		WIRE_ASSERT(pNodeCamera);
		Node* pSkybox = pNodeCamera->mspSkybox;
		if (pSkybox && pNodeCamera->IsEnabled())
		{
			pSkybox->Culling = tempCullingModes[i];
//.........这里部分代码省略.........
开发者ID:rrath,项目名称:Wire3D,代码行数:101,代码来源:WireNodeCamera.cpp

示例6: pos

//----------------------------------------------------------------------------
Texture2D* Sample5::CreateTexture()
{
	if (mspTexture)
	{
		return mspTexture;
	}

	// define the properties of the image to be used as a texture
	const UInt width = 256;
	const UInt height = 256;
	const Image2D::FormatMode format = Image2D::FM_RGB888;
	const UInt bpp = Image2D::GetBytesPerPixel(format);
	ColorRGB* const pColorDst = WIRE_NEW ColorRGB[width*height];

	// create points with random x,y position and color
	TArray<Cell> cells;
	Random random;
	for (UInt i = 0; i < 10; i++)
	{
		Cell cell;
		cell.point.X() = random.GetFloat() * width;
		cell.point.Y() = random.GetFloat() * height;
		cell.color.R() = random.GetFloat();
		cell.color.G() = random.GetFloat();
		cell.color.B() = random.GetFloat();

		Float max = 0.0F;
		max = max < cell.color.R() ? cell.color.R() : max;
		max = max < cell.color.G() ? cell.color.G() : max;
		max = max < cell.color.B() ? cell.color.B() : max;
		max = 1.0F / max;
		cell.color *= max;
		cells.Append(cell);
	}

	// iterate over all texels and use the distance to the 2 closest random
	// points to calculate the texel's color
	Float max = 0;
	for (UInt y = 0; y < height; y++)
	{
		for (UInt x = 0; x < width; x++)
		{
			Float minDist = MathF::MAX_REAL;
			Float min2Dist = MathF::MAX_REAL;
			UInt minIndex = 0;

			for (UInt i = 0; i < cells.GetQuantity(); i++)
			{
				Vector2F pos(static_cast<Float>(x), static_cast<Float>(y));

				// Handle tiling
				Vector2F vec = cells[i].point - pos;
				vec.X() = MathF::FAbs(vec.X());
				vec.Y() = MathF::FAbs(vec.Y());
				vec.X() = vec.X() > width/2 ? width-vec.X() : vec.X();
				vec.Y() = vec.Y() > height/2 ? height-vec.Y() : vec.Y();

				Float distance = vec.Length();

				if (minDist > distance)
				{
					min2Dist = minDist;
					minDist = distance;
					minIndex = i;
				}
				else if (min2Dist > distance)
				{
					min2Dist = distance;
				}
			}

			Float factor = (min2Dist - minDist) + 3;
			ColorRGB color = cells[minIndex].color * factor;
			pColorDst[y*width+x] = color;

			max = max < color.R() ? color.R() : max;
			max = max < color.G() ? color.G() : max;
			max = max < color.B() ? color.B() : max;
		}
	}

	// convert and normalize the ColorRGBA float array to an 8-bit per
	// channel texture
	max = 255.0F / max;
	UChar* const pDst = WIRE_NEW UChar[width * height * bpp];
	for (UInt i = 0; i < width*height; i++)
	{
		ColorRGB color = pColorDst[i];
		pDst[i*bpp] = static_cast<UChar>(color.R() * max);
		pDst[i*bpp+1] = static_cast<UChar>(color.G() * max);
		pDst[i*bpp+2] = static_cast<UChar>(color.B() * max);
	}

	Image2D* pImage = WIRE_NEW Image2D(format, width, height, pDst);
	Texture2D* pTexture = WIRE_NEW Texture2D(pImage);
	// The texture tiles are supposed to be seamless, therefore
	// we need the UV set to be repeating.
	pTexture->SetWrapType(0, Texture2D::WT_REPEAT);
	pTexture->SetWrapType(1, Texture2D::WT_REPEAT);
//.........这里部分代码省略.........
开发者ID:alanhaugen,项目名称:wire3d,代码行数:101,代码来源:Sample5.cpp


注:本文中的TArray::GetQuantity方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。