<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://www.w3.org/Bugs/Public/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4"
          urlbase="https://www.w3.org/Bugs/Public/"
          
          maintainer="sysbot+bugzilla@w3.org"
>

    <bug>
          <bug_id>15610</bug_id>
          
          <creation_ts>2012-01-18 17:33:48 +0000</creation_ts>
          <short_desc>Definition for rotate3d() doesn&apos;t match implementations</short_desc>
          <delta_ts>2012-02-14 17:13:38 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>CSS</product>
          <component>Transforms</component>
          <version>unspecified</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Aryeh Gregor">ayg</reporter>
          <assigned_to name="Dirk Schulze">dschulze</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>dino</cc>
    
    <cc>dschulze</cc>
    
    <cc>eoconnor</cc>
    
    <cc>smfr</cc>
          
          <qa_contact name="This bug has no owner yet - up for the taking">dave.null</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>62863</commentid>
    <comment_count>0</comment_count>
    <who name="Aryeh Gregor">ayg</who>
    <bug_when>2012-01-18 17:33:48 +0000</bug_when>
    <thetext>&quot;&quot;&quot;
This function is equivalent to matrix3d(1 + (1-cos(angle))*(x*x-1), -z*sin(angle)+(1-cos(angle))*x*y, y*sin(angle)+(1-cos(angle))*x*z, 0, z*sin(angle)+(1-cos(angle))*x*y, 1 + (1-cos(angle))*(y*y-1), -x*sin(angle)+(1-cos(angle))*y*z, 0, -y*sin(angle)+(1-cos(angle))*x*z, x*sin(angle)+(1-cos(angle))*y*z, 1 + (1-cos(angle))*(z*z-1), 0, 0, 0, 0, 1).
&quot;&quot;&quot;
http://dev.w3.org/csswg/css3-3d-transforms/#transform-functions

rotate3d(0, 0, 1, 90deg) should therefore be equivalent to

matrix3d(0,-1, 0, 0,
         1, 0, 0, 0,
         0, 0, 1, 0,
         0, 0, 0, 1)

Test-case 1:

data:text/html,&lt;!doctype html&gt;
&lt;div style=&quot;height:50px;width:50px;
border-top:1px solid black;
transform:rotate3d(0,0,1,90deg)&quot;&gt;&lt;/div&gt;

Test-case 2:

data:text/html,&lt;!doctype html&gt;
&lt;div style=&quot;height:50px;width:50px;
border-top:1px solid black;
transform:matrix3d(
0,-1, 0, 0,
1, 0, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1)&quot;&gt;&lt;/div&gt;

Per spec these should render the same.  In Firefox 12.0a1 and Chrome 17 dev, however (with prefixes added), they render differently: the first has the border turned to the right, and the second has it turned to the left.  Implementations have the angle negated with respect to the spec, which works out to the same as negating sin(angle).  So the spec should say:

&quot;&quot;&quot;
This function is equivalent to matrix3d(1 + (1-cos(angle))*(x*x-1), z*sin(angle)+(1-cos(angle))*x*y, -y*sin(angle)+(1-cos(angle))*x*z, 0, -z*sin(angle)+(1-cos(angle))*x*y, 1 + (1-cos(angle))*(y*y-1), x*sin(angle)+(1-cos(angle))*y*z, 0, y*sin(angle)+(1-cos(angle))*x*z, -x*sin(angle)+(1-cos(angle))*y*z, 1 + (1-cos(angle))*(z*z-1), 0, 0, 0, 0, 1).
&quot;&quot;&quot;

where I&apos;ve just replaced sin(angle) with -sin(angle) consistently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>63455</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser">smfr</who>
    <bug_when>2012-01-31 21:40:21 +0000</bug_when>
    <thetext>This seems pretty different from what WebKit actually implements:

    angle /= 2.0f;
    double sinA = sin(angle);
    double cosA = cos(angle);
    double sinA2 = sinA * sinA;

        double x2 = x*x;
        double y2 = y*y;
        double z2 = z*z;
    
        mat.m_matrix[0][0] = 1.0f - 2.0f * (y2 + z2) * sinA2;
        mat.m_matrix[0][1] = 2.0f * (x * y * sinA2 + z * sinA * cosA);
        mat.m_matrix[0][2] = 2.0f * (x * z * sinA2 - y * sinA * cosA);
        mat.m_matrix[1][0] = 2.0f * (y * x * sinA2 - z * sinA * cosA);
        mat.m_matrix[1][1] = 1.0f - 2.0f * (z2 + x2) * sinA2;
        mat.m_matrix[1][2] = 2.0f * (y * z * sinA2 + x * sinA * cosA);
        mat.m_matrix[2][0] = 2.0f * (z * x * sinA2 + y * sinA * cosA);
        mat.m_matrix[2][1] = 2.0f * (z * y * sinA2 - x * sinA * cosA);
        mat.m_matrix[2][2] = 1.0f - 2.0f * (x2 + y2) * sinA2;
        mat.m_matrix[0][3] = mat.m_matrix[1][3] = mat.m_matrix[2][3] = 0.0f;
        mat.m_matrix[3][0] = mat.m_matrix[3][1] = mat.m_matrix[3][2] = 0.0f;
        mat.m_matrix[3][3] = 1.0f;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>63538</commentid>
    <comment_count>2</comment_count>
    <who name="Aryeh Gregor">ayg</who>
    <bug_when>2012-02-01 17:07:26 +0000</bug_when>
    <thetext>Remember your trig identities.  :)  E.g., for the first entry, the spec says

  1 + (1-cos(angle))*(x*x-1)

while WebKit says

  1.0f - 2.0f * (y2 + z2) * sinA2
= 1 - 2*(y*y + z*z) * sin(angle/2)^2.

sin(t)^2 = (1 - cos(2t))/2 &lt;http://en.wikipedia.org/wiki/Half-angle_formula#Power-reduction_formula&gt;, so this is the same as

  1 - (y*y + z*z) * (1 - cos(angle)).

(x, y, z) is normalized, so x*x + y*y + z*z = 1, which means y*y + z*z = 1 - x*x, and WebKit&apos;s formula is the same as

  1 - (1 - x*x) * (1 - cos(angle))

which if we distribute the first minus sign across (1 - x*x), becomes

  1 + (x*x - 1) * (1 - cos(angle))

which is the same as the spec.


If you look at the terms involving sin(), you can see that WebKit does do the opposite of the spec, as my black-box testing discovered and as I explained in comment #0:

  2.0f * (x * y * sinA2 + z * sinA * cosA)
= 2*x*y*sin(angle/2)^2 + 2*z*sin(angle/2)*cos(angle/2)
= x*y*(1 - cos(angle)) + 2*z*sin(angle/2)*cos(angle/2)
    (power reduction in first term)
= x*y*(1 - cos(angle)) + z*sin(angle)
    (double-angle in second term).

Note that it&apos;s z*sin(angle), as I say in the bottom of comment #0, not -z*sin(angle) as the spec says.  The same goes for the other entries.  sin(angle) needs to be negated in every case.


FWIW, it looks like Mozilla independently realized the spec didn&apos;t match WebKit when developing their 3D transform implementation, and made their implementation match WebKit instead of the spec for compat with web content:

https://bugzilla.mozilla.org/show_bug.cgi?id=704468</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>63543</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2012-02-01 18:24:06 +0000</bug_when>
    <thetext>...
&gt; FWIW, it looks like Mozilla independently realized the spec didn&apos;t match WebKit
&gt; when developing their 3D transform implementation, and made their
&gt; implementation match WebKit instead of the spec for compat with web content:
&gt; 
&gt; https://bugzilla.mozilla.org/show_bug.cgi?id=704468

So, the spec is describing the left-hand rule for rotations, which is not very common. WebKit (and now FF) implement the right-hand rule, which is the more common way of expressing the direction. So I&apos;d say we should change the spec to match the two implementations. 

OBTW, I&apos;m betting Chrome matches the other two, unless they&apos;ve made some changes in Chrome specific parts of the code. So changing the spec would match all the major transform implementations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>63545</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2012-02-01 18:25:14 +0000</bug_when>
    <thetext>This is all probably a fallout of our changing the spec a while back from row-major to column-major notation. Changing the spec certainly seems like the right solution</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>63992</commentid>
    <comment_count>5</comment_count>
      <attachid>1077</attachid>
    <who name="Dirk Schulze">dschulze</who>
    <bug_when>2012-02-12 02:49:50 +0000</bug_when>
    <thetext>Created attachment 1077
rotate3d

Can some one verify that this is the correct matrix that we want? It is the code that Chris applied to this bug.

But the matrix on SVG Transform[1] looks different to the attached matrix as well as to the matrix on CSS Transforms.

[1] http://www.w3.org/TR/2009/WD-SVG-Transforms-20090320/#threed-rotate-definition</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64007</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Schulze">dschulze</who>
    <bug_when>2012-02-13 03:57:07 +0000</bug_when>
    <thetext>I added a matrix to the mathematical description section, that matches the current behavior of WebKit. If all agree with the math, we can close this bug now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64034</commentid>
    <comment_count>7</comment_count>
    <who name="Aryeh Gregor">ayg</who>
    <bug_when>2012-02-13 16:42:33 +0000</bug_when>
    <thetext>There are two mistakes in the new version:

1) alpha needs to be replaced by alpha/2.  This is the &quot;angle /= 2.0f;&quot; line in WebKit.

2) The first matrix entry has x^2 + z^2, but it should by y^2 + z^2 like WebKit.

Otherwise it&apos;s correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64037</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Schulze">dschulze</who>
    <bug_when>2012-02-13 16:47:39 +0000</bug_when>
    <thetext>Thanks a lot, I&apos;ll change that asap. I will also add a comment that alpha must be in radian for the current rotate3d matrix. This might be the difference to SVG Transforms. I will check this as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64103</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Schulze">dschulze</who>
    <bug_when>2012-02-14 17:00:03 +0000</bug_when>
    <thetext>I corrected the code with the commit 2012/02/13. Closing bug now. Feel free to reopen it if you find other issues with rotate3d.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64106</commentid>
    <comment_count>10</comment_count>
    <who name="Aryeh Gregor">ayg</who>
    <bug_when>2012-02-14 17:13:38 +0000</bug_when>
    <thetext>Looks good to me.  Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>1077</attachid>
            <date>2012-02-12 02:49:50 +0000</date>
            <delta_ts>2012-02-12 02:49:50 +0000</delta_ts>
            <desc>rotate3d</desc>
            <filename>CodeCogsEqn.png</filename>
            <type>image/png</type>
            <size>6145</size>
            <attacher name="Dirk Schulze">dschulze</attacher>
            
              <data encoding="base64">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
</data>

          </attachment>
      

    </bug>

</bugzilla>