一半君的总结纸

听话只听一半君

#06 如何得到一个物体或component在世界坐标系(world-space coordinates)下的坐标 ?

可以用同一个命令: ‘xform’ 做到

假设你有物体A和B,A是B的parent, B相对A有位移,然后你把A在自己的 local space 下移动和旋转了. 现在你要如何得到B在world space下的位置?

// 创建两个用于测试的物体
string $sphereA[] = `polySphere -r 1 -sx 16 -sy 8 -ax 0 1 0 -tx 1`;
string $sphere = $sphereA[0];

string $cubeA[] = ` polyCube -w 1 -h 1 -d 1 -sx 1 -sy 1 -sz 1 -ax 0 1 0 -tx 1`;
string $cube = $cubeA[0];

// 把 cube 随便移动一下
move 1.23 3.14 5.55 $cube;

// 把cube Parent 给 sphere;
parent $cube $sphere;

// 随便移动旋转一下 sphere
move 8.22 4.87 9.99 $sphere;
rotate 12 34 45 $sphere;

// 现在 cube到哪里去了??
// 使用 'xform' 命令加 -worldSpace flag 再加 -translation:
float $position[3] = `xform -worldSpace -query -translation $cube`;

print ( "Cube's location in world-space: { " +
   $position[0] + ", " + $position[1] + ", " + $position[2] + " }\n" );

// 为了验证上面的结果是对的,放一个locator到cube的位置去:
spaceLocator -p $position[0] $position[1] $position[2] -name "centerOfCube";

如果你在Maya的 Attribute Editor里查看一个vertex 或者 CV点的坐标, 经常你会看到所有点都是 {0, 0, 0}. 这是因为他显示的是这个component在local coordinate space下的位置 . 你可能会觉得这没什么用 — 但其实对Maya自己来说这是有用的.

试下这个:

建一个 nurbsSphere ,不要删历史( construction history). 选择一些CV点. 打开 Attribute Editor 并且展开components –>  “CVs (click to show)” 区域. 你会看到所有的 CVs 坐标都是 {0, 0, 0}. 这说明他们相对于 ‘makeNurbSphere’ node创建出来的结果没有offset.

现在你随便移动一个CV点. 那么他在在 local coordinates 下的坐标会有些许偏移, 但是他周围的其他CV点还将留在原位置( local origin).

现在删除这个sphere的历史,再去刚才那里看看. 因为这时候每个CVs点的local space 坐标不再是从 ‘makeNurbSphere‘ node处得来的, 而是从物体本身得来的, 所以此时每个CV点的坐标都是相对于sphere的中心的偏移了.换句话说,所有的CV点的坐标都不再是{0, 0, 0}了. 但当然,他们仍然是 “local space” 坐标而不是 “world space.”

如果想得到 CV点世界坐标系下的坐标(world-space coordinates), 可以用 ‘xform‘ 命令再加上 ‘-worldSpace’ flag:

xform -ws -q -t nurbsSphere1.cv[4][3] ;
// Result: 0.4612167 0.9553883 -0.7423176 //

−ws‘ flag 告诉xform命令返回的坐标是 “world space” coordinates.

对多边形的点( polygon vertices)也可以这么用:

float $coords[] = `xform -ws -q -t pSphereShape1.vtx[14]`;
// Result: 0.3535534 -0.9238795 0.1464466 //

xform‘ command 还有更多用法. 请参见 docs.

05 August 2002

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: