本文整理汇总了C++中Matrix3::NoTrans方法的典型用法代码示例。如果您正苦于以下问题:C++ Matrix3::NoTrans方法的具体用法?C++ Matrix3::NoTrans怎么用?C++ Matrix3::NoTrans使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Matrix3
的用法示例。
在下文中一共展示了Matrix3::NoTrans方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetCrossSection
void SplineData::RotateSelectedCrossSections(Quat q)
{
Tab<int> selSplines;
Tab<int> selCrossSections;
GetSelectedCrossSections(selSplines,selCrossSections);
//move the cross sections
for (int i = 0; i < selSplines.Count(); i++)
{
int splineIndex = selSplines[i];
int crossSectionIndex = selCrossSections[i];
SplineCrossSection *section = GetCrossSection(splineIndex,crossSectionIndex);
Matrix3 sTM = section->mTM;
sTM.NoScale();
sTM.NoTrans();
Quat tq = TransformQuat(sTM,q);
//no back into our initial space
tq = TransformQuat(section->mIBaseTM,tq);
section->mQuat += tq;
}
RecomputeCrossSections();
}
示例2: RotQuat
void makBoneTrans2(INode* pNode , sBoneTrans_t& boneTrans , Matrix3& mat)
{
Point3 Trans = mat.GetTrans();
Matrix3 RotMat = mat;
Matrix3 ScaleMat = mat;
RotMat.NoScale();
ScaleMat = mat * Inverse(RotMat);
//算出Scale Matrix;
RotMat.NoTrans();
Quat RotQuat(RotMat);
//ScaleMat.NoRot();
//ScaleMat.NoTrans();
boneTrans.m_Rotate = conv_type<sQuat_t , Quat>(RotQuat);
boneTrans.m_Trans = conv_type<sVector_t ,Point3 >(Trans);
boneTrans.m_Scale.x = ScaleMat.GetRow(0).x;
boneTrans.m_Scale.y = ScaleMat.GetRow(1).y;
boneTrans.m_Scale.z = ScaleMat.GetRow(2).z;
if( abs(boneTrans.m_Scale.x - boneTrans.m_Scale.y) > 0.000001 ||
abs(boneTrans.m_Scale.y - boneTrans.m_Scale.z) > 0.000001 ||
abs(boneTrans.m_Scale.z - boneTrans.m_Scale.x) > 0.000001 )
{
std::wstring _NodeName = INodeName(pNode);
XEVOL_LOG(eXL_DEBUG_HIGH , L" {警告} : 骨头[ %s ] 的上有NonUniformScale\r\n", _NodeName.c_str() );
}
}
示例3: TransformNode
Matrix3 MshExp::TransformNode(INode* pNode,TimeValue CurTime, int TransformType){
Matrix3 mat;
switch((TransformType&0xff))
{
case TN_AFTER_WORLD://After World
mat = pNode->GetObjTMAfterWSM(CurTime);
break;
case TN_BEFORE_WORLD://Before World
mat = pNode->GetObjTMBeforeWSM(CurTime);
break;
case TN_TRANSFORM:
mat = pNode->GetNodeTM(CurTime);
break;
default:
mat = Matrix3(1);
break;
}
if(TransformType&TN_NO_TRANSLATION)
mat.NoTrans();
if(TransformType&TN_NO_ROTATION)
mat.NoRot();
if(TransformType&TN_NO_SCALE)
mat.NoScale();
return mat;
}
示例4: getMaxNodeTransform
std::string LuxMaxUtils::getMaxNodeTransform(INode* node)
{
LuxMaxUtils *lmutil;
std::string tmpTrans = "";
Matrix3 nodeTransformPos = node->GetObjTMAfterWSM(GetCOREInterface()->GetTime());
Matrix3 nodeTransformRot = nodeTransformPos;
Matrix3 nodeTransformScale = nodeTransformPos;
nodeTransformRot.NoTrans();
nodeTransformScale.NoTrans();
nodeTransformScale.NoRot();
nodeTransformRot = nodeTransformRot * nodeTransformScale;
tmpTrans.append(floatToString(nodeTransformRot.GetColumn(0).x));
tmpTrans.append(" ");
tmpTrans.append(floatToString(nodeTransformRot.GetColumn(1).x));
tmpTrans.append(" ");
tmpTrans.append(floatToString(nodeTransformRot.GetColumn(2).x));
tmpTrans.append(" ");
tmpTrans.append("0 ");
tmpTrans.append(floatToString(nodeTransformRot.GetColumn(0).y));
tmpTrans.append(" ");
tmpTrans.append(floatToString(nodeTransformRot.GetColumn(1).y));
tmpTrans.append(" ");
tmpTrans.append(floatToString(nodeTransformRot.GetColumn(2).y));
tmpTrans.append(" ");
tmpTrans.append("0 ");
tmpTrans.append(floatToString(nodeTransformRot.GetColumn(0).z));
tmpTrans.append(" ");
tmpTrans.append(floatToString(nodeTransformRot.GetColumn(1).z));
tmpTrans.append(" ");
tmpTrans.append(floatToString(nodeTransformRot.GetColumn(2).z));
tmpTrans.append(" ");
tmpTrans.append("0 ");
tmpTrans.append(floatToString(nodeTransformPos.GetTrans().x));
tmpTrans.append(" ");
tmpTrans.append(floatToString(nodeTransformPos.GetTrans().y));
tmpTrans.append(" ");
tmpTrans.append(floatToString(nodeTransformPos.GetTrans().z));
tmpTrans.append(" 1.0");
return tmpTrans;
}
示例5: AlignCrossSection
void SplineData::AlignCrossSection(int splineIndex, int crossSectionIndex,Point3 vec)
{
if ((splineIndex >= 0) && (splineIndex < mSplineElementData.Count()))
{
int numCrossSections = NumberOfCrossSections(splineIndex);
if ((crossSectionIndex >= 0) && (crossSectionIndex < numCrossSections))
{
//put the vec in spline space
SplineCrossSection *crossSection = GetCrossSection(splineIndex,crossSectionIndex);
Matrix3 crossSectionTM = crossSection->mTM;
crossSectionTM.NoScale();
crossSectionTM.NoTrans();
Matrix3 icrossSectionTM = Inverse(crossSectionTM);
Point3 crossSectionZVec = crossSection->mTangentNormalized;
Point3 yvec = Normalize(vec);
Point3 xvec = Normalize(CrossProd(yvec,crossSectionZVec));
Point3 zvec = Normalize(CrossProd(xvec,yvec));
Matrix3 rtm(1);
rtm.SetRow(0,xvec);
rtm.SetRow(1,yvec);
rtm.SetRow(2,zvec);
rtm.SetRow(3,Point3(0.0f,0.0f,0.0f));
Matrix3 relativeTM = crossSection->mIBaseTM * rtm;
Quat q(relativeTM);
q = TransformQuat(crossSection->mIBaseTM,q);
crossSection->mQuat = q;
return;
}
}
DbgAssert(0);
}
示例6: Display
int TapeHelpObject::Display(TimeValue t, INode* inode, ViewExp *vpt, int flags)
{
if ( ! vpt || ! vpt->IsAlive() )
{
// why are we here
DbgAssert(!_T("Invalid viewport!"));
return FALSE;
}
Matrix3 m;
GraphicsWindow *gw = vpt->getGW();
Material *mtl = gw->getMaterial();
GetMat(t,inode,*vpt,m);
gw->setTransform(m);
DWORD rlim = gw->getRndLimits();
gw->setRndLimits(GW_WIREFRAME|GW_EDGES_ONLY|GW_BACKCULL| (rlim&GW_Z_BUFFER) );
if (inode->Selected())
gw->setColor( LINE_COLOR, GetSelColor());
else if(!inode->IsFrozen() && !inode->Dependent())
gw->setColor( LINE_COLOR, GetUIColor(COLOR_TAPE_OBJ));
mesh.render( gw, mtl, NULL, COMP_ALL);
DrawLine(t,inode,gw,1);
gw->setRndLimits(rlim);
if(editting && !specLenState) {
Point3 pt(0,0,0);
Matrix3 tm = inode->GetObjectTM(t);
GetTargetPoint(t,inode,pt);
float den = Length(tm.GetRow(2));
float dist = (den!=0)?Length(tm.GetTrans()-pt)/den : 0.0f;
lengthSpin->SetValue( lastDist = dist, FALSE );
}
if(editting) {
m.NoTrans();
dirPt = m * Point3(0,0,1);
float len = Length(dirPt);
if(len != 0)
dirPt *= 1.0f/len;
UpdateUI(iObjParams->GetTime());
}
return(0);
}
示例7: get_bone_tm
Matrix3 CActionExporter::get_bone_tm(CSkeletonExporter* pSkeleton,int boneIndex,unsigned int iMaxTime)
{
sMaxBoneNode_t bone = pSkeleton->m_MaxBones[boneIndex];
Matrix3 boneInitMTInv;
if(G_MaxEnv().m_bUseBeforeSkeletonPose)
boneInitMTInv = bone.m_SkinInitMT;
else
boneInitMTInv = bone.m_InitNodeTM0;
boneInitMTInv.Invert();
INode* pNode = bone.m_pNode;
Matrix3 BoneTM = boneInitMTInv * pNode->GetNodeTM(iMaxTime); //>GetNodeTM(iMaxTime);
Point3 Trans = BoneTM.GetTrans();
BoneTM.NoTrans();
//对骨骼进行缩放
Trans.x *= pSkeleton->m_fScale;
Trans.y *= pSkeleton->m_fScale;
Trans.z *= pSkeleton->m_fScale;
BoneTM.SetTrans(Trans);
return BoneTM;
}
示例8: ExportMesh
void Exporter::ExportMesh(INode* node, TimeValue t, int indentLevel)
{
int i;
Mtl* nodeMtl = node->GetMtl();
Matrix3 tm = node->GetObjTMAfterWSM(t);
BOOL negScale = TMNegParity(tm);
int vx1, vx2, vx3;
TSTR indent;
ObjectState os = node->EvalWorldState(t);
if (!os.obj || os.obj->SuperClassID()!=GEOMOBJECT_CLASS_ID) {
return; // Safety net. This shouldn't happen.
}
// Order of the vertices. Get 'em counter clockwise if the objects is
// negatively scaled.
if (negScale) {
vx1 = 2;
vx2 = 1;
vx3 = 0;
}
else {
vx1 = 0;
vx2 = 1;
vx3 = 2;
}
BOOL needDel;
TriObject* tri = GetTriObjectFromNode(node, t, needDel);
if (!tri) {
return;
}
Mesh* mesh = &tri->mesh;
mesh->buildNormals();
{ // make vertices and faces
rsm->mesh->nV=mesh->getNumVerts();
rsm->mesh->nF=mesh->getNumFaces();
rsm->mesh->ver=new rvertex[mesh->getNumVerts()];
rsm->mesh->face=new rface[mesh->getNumFaces()];
}
// Export the vertices
for (i=0; i<mesh->getNumVerts(); i++) {
Point3 v = tm * mesh->verts[i];
rsm->mesh->ver[i].coord=rvector(v);
rsm->mesh->ver[i].normal=rvector(0,0,0);
}
// To determine visibility of a face, get the vertices in clockwise order.
// If the objects has a negative scaling, we must compensate for that by
// taking the vertices counter clockwise
for (i=0; i<mesh->getNumFaces(); i++) {
rsm->mesh->face[i].a=(WORD)mesh->faces[i].v[vx1];
rsm->mesh->face[i].c=(WORD)mesh->faces[i].v[vx2];
rsm->mesh->face[i].b=(WORD)mesh->faces[i].v[vx3];
rsm->mesh->face[i].nMaterial=mesh->faces[i].getMatID();
}
// Export face map texcoords if we have them...
if (!CheckForAndExportFaceMap(nodeMtl, mesh, indentLevel+1)) {
// If not, export standard tverts
int numTVx = mesh->getNumTVerts();
if (numTVx) {
rface *f=rsm->mesh->face;
for (i=0; i<mesh->getNumFaces(); i++) {
// dubble added
TVFace *tvf=&mesh->tvFace[i];
f->u[0]=mesh->tVerts[tvf->t[vx1]].x;
f->v[0]=1.0f-mesh->tVerts[tvf->t[vx1]].y;
f->u[2]=mesh->tVerts[tvf->t[vx2]].x;
f->v[2]=1.0f-mesh->tVerts[tvf->t[vx2]].y;
f->u[1]=mesh->tVerts[tvf->t[vx3]].x;
f->v[1]=1.0f-mesh->tVerts[tvf->t[vx3]].y; // good
f++;
// end of dubble added
}
}
}
{
// Export mesh (face + vertex) normals
Point3 fn; // Face normal
Point3 vn; // Vertex normal
int vert;
Face* f;
// Face and vertex normals.
// In MAX a vertex can have more than one normal (but doesn't always have it).
// This is depending on the face you are accessing the vertex through.
// To get all information we need to export all three vertex normals
// for every face.
Matrix3 pivot = node->GetNodeTM(GetStaticFrame());
pivot.NoTrans();
//.........这里部分代码省略.........