Hi Adam.

Thanks for the link to your video.

This did help explain the need to calculate the cross product twice.

Now to implement it :)

/adam.

On Thu, Aug 26, 2010 at 12:09 AM, Adam Mechtley <[email protected]> wrote:
> Hi Adam,
>
> This short video basically visualizes Chad's explanation, if it is helpful
>
> http://adammechtley.com/tutorials/rigging/aim-constraints/
>
> On Wednesday, August 25, 2010, Chad Vernon <[email protected]> wrote:
>> The ^ is a cross product.  n, t, and x are MVectors which are part of the 
>> Maya API. So, n.x, n.y, n.z are just the 3 components of the vector n.  You 
>> should be able to use either the binormal or the tangent.  You could also 
>> even use an adjacent vertex.
>>
>> On Wed, Aug 25, 2010 at 12:23 AM, Adam Miels <[email protected]> wrote:
>>
>> 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
>
> --
> http://groups.google.com/group/python_inside_maya
>

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

Reply via email to