本文整理汇总了C++中Matrix4::GetRow方法的典型用法代码示例。如果您正苦于以下问题:C++ Matrix4::GetRow方法的具体用法?C++ Matrix4::GetRow怎么用?C++ Matrix4::GetRow使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Matrix4
的用法示例。
在下文中一共展示了Matrix4::GetRow方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ProcNKeys
int ProcNKeys(TxtNode *t,int& foundkeys)
{
if (t->child)
{
TxtNode *sib=t->child;
if (!sib->text)
return 207;
int tp=myatoi(sib->text,sib->length);
sib=sib->sibling;
if (!sib||!sib->text)
return 208;
int num=myatoi(sib->text,sib->length);
sib=sib->sibling;
int i;
int lastframe=startframe-1;
TxtNode *s=sib;
for (i=0;i<num;i++)
{
if (!s||!s->text)
return 110;
int frame=myatoi(s->text,s->length);
if (frame>33000)
frame=frame-65536;
if (frame<startframe)
{
assert(!i);
lastframe=frame-1;
startframe=frame;
}
if (frame>endframe)
endframe=frame;
if (frame-startframe>maxmatframe)
maxmatframe=frame-startframe;
s=s->sibling;
if (!s||!s->text)
return 212;
int junk=myatoi(s->text,s->length);
if (junk!=3)
return 213;
s=s->sibling;
if (!s||!s->text)
return 216;
float x=(float)myatof(s->text,s->length);
s=s->sibling;
if (!s||!s->text)
return 216;
float y=(float)myatof(s->text,s->length);
s=s->sibling;
if (!s||!s->text)
return 216;
float z=(float)myatof(s->text,s->length);
s=s->sibling;
int k;
if (tp==1) //scale
{
Vect3 v=Vect3(x,z,y);
for (k=lastframe+1;k<=frame;k++)
scales[k-startframe]=v;
foundkeys|=4;
}
else if (tp==2) //translation
{
Vect3 v(x,-z,y);
for (k=lastframe+1;k<=frame;k++)
{
mats[k-startframe].SetRow(3,v);
mats[k-startframe].CalcFlags();
}
foundkeys|=1;
}
else if (tp==3) //rotation
{
Matrix4 tmp;
tmp.Rotate(-x*M_PI/180.0f,-y*M_PI/180.0f,-z*M_PI/180.0f);
Vect3 t,tt;
tmp.GetRow(2,t);
t*=-1.0f;
tmp.GetRow(1,tt);
tmp.SetRow(2,tt);
tmp.SetRow(1,t);
for (k=0;k<3;k++)
{
float tt=-tmp[k][2];
tmp[k][2]=tmp[k][1];
tmp[k][1]=tt;
}
for (k=lastframe+1;k<=frame;k++)
{
int l;
for (l=0;l<3;l++)
{
tmp.GetRow(l,t);
mats[k-startframe].SetRow(l,t);
mats[k-startframe].CalcFlags();
}
}
foundkeys|=2;
}
lastframe=frame;
}
//.........这里部分代码省略.........
示例2: FindPKeys
int FindPKeys(TxtNode *t)
{
if (t->child)
{
TxtNode *sib=t->child;
if (!sib)
return 200;
char framename[100];
{
if (!sib->child)
return 201;
if (!sib->child->text)
return 202;
if (!strncmp("frm-",sib->child->text,4))
mystrncpy(framename,sib->child->text+4,sib->child->length-4);
else
{
if (!strncmp("SCENE",sib->child->text,4))
return 0;
mystrncpy(framename,sib->child->text,sib->child->length);
}
sib=sib->sibling;
}
int foundkeys=0;
maxmatframe=0;
while (sib)
{
if (sib->text&&!mystrncmp("SI_AnimationKey",sib->text,sib->length))
{
if (!sib->sibling)
return 103;
sib=sib->sibling;
int err=ProcNKeys(sib,foundkeys);
if (err)
return err;
}
sib=sib->sibling;
}
{
if (maxmatframe>maxframe)
maxframe=maxmatframe;
int i;
for (i=0;i<nsNodes;i++)
{
if (!strcmp(sNodes[i].name,framename))
{
int j;
if (sNodes[i].nanimat<maxmatframe+1)
{
delete[] sNodes[i].animat;
sNodes[i].nanimat=maxmatframe+1;
sNodes[i].animat=new Matrix4[maxmatframe+1];
for (j=0;j<=maxmatframe;j++)
sNodes[i].animat[j].Identity();
}
for (j=0;j<=maxmatframe;j++)
{
Matrix4 xf;
xf=sNodes[i].mat;
Vect3 tt,t2;
if (foundkeys&1)
{
mats[j].GetRow(3,tt);
xf.SetRow(3,tt);
}
if (foundkeys&2)
{
float l;
xf.GetRow(0,t2);
l=t2.Len();
mats[j].GetRow(0,tt);
tt*=l;
xf.SetRow(0,tt);
xf.GetRow(1,t2);
l=t2.Len();
mats[j].GetRow(1,tt);
tt*=l;
xf.SetRow(1,tt);
xf.GetRow(2,t2);
l=t2.Len();
mats[j].GetRow(2,tt);
tt*=l;
xf.SetRow(2,tt);
}
if (foundkeys&4)
{
xf.GetRow(0,tt);
tt.Norm();
tt*=scales[j].x();
xf.SetRow(0,tt);
xf.GetRow(1,tt);
tt.Norm();
tt*=scales[j].x();
xf.SetRow(1,tt);
xf.GetRow(2,tt);
tt.Norm();
//.........这里部分代码省略.........
示例3:
void BinaryBufferBuilder::WriteMatrix4(const Matrix4& mat4) {
WriteVec4(mat4.GetRow(0));
WriteVec4(mat4.GetRow(1));
WriteVec4(mat4.GetRow(2));
WriteVec4(mat4.GetRow(3));
}