本文整理汇总了C++中Matrix3::IdentityMatrix方法的典型用法代码示例。如果您正苦于以下问题:C++ Matrix3::IdentityMatrix方法的具体用法?C++ Matrix3::IdentityMatrix怎么用?C++ Matrix3::IdentityMatrix使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Matrix3
的用法示例。
在下文中一共展示了Matrix3::IdentityMatrix方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SetInitTM
BOOL CBoneDef::SetInitTM(IPhysiqueExport* pExport, const Matrix3& matMesh)
{
BOOL bErr = false;
R_ASSERT(pBone);
R_ASSERT(Helper::IsBone(pBone,U.m_SkinAllowDummy));
Matrix3 tmp;
//Log("SetInitTM:",pBone->GetName());
if(Helper::IsBipedBone(pBone)) {
Helper::SetBipedUniform(pBone, TRUE, TRUE);
bErr = CGINTM(pBone,pExport->GetInitNodeTM(pBone, tmp));
if (bErr) tmp.IdentityMatrix();
Helper::SetBipedUniform(pBone, FALSE, FALSE);
} else {
bErr = CGINTM(pBone,pExport->GetInitNodeTM(pBone, tmp));
if (bErr) tmp.IdentityMatrix();
}
if (1){//!bErr){
Helper::ConvertMatrix(tmp,matInit);
matOffset.invert(matInit);
//S matMesh
// pBone->matOffset = matMesh * Inverse(pBone->matInit);
}
return 1;//!bErr;
}
示例2: proc
int SphereObjCreateCallBack::proc(ViewExp *vpt,int msg, int point, int flags, IPoint2 m, Matrix3& mat )
{
float r;
Point3 p1,center;
if (msg == MOUSE_FREEMOVE)
{
vpt->SnapPreview(m,m,NULL, SNAP_IN_3D);
}
if (msg==MOUSE_POINT||msg==MOUSE_MOVE)
{
switch(point)
{
case 0: // only happens with MOUSE_POINT msg
// Find the node and plug in the wire color
{
ULONG handle;
ob->NotifyDependents(FOREVER, (PartID)&handle, REFMSG_GET_NODE_HANDLE);
INode *node = GetCOREInterface()->GetINodeByHandle(handle);
if (node) node->SetWireColor(RGB(255, 0, 0));
}
ob->pblock2->SetValue(PB_RADIUS,0,0.0f);
ob->suspendSnap = TRUE;
sp0 = m;
p0 = vpt->SnapPoint(m,m,NULL,SNAP_IN_3D);
mat.SetTrans(p0);
break;
case 1:
mat.IdentityMatrix();
//mat.PreRotateZ(HALFPI);
p1 = vpt->SnapPoint(m,m,NULL,SNAP_IN_3D);
r = Length(p1-p0) / 7.0f;
mat.SetTrans(p0);
ob->pblock2->SetValue(PB_RADIUS,0,r);
ob->pmapParam->Invalidate();
if (flags&MOUSE_CTRL)
{
float ang = (float)atan2(p1.y-p0.y,p1.x-p0.x);
mat.PreRotateZ(ob->ip->SnapAngle(ang));
}
if (msg==MOUSE_POINT)
{
ob->suspendSnap = FALSE;
return (Length(m-sp0)<3 || Length(p1-p0)<0.1f)?CREATE_ABORT:CREATE_STOP;
}
break;
}
}
else
if (msg == MOUSE_ABORT)
{
return CREATE_ABORT;
}
return TRUE;
}
示例3: comp_affine
// CAL-05/24/02: TODO: this should really go to core\decomp.cpp, and it should be optimized.
// For now, it's defined locally in individual files in the ctrl project.
static void comp_affine( const AffineParts &ap, Matrix3 &mat )
{
Matrix3 tm;
mat.IdentityMatrix();
mat.SetTrans( ap.t );
if ( ap.f != 1.0f ) { // has f component
tm.SetScale( Point3( ap.f, ap.f, ap.f ) );
mat = tm * mat;
}
if ( !ap.q.IsIdentity() ) { // has q rotation component
ap.q.MakeMatrix( tm );
mat = tm * mat;
}
if ( ap.k.x != 1.0f || ap.k.y != 1.0f || ap.k.z != 1.0f ) { // has k scale component
tm.SetScale( ap.k );
if ( !ap.u.IsIdentity() ) { // has u rotation component
Matrix3 utm;
ap.u.MakeMatrix( utm );
mat = Inverse( utm ) * tm * utm * mat;
} else {
mat = tm * mat;
}
}
}
示例4: switch
StretchDeformer::StretchDeformer(TimeValue t, ModContext &mc,
float stretch, float amplify, int naxis,
float from, float to, int doRegion,
Matrix3& modmat, Matrix3& modinv)
{
Matrix3 mat;
Interval valid;
// if (from==to) doRegion = FALSE;
this->doRegion = doRegion;
this->from = from;
this->to = to;
time = t;
tm = modmat;
invtm = modinv;
mat.IdentityMatrix();
switch ( naxis ) {
case 0: mat.RotateY( -HALFPI ); break; //X
case 1: mat.RotateX( HALFPI ); break; //Y
case 2: break; //Z
}
SetAxis( mat );
assert (mc.box);
bbox = *mc.box;
CalcBulge(naxis, stretch, amplify);
}
示例5: ActionAfterSimulation
/*
Need store the pose after simulation
*/
void MxActor::ActionAfterSimulation()
{
// update pose to max node
if(getInteractivity() != RB_DYNAMIC)
return;
// update rigid body's last pose
//ccMaxNode* pn = ccMaxWorld::FindNode(m_node);
assert(maxNodeActor);
Matrix3 globalPose;
globalPose.IdentityMatrix();
if (m_bulletBody)
{
NxActorDesc& actorDesc = m_desc;
btTransform localTrans;
max2Bullet(actorDesc.localPose,localTrans);
btTransform maxWorldTrans = m_bulletBody->getWorldTransform()*localTrans.inverse();
bullet2Max(maxWorldTrans,globalPose);
//@todo: need correction for boxes (off center etc)
maxNodeActor->SetSimulatedPose(globalPose);
Matrix3 poseTM = maxNodeActor->GetCurrentTM();
SaveLastPose(poseTM);
}
}
示例6: Display
//The display function that is used to display the formation.
int FormationBhvr::Display(TimeValue t, ViewExp *vpt)
{
// setup
int i,j;
if(DisplayFormation(t)==FALSE) return FALSE;
if(GetFollowerCount(t)<=0) return FALSE;
if(GetFollowerMatrixCount(t)<=0) return FALSE;
INode *leaderNode;
leaderNode = GetLeader(t);
if(leaderNode==NULL) return FALSE;
//check tgo see if we have created a default sphere for drawing yet...
//if we haven't then create it..
if (numpts == 0)
GetSpherePoints(Point3(0.0f,0.0f,0.0f), 1.0, SpherePts);
GraphicsWindow *gw = vpt->getGW();
//set the identity matrix...
Matrix3 idMat;
idMat.IdentityMatrix();
gw->setTransform(idMat);
gw->setColor(LINE_COLOR,.815f,.976f,1.0f);
float scaleRadius = GetDisplayScale(t);
//set the drawing radius values based upon what the radius size is.
for (i=0; i<NUMAROUND * 3; i++) ScaledPts[i] = ((SpherePts[i] * scaleRadius));
//for each follower we need to increase the bounding box by it's
//world position location...
for(i =0;i<GetFollowerCount(t);i++)
{
INode *followerNode = GetFollower(t,i);
if(followerNode) //if we have a a node...
{
Matrix3 leaderMat = GetCurrentMatrix(leaderNode,t);
leaderMat.NoScale();
Matrix3 followerMat = GetFollowerMatrix(t,i);
Matrix3 worldSpace = followerMat *leaderMat;
for (j=0; j<NUMAROUND * 3; j++) CurPts[j] = worldSpace*ScaledPts[j]; //adding the center to the point positions
gw->polyline(NUMAROUND,&CurPts[0],NULL,NULL,TRUE,NULL);
gw->polyline(NUMAROUND,&CurPts[NUMAROUND],NULL,NULL,TRUE,NULL);
gw->polyline(NUMAROUND,&CurPts[NUMAROUND * 2],NULL,NULL,TRUE,NULL);
}
}
return TRUE;
}
示例7: IGetViewTM
Matrix3 plStaticEnvLayer::IGetViewTM( int i )
{
Matrix3 m;
m.IdentityMatrix();
switch( i )
{
case kTopFace:
m.RotateX( -M_PI );
break;
case kBottomFace:
break;
case kLeftFace:
m.RotateX( -.5f * M_PI );
m.RotateY( -.5f * M_PI );
break;
case kRightFace:
m.RotateX( -.5f * M_PI );
m.RotateY( +.5f * M_PI );
break;
case kFrontFace:
m.RotateX( -.5f * M_PI );
m.RotateY( M_PI );
break;
case kBackFace:
m.RotateX( -.5f * M_PI );
break;
}
return m;
}
示例8: proc
int WindObjCreateCallback::proc(
ViewExp *vpt,int msg, int point, int flags, IPoint2 m, Matrix3& mat)
{
if ( ! vpt || ! vpt->IsAlive() )
{
// why are we here
DbgAssert(!_T("Invalid viewport!"));
return FALSE;
}
if (msg==MOUSE_POINT||msg==MOUSE_MOVE)
{
#ifdef _3D_CREATE
DWORD snapdim = SNAP_IN_3D;
#else
DWORD snapdim = SNAP_IN_PLANE;
#endif
switch(point)
{
case 0:
sp0 = m;
p0 = vpt->SnapPoint(m,m,NULL,snapdim);
mat.SetTrans(p0);
break;
case 1:
if (ob->ClassID()==Class_ID(GRAVITYOBJECT_CLASS_ID,0))
{
mat.IdentityMatrix();
mat.RotateX(PI);
mat.SetTrans(p0);
}
p1 = vpt->GetPointOnCP(m);
ob->pblock2->SetValue(PB_DISPLENGTH,0,Length(p1-p0)/2.0f);
// ob->pmapParam->Invalidate();
wind_param_blk.InvalidateUI();
if (msg==MOUSE_POINT)
{
if (Length(m-sp0)<3) return CREATE_ABORT;
else return CREATE_STOP;
}
break;
}
}
else
{
if (msg == MOUSE_ABORT)
{
return CREATE_ABORT;
}
else
if (msg == MOUSE_FREEMOVE)
{
vpt->SnapPreview(m,m);
}
}
return TRUE;
}
示例9:
BendDeformer::BendDeformer(
TimeValue t, ModContext &mc,
float angle, float dir, int naxis,
float from, float to, int doRegion,
Matrix3& modmat, Matrix3& modinv)
{
this->doRegion = doRegion;
this->from = from;
this->to = to;
Matrix3 mat;
Interval valid;
time = t;
tm = modmat;
invtm = modinv;
mat.IdentityMatrix();
switch (naxis) {
case 0: mat.RotateY( -HALFPI ); break; //X
case 1: mat.RotateX( HALFPI ); break; //Y
case 2: break; //Z
}
mat.RotateZ(DegToRad(dir));
SetAxis(mat);
assert (mc.box);
bbox = *mc.box;
CalcR(naxis,DegToRad(angle));
// Turn this off for a sec.
this->doRegion = FALSE;
float len = to-from;
float rat1, rat2;
if (len==0.0f) {
rat1 = rat2 = 1.0f;
} else {
rat1 = to/len;
rat2 = from/len;
}
Point3 pt;
tmAbove.IdentityMatrix();
tmAbove.Translate(Point3(0.0f,0.0f,-to));
tmAbove.RotateY(DegToRad(angle * rat1));
tmAbove.Translate(Point3(0.0f,0.0f,to));
pt = Point3(0.0f,0.0f,to);
tmAbove.Translate((Map(0,pt*invtm)*tm)-pt);
tmBelow.IdentityMatrix();
tmBelow.Translate(Point3(0.0f,0.0f,-from));
tmBelow.RotateY(DegToRad(angle * rat2));
tmBelow.Translate(Point3(0.0f,0.0f,from));
pt = Point3(0.0f,0.0f,from);
tmBelow.Translate((Map(0,pt*invtm)*tm)-pt);
this->doRegion = doRegion;
}
示例10: SetFormation
//This will set the formation
void FormationBhvr::SetFormation(TimeValue t)
{
INode *node;
Matrix3 tempMatrix;
//Make sure that the leader is not part of the follower array..
RemoveLeaderFromFormation(t);
INode *leader = GetLeader(t);
if(leader==NULL)
return;
Matrix3 leaderPosition = GetCurrentMatrix(leader,t);
leaderPosition.NoScale(); //kill any scale if we have it
leaderPosition.Invert(); //it's inverted...
int numDelegates = GetFollowerCount(t);
//zero out the formation matrix that's used for saving it out.
pblock->ZeroCount(follower_matrix1);
pblock->ZeroCount(follower_matrix2);
pblock->ZeroCount(follower_matrix3);
pblock->ZeroCount(follower_matrix4);
for(int i =0;i<numDelegates;i++)
{
node = GetFollower(t,i);
if(node)
{
tempMatrix = GetCurrentMatrix(node,t);
tempMatrix.NoScale();
Matrix3 leaderMat =tempMatrix*leaderPosition;
AppendFollowerMatrix(t,leaderMat);
//killed because matrix3 wasn't working ...pblock->Append(follower_matrix,1,&leaderMat);
}
else
{
//we still set up follower_matrix so that the counts
//of the follower_matrix tab and the follower tab are equal.
tempMatrix.IdentityMatrix();
AppendFollowerMatrix(t,tempMatrix);
//pblock->Append(follower_matrix,1,&tempMat);
}
}
}
示例11: buildMesh
void VRayCamera::buildMesh(void) {
if (meshBuilt) return;
int nverts = 16;
int nfaces = 24;
mesh.setNumVerts(nverts);
mesh.setNumFaces(nfaces);
float len = (float)5.0;
float w = (float)8.0;
float d = w*(float).8;
float e = d*(float).5;
float f = d*(float).8;
float l = w*(float).8;
mesh.setVert(0, Point3( -d, -d, -len));
mesh.setVert(1, Point3( d, -d, -len));
mesh.setVert(2, Point3( -d, d, -len));
mesh.setVert(3, Point3( d, d, -len));
mesh.setVert(4, Point3( -d, -d, len));
mesh.setVert(5, Point3( d, -d, len));
mesh.setVert(6, Point3( -d, d, len));
mesh.setVert(7, Point3( d, d, len));
MakeQuad(&(mesh.faces[ 0]), 0,2,3,1, 1);
MakeQuad(&(mesh.faces[ 2]), 2,0,4,6, 2);
MakeQuad(&(mesh.faces[ 4]), 3,2,6,7, 4);
MakeQuad(&(mesh.faces[ 6]), 1,3,7,5, 8);
MakeQuad(&(mesh.faces[ 8]), 0,1,5,4, 16);
MakeQuad(&(mesh.faces[10]), 4,5,7,6, 32);
mesh.setVert(8+0, Point3( -e, -e, len));
mesh.setVert(8+1, Point3( e, -e, len));
mesh.setVert(8+2, Point3( -e, e, len));
mesh.setVert(8+3, Point3( e, e, len));
mesh.setVert(8+4, Point3( -f, -f, len+l));
mesh.setVert(8+5, Point3( f, -f, len+l));
mesh.setVert(8+6, Point3( -f, f, len+l));
mesh.setVert(8+7, Point3( f, f, len+l));
Face* fbase = &mesh.faces[12];
MakeQuad(&fbase[0], 0,2,3,1, 1, 8);
MakeQuad(&fbase[2], 2,0,4,6, 2, 8);
MakeQuad(&fbase[4], 3,2,6,7, 4, 8);
MakeQuad(&fbase[6], 1,3,7,5, 8, 8);
MakeQuad(&fbase[8], 0,1,5,4, 16, 8);
MakeQuad(&fbase[10],4,5,7,6, 32, 8);
// whoops- rotate 180 about x to get it facing the right way
Matrix3 mat;
mat.IdentityMatrix();
mat.RotateX(DegToRad(180.0));
for (int i=0; i<nverts; i++) mesh.getVert(i)=mat*mesh.getVert(i);
mesh.buildNormals();
mesh.EnableEdgeList(1);
meshBuilt = true;
}
示例12: createmethod
int CreateSWrapObjectProc::createmethod(
ViewExp *vpt,int msg, int point, int flags, IPoint2 m, Matrix3& mat)
{ Point3 d;
#ifdef _3D_CREATE
DWORD snapdim = SNAP_IN_3D;
#else
DWORD snapdim = SNAP_IN_PLANE;
#endif
#ifdef _OSNAP
if (msg == MOUSE_FREEMOVE)
{ vpt->SnapPreview(m,m,NULL, snapdim);
}
#endif
if (msg==MOUSE_POINT||msg==MOUSE_MOVE) {
switch(point) {
case 0:
sp0 = m;
p0 = vpt->SnapPoint(m,m,NULL,snapdim);
mat.SetTrans(p0);
SWrapObj->pblock->SetValue(PB_ICONSIZE,0,0.01f);
SWrapObj->pmapParam->Invalidate();
break;
case 1: {
mat.IdentityMatrix();
sp1 = m;
p1 = vpt->SnapPoint(m,m,NULL,snapdim);
Point3 center = (p0+p1)/float(2);
mat.SetTrans(center);
SWrapObj->pblock->SetValue(PB_ICONSIZE,0,Length(p1-p0));
SWrapObj->pmapParam->Invalidate();
if (msg==MOUSE_POINT) {
if (Length(m-sp0)<3) {
return CREATE_ABORT;
} else {
ICustButton *iBut = GetICustButton(GetDlgItem(SWrapObj->hParams,IDC_AP_WRAPBUTTON));
iBut->Enable();
ReleaseICustButton(iBut);
return CREATE_STOP;
}
}
break;
}
}
} else {
if (msg == MOUSE_ABORT)
return CREATE_ABORT;
}
return TRUE;
}
示例13: getTM
void VRayCamera::getTM(TimeValue t, INode *node, ViewExp *vpt, Matrix3 &tm) {
tm=node->GetObjectTM(t);
AffineParts ap;
decomp_affine(tm, &ap);
tm.IdentityMatrix();
tm.SetRotate(ap.q);
tm.SetTrans(ap.t);
float scaleFactor=vpt->NonScalingObjectSize()*vpt->GetVPWorldWidth(tm.GetTrans())/360.0f;
tm.Scale(Point3(scaleFactor,scaleFactor,scaleFactor));
}
示例14: proc
int GSphereObjCreateCallBack::proc(ViewExp *vpt, int msg, int point, int flags, IPoint2 m, Matrix3& mat ) {
if ( ! vpt || ! vpt->IsAlive() )
{
// why are we here
DbgAssert(!_T("Doing proc() on invalid viewport!"));
return FALSE;
}
Point3 p1, center;
if (msg == MOUSE_FREEMOVE)
{
vpt->SnapPreview(m, m, NULL, SNAP_IN_3D);
}
if (msg==MOUSE_POINT||msg==MOUSE_MOVE) {
switch(point) {
case 0: // only happens with MOUSE_POINT msg
ob->suspendSnap = TRUE;
sp0 = m;
p0 = vpt->SnapPoint(m, m, NULL, SNAP_IN_3D);
mat.SetTrans(p0);
break;
case 1:
mat.IdentityMatrix();
p1 = vpt->SnapPoint(m, m, NULL, SNAP_IN_3D);
center = (p0+p1)/float(2);
mat.SetTrans(center);
mat.SetTrans(center);
container_param_blk.InvalidateUI();
if (flags&MOUSE_CTRL) {
float ang = (float)atan2(p1.y-p0.y, p1.x-p0.x);
mat.PreRotateZ(ob->ip->SnapAngle(ang));
}
if (msg==MOUSE_POINT) {
ob->suspendSnap = FALSE;
return (Length(m-sp0)<3)?CREATE_ABORT:CREATE_STOP;
}
break;
}
} else {
if (msg == MOUSE_ABORT) return CREATE_ABORT;
}
return TRUE;
}
示例15: NURBSXFormSurface
int
APITestUtil::MakeTestXFormSurface(NURBSSet &nset, int p)
{
NURBSXFormSurface *s = new NURBSXFormSurface();
s->SetName(GetString(IDS_XFORM_SURFACE));
s->SetNSet(&nset);
s->SetParent(p);
Matrix3 mat;
mat.IdentityMatrix();
mat.SetTrans(Point3(-150, 150, 0));
s->SetXForm(0, mat);
return nset.AppendObject(s);
}