Hi Chad,

Thanks for your reply.

Is the ^ representing to the power of?

I am not really worried about the rotation around the normal at this
stage, so can I use the getFaceVertexBinormal to get the tangent?

I am not sure what the . in the matrix you drew represents, is this a
dot product?

Regards,

Adam.

On Wed, Aug 25, 2010 at 4:54 PM, Chad Vernon <[email protected]> wrote:
> You need more than one vector to set an orientation since there are infinite
> orientations that can spin around the normal.  You need at least 2
> non-parallel vectors to create an orientation.
>
> If you have a normal vector n and a tangent vector t, you can create an
> orthonormal basis by:
>
> x = n ^ t
> t = x ^ n
>
> Then you can pick which axis is which for your matrix:
> x.x  x.y  x.z  0
> n.x  n.y  n.z  0
> t.x   t.y   t.z  0
> 0      0     0   1
>
> Chad
>
> On Tue, Aug 24, 2010 at 11:44 PM, Adam Miels <[email protected]> wrote:
>>
>> Hi All.
>>
>> Not really a question specific to Python in Maya, but I am trying to
>> write this in python, and know that there are quite a few experienced
>> maya people on the list.
>>
>> I was wondering if there was possibly a better way to do this.
>>
>> I am querying a point on a surface, to get a normal vector, then
>> trying to use this vector to orient an objects rotation matrix so that
>> it points in the direction of surface.
>> I have written my own method to apply the transform as .setTransform
>> in pymel doesn't seem to work:
>>
>> def mySetMatrix(anObject, aMatrix):
>>
>>    select(anObject)
>>
>>    xform(m=(aMatrix.a00,aMatrix.a01,aMatrix.a02,aMatrix.a03, \
>>
>>    aMatrix.a10,aMatrix.a11,aMatrix.a12,aMatrix.a13, \
>>
>>    aMatrix.a20,aMatrix.a21,aMatrix.a22,aMatrix.a23, \
>>
>>    aMatrix.a30,aMatrix.a31,aMatrix.a32,aMatrix.a33))
>>
>> I query the point on the surface with:
>>
>>  normalVector = aMesh.getClosestNormal(aPoint, 'world')[0]
>>
>> and then use the X,Y,Z values of this vector to calculate the
>> following matrices:
>>
>> rotate on x axis:
>> where X = atan2(Y,Z)
>>
>>               1        0        0        0
>>
>>               0      cosX   -sinX    0
>>
>>              0      sinX    cosX    0
>>
>>              0        0         0       1
>>
>>
>> rotate on y axis:
>> where Y = atan2(X,Z)
>>
>>             cosY     0      sinY     0
>>
>>               0        1         0       0
>>
>>            -sinY     0      cosX    0
>>
>>              0        0         0       1
>>
>>
>> rotate on z axis:
>> where Z = atan2(Y,X)
>>
>>             cosZ  -sinZ       0        0
>>
>>             sinZ   cosZ       0        0
>>
>>              0        0         1        0
>>
>>              0        0         0        1
>>
>> and then assigning the resulting matrix (original Matrx) X (X Matrix)
>> X (Y Matrix) X (Z Matrix) to the original object.
>>
>> Although this approach seems to make sense to me on paper, when I
>> implement it, I get matrices that end up scaling the object instead of
>> only affecting its rotations, and they point in the wrong directions.
>>
>> I was wondering if anyone could point me in the right direction with
>> this one (literally :P ) ?
>>
>> Regards,
>>
>> Adam Miels.
>>
>> --
>> http://groups.google.com/group/python_inside_maya
>
> --
> http://groups.google.com/group/python_inside_maya

-- 
http://groups.google.com/group/python_inside_maya

Reply via email to