本文整理汇总了C++中Matrix4x4::SetForwardVector方法的典型用法代码示例。如果您正苦于以下问题:C++ Matrix4x4::SetForwardVector方法的具体用法?C++ Matrix4x4::SetForwardVector怎么用?C++ Matrix4x4::SetForwardVector使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Matrix4x4
的用法示例。
在下文中一共展示了Matrix4x4::SetForwardVector方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GenerateTexel
void CTexelNormalMethod::GenerateTexel(size_t iTexel, CConversionMeshInstance* pMeshInstance, CConversionFace* pFace, CConversionVertex* pV1, CConversionVertex* pV2, CConversionVertex* pV3, raytrace::CTraceResult* tr, const Vector& vecUVPosition, raytrace::CRaytracer* pTracer)
{
CConversionFace* pHitFace = tr->m_pMeshInstance->GetMesh()->GetFace(tr->m_iFace);
Vector vecHitNormal = pHitFace->GetNormal(tr->m_vecHit, tr->m_pMeshInstance);
// Build rotation matrix
Matrix4x4 mObjectToTangent;
Vector t = pFace->GetBaseVector(vecUVPosition, 0, pMeshInstance);
Vector b = pFace->GetBaseVector(vecUVPosition, 1, pMeshInstance);
Vector n = pFace->GetBaseVector(vecUVPosition, 2, pMeshInstance);
mObjectToTangent.SetForwardVector(t);
mObjectToTangent.SetUpVector(b);
mObjectToTangent.SetRightVector(n);
mObjectToTangent.InvertRT();
Vector vecTangentNormal = mObjectToTangent*vecHitNormal;
m_pGenerator->GetParallelizer()->LockData();
m_avecNormalValues[iTexel] += vecTangentNormal;
m_pGenerator->MarkTexelUsed(iTexel);
m_pGenerator->GetParallelizer()->UnlockData();
}
示例2: CreateStructure
CStructure* CStructure::CreateStructure(structure_type eType, CSPPlayer* pOwner, CSpire* pSpire, const CScalableVector& vecOrigin)
{
CStructure* pStructure = nullptr;
switch (eType)
{
default:
case STRUCTURE_NONE:
TAssert(false);
return nullptr;
case STRUCTURE_SPIRE:
pStructure = GameServer()->Create<CSpire>("CSpire");
break;
case STRUCTURE_MINE:
pStructure = GameServer()->Create<CMine>("CMine");
break;
case STRUCTURE_PALLET:
pStructure = GameServer()->Create<CPallet>("CPallet");
break;
case STRUCTURE_STOVE:
pStructure = GameServer()->Create<CStove>("CStove");
break;
}
pStructure->GameData().SetPlayerOwner(pOwner->GetPlayerCharacter()->GameData().GetPlayerOwner());
pStructure->GameData().SetPlanet(pOwner->GetPlayerCharacter()->GameData().GetPlanet());
pStructure->SetOwner(pOwner);
pStructure->SetSpire(pSpire);
pStructure->SetGlobalOrigin(pOwner->GetPlayerCharacter()->GameData().GetPlanet()->GetGlobalOrigin()); // Avoid floating point precision problems
pStructure->SetMoveParent(pOwner->GetPlayerCharacter()->GameData().GetPlanet());
pStructure->SetLocalOrigin(vecOrigin);
if (pStructure->GameData().GetPlanet())
{
Vector vecUp = pStructure->GetLocalOrigin().Normalized();
Matrix4x4 mDirection;
mDirection.SetUpVector(vecUp);
mDirection.SetForwardVector(vecUp.Cross(pOwner->GetPlayerCharacter()->GetLocalTransform().GetRightVector()).Normalized());
mDirection.SetRightVector(mDirection.GetForwardVector().Cross(vecUp).Normalized());
pStructure->SetLocalAngles(mDirection.GetAngles());
}
pStructure->AddToPhysics(CT_STATIC_MESH);
pStructure->PostConstruction();
return pStructure;
}
示例3:
Matrix4x4 Matrix4x4::ConstructCameraView(const Vector& vecPosition, const Vector& vecDirection, const Vector& vecUp)
{
Matrix4x4 m;
m.Identity();
TAssertNoMsg(fabs(vecDirection.LengthSqr()-1) < 0.0001f);
Vector vecCamSide = vecDirection.Cross(vecUp).Normalized();
Vector vecCamUp = vecCamSide.Cross(vecDirection);
m.SetForwardVector(Vector(vecCamSide.x, vecCamUp.x, -vecDirection.x));
m.SetLeftVector(Vector(vecCamSide.y, vecCamUp.y, -vecDirection.y));
m.SetUpVector(Vector(vecCamSide.z, vecCamUp.z, -vecDirection.z));
m.AddTranslation(-vecPosition);
return m;
}