本文整理匯總了C++中Interval::SetEnd方法的典型用法代碼示例。如果您正苦於以下問題:C++ Interval::SetEnd方法的具體用法?C++ Interval::SetEnd怎麽用?C++ Interval::SetEnd使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類Interval
的用法示例。
在下文中一共展示了Interval::SetEnd方法的3個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C++代碼示例。
示例1: s
void GR2ImportImpl::ImportAnimations()
{
if (info.Animations.size() == 0 || !enableAnimation)
return;
ClearAnimation();
//for (int anim=0, nanim=info.Animations.size(); anim<nanim; ++anim)
//{
// Animation& anim = (*info.Animations[anim]);
//}
Interval range; range.SetInstant(0);
float time = FrameToTime(0);
for (int ianim=0, nanim=info.Animations.size(); ianim<nanim; ++ianim)
{
Animation& anim = (*info.Animations[ianim]);
TimeValue animEnd = TimeToFrame(time + anim.Duration);
if (animEnd > range.End())
range.SetEnd(animEnd);
// Build Default Time
int nkeys = anim.Duration / anim.TimeStep;
GR2Array<granny_real32> defaultKeys(nkeys);
granny_real32 curtime = 0.0f;
for (int ikeys=0; ikeys<nkeys; ++ikeys, curtime += anim.TimeStep)
defaultKeys[ikeys] = curtime;
for (int grp=0, ngrp=anim.TrackGroups.size(); grp<ngrp; ++grp)
{
TrackGroup& group = (*anim.TrackGroups[grp]);
if (INode *root = o->gi->GetINodeByName(group.Name))
{
Point3 s( group.InitialPlacement.Scale.m[0][0]
, group.InitialPlacement.Scale.m[1][1]
, group.InitialPlacement.Scale.m[2][2] );
for (int itrack=0, ntrack=group.TransformTracks.size(); itrack<ntrack; ++itrack)
{
TransformTrack& track = group.TransformTracks[itrack];
if (INode *node = o->gi->GetINodeByName(track.Name))
{
if (Control *c = node->GetTMController())
{
DWORD flags=INHERIT_ALL;
c->SetInheritanceFlags(INHERIT_ALL,FALSE);
ImportPosition(c, track, time, defaultKeys);
ImportRotation(c, track, time, defaultKeys);
ImportScale(c, track, time, defaultKeys);
}
}
}
Matrix3 rot(true); group.InitialPlacement.Rotation.MakeMatrix(rot);
Matrix3 m = TransMatrix(group.InitialPlacement.Origin) * Inverse(rot) * ScaleMatrix( s );
PosRotScaleNode(root, m);
// TODO: Move to initial transform
}
}
}
o->gi->SetAnimRange(range);
}
示例2: SetSceneParameters
void Import::SetSceneParameters()
{
Interval range;
range.SetStart(0);
range.SetEnd(30);
SetFrameRate(30);
SetTicksPerFrame(160);
range.SetStart(range.Start() * GetTicksPerFrame());
range.SetEnd(range.End() * GetTicksPerFrame());
m_ip->SetAnimRange(range);
Point3 bkColor (0.0f, 0.0f, 0.0f);
m_impip->SetBackGround(0, bkColor);
Point3 amColor (0.3f, 0.3f, 0.3f);
m_impip->SetAmbient(0, amColor);
}
示例3: if
// 2. 加載骨骼數據
void M2Importer::importBoneObject()
{
// Bone Group Header Node
INode* groupHeadNode = createGroupHeaderNode();
groupHeadNode->SetGroupHead(TRUE);
groupHeadNode->SetGroupMember(FALSE);
if (m_modelHeader->nameLength > 1)
{
TCHAR* modelName = (TCHAR*)(m_m2FileData + m_modelHeader->nameOfs);
TCHAR boneGroupName[256];
sprintf(boneGroupName, "%s_bone", modelName);
groupHeadNode->SetName(boneGroupName);
}
else
groupHeadNode->SetName("BoneGroup");
// Bone
// 一個Bone構造一個Node, 並且加入到組中
ModelBoneDef* boneData = (ModelBoneDef*)(m_m2FileData + m_modelHeader->ofsBones);
m_boneNodeList.reserve(m_modelHeader->nBones);
for (unsigned int i = 0; i < m_modelHeader->nBones; ++i)
{
ModelBoneDef& boneDef = boneData[i];
// create bone node
HelperObject* obj = (HelperObject*)CreateInstance(HELPER_CLASS_ID, Class_ID(BONE_CLASS_ID, 0));
ImpNode* node = m_impInterface->CreateNode();
TCHAR boneName[256];
sprintf(boneName, "bone_%02d", i);
node->SetName(boneName);
node->SetPivot(*(Point3*)&(boneDef.pivot));
node->Reference(obj);
m_impInterface->AddNodeToScene(node);
// 設置變換矩陣
Matrix3 tm;
tm.IdentityMatrix();
tm.SetTrans(*(Point3*)&(boneDef.pivot));
node->SetTransform(0, tm);
// 添加到組
INode* realINode = node->GetINode();
realINode->SetGroupHead(FALSE);
realINode->SetGroupMember(TRUE);
groupHeadNode->AttachChild(realINode);
// 設置Bone父子關係
realINode->ShowBone(2);
m_boneNodeList.push_back(realINode);
if (boneDef.parent != -1)
{
INode* parentNode = m_boneNodeList[boneDef.parent];
parentNode->AttachChild(realINode);
}
realINode->EvalWorldState(0);
}
// 導入每根骨骼的關鍵楨數據
for (unsigned int i = 0; i < m_modelHeader->nBones; ++i)
{
ModelBoneDef& boneDef = boneData[i];
INode* realINode = m_boneNodeList[i];
Control* tmControl = realINode->GetTMController();
// Position
if (boneDef.translation.nKeys)
{
// 設置動畫控製器為線性控製器
Control* posControl = createPositionController();
tmControl->SetPositionController(posControl);
unsigned int* timeData = (unsigned int*)(m_m2FileData + boneDef.translation.ofsTimes);
Point3* keyData = (Point3*)(m_m2FileData + boneDef.translation.ofsKeys);
// 設置動畫時間範圍
bool animRangeChanged = false;
Interval animRange = m_maxInterface->GetAnimRange();
for (unsigned int j = 0; j < boneDef.translation.nKeys; ++j)
{
if (timeData[j] < animRange.Start())
{
animRange.SetStart(timeData[j]);
animRangeChanged = true;
}
else if (timeData[j] > animRange.End())
{
animRange.SetEnd(timeData[j]);
animRangeChanged = true;
}
//.........這裏部分代碼省略.........