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


C++ Matrix4x4f::Transform方法代码示例

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


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

示例1: Update

void ISprite::Update(f32 delta)
{
	//IBasicMesh::Update(delta);

	if (bPlaying && bAnimation)
	{
		fFrameTime += delta;

		if (fFrameTime > fCurrentFrameRate)
		{
			fFrameTime -= fCurrentFrameRate;

			if (iCurrentFrame + 1 == iFrames)
			{
				if (bLoop)
				{
					iCurrentFrame = 0;
				}
				else
				{
					bChanged = FALSE;
				}
			}
			else
				iCurrentFrame++;

			u32 oldId = pFrame->iFileId;
			pFrame = &pAnimationFrames[iCurrentFrame];

			if (oldId != pFrame->iFileId)
			{
				sRelease(pFrameImage);
				pFrameImage = static_cast<ITexture *>(pRes->Get(_F(pFrame->iFileId), Seed::ObjectTexture, pPool));
			}

			this->ReconfigureFrame();
		}
	}

	if (!bChanged && !this->IsChanged())
		return;

	uPixel p = iColor;
	p.rgba.r = iColor.argb.r;
	p.rgba.g = iColor.argb.g;
	p.rgba.b = iColor.argb.b;
	p.rgba.a = iColor.argb.a;

	if (!arCustomVertexData)
	{
		arCurrentVertexData = &vert[0];

		vert[0].cVertex = Vector3f(-fAspectHalfWidth, -fAspectHalfHeight, (f32)iPriority);
		vert[0].iColor = p;
		vert[0].cCoords = Point2f(fTexS0, fTexT0);

		vert[1].cVertex = Vector3f(+fAspectHalfWidth, -fAspectHalfHeight, (f32)iPriority);
		vert[1].iColor = p;
		vert[1].cCoords = Point2f(fTexS1, fTexT0);

		vert[2].cVertex = Vector3f(-fAspectHalfWidth, +fAspectHalfHeight, (f32)iPriority);
		vert[2].iColor = p;
		vert[2].cCoords = Point2f(fTexS0, fTexT1);

		vert[3].cVertex = Vector3f(+fAspectHalfWidth, +fAspectHalfHeight, (f32)iPriority);
		vert[3].iColor = p;
		vert[3].cCoords = Point2f(fTexS1, fTexT1);
	}
	else
	{
		arCurrentVertexData = arCustomVertexData;
	}

	f32 ratio = pScreen->GetAspectRatio();
	f32 x = fAspectHalfWidth + ISprite::GetX();
	f32 y = fAspectHalfHeight + ISprite::GetY() * ratio;

	f32 lx = ISprite::GetLocalX();
	f32 ly = ISprite::GetLocalY() * ratio;

	Matrix4x4f t1, t2, r, s;
	t1 = TranslationMatrix(lx + x, ly + y, 0.0f);
	r = RotationMatrix(AxisZ, DegToRad(ISprite::GetRotation()));
	s = ScaleMatrix(ISprite::GetScaleX(), ISprite::GetScaleY(), 1.0f);
	t2 = TranslationMatrix(-lx, -ly, 0.0f);
	Matrix4x4f transform = ((t1 * r) * s) * t2;

	if (bTransformationChanged || !arCustomVertexData)
	{
		for (u32 i = 0; i < iNumVertices; i++)
		{
			transform.Transform(arCurrentVertexData[i].cVertex);
		}
	}

	bChanged = FALSE;
	bTransformationChanged = FALSE;
}
开发者ID:fungos,项目名称:seed1,代码行数:98,代码来源:ISprite.cpp


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