<?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>15612</bug_id>
          
          <creation_ts>2012-01-18 17:37:17 +0000</creation_ts>
          <short_desc>rotate[XYZ]() should be defined in terms of rotate3d()</short_desc>
          <delta_ts>2012-03-12 21:21:54 +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>RESOLVED</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="Dean Jackson">dino</assigned_to>
          <cc>ayg</cc>
    
    <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>62865</commentid>
    <comment_count>0</comment_count>
    <who name="Aryeh Gregor">ayg</who>
    <bug_when>2012-01-18 17:37:17 +0000</bug_when>
    <thetext>&quot;&quot;&quot;
rotateX(&lt;angle&gt;)
specifies a clockwise rotation by the given angle about the X axis.
rotateY(&lt;angle&gt;)
specifies a clockwise rotation by the given angle about the Y axis.
rotateZ(&lt;angle&gt;)
specifies a clockwise rotation by the given angle about the Z axis.
&quot;&quot;&quot;
http://dev.w3.org/csswg/css3-3d-transforms/#transform-functions

&quot;Clockwise&quot; is not completely obvious -- which direction are you looking from?  It would be clearer if it said something like

&quot;&quot;&quot;
rotateX(&lt;angle&gt;)
specifies a clockwise rotation by the given angle about the X axis, same as rotate3d(1, 0, 0, angle).
rotateY(&lt;angle&gt;)
specifies a clockwise rotation by the given angle about the Y axis, same as rotate3d(0, 1, 0, angle).
rotateZ(&lt;angle&gt;)
specifies a clockwise rotation by the given angle about the Z axis, same as rotate3d(0, 0, 1, angle) or just rotate(angle).
&quot;&quot;&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64613</commentid>
    <comment_count>1</comment_count>
    <who name="Dirk Schulze">dschulze</who>
    <bug_when>2012-02-26 15:34:07 +0000</bug_when>
    <thetext>(In reply to comment #0)
&gt; &quot;&quot;&quot;
&gt; rotateX(&lt;angle&gt;)
&gt; specifies a clockwise rotation by the given angle about the X axis.
&gt; rotateY(&lt;angle&gt;)
&gt; specifies a clockwise rotation by the given angle about the Y axis.
&gt; rotateZ(&lt;angle&gt;)
&gt; specifies a clockwise rotation by the given angle about the Z axis.
&gt; &quot;&quot;&quot;
&gt; http://dev.w3.org/csswg/css3-3d-transforms/#transform-functions
&gt; 
&gt; &quot;Clockwise&quot; is not completely obvious -- which direction are you looking from? 
&gt; It would be clearer if it said something like
&gt; 
&gt; &quot;&quot;&quot;
&gt; rotateX(&lt;angle&gt;)
&gt; specifies a clockwise rotation by the given angle about the X axis, same as
&gt; rotate3d(1, 0, 0, angle).
&gt; rotateY(&lt;angle&gt;)
&gt; specifies a clockwise rotation by the given angle about the Y axis, same as
&gt; rotate3d(0, 1, 0, angle).
&gt; rotateZ(&lt;angle&gt;)
&gt; specifies a clockwise rotation by the given angle about the Z axis, same as
&gt; rotate3d(0, 0, 1, angle) or just rotate(angle).
&gt; &quot;&quot;&quot;
I don&apos;t understand why &quot;clockwise around the XYZ axis&quot; is not enough? Do you fear that authors take the axis from the wrong side?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64621</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser">smfr</who>
    <bug_when>2012-02-26 17:33:55 +0000</bug_when>
    <thetext>Is it clockwise when looking towards zero, towards negative infinity or what?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64623</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Schulze">dschulze</who>
    <bug_when>2012-02-26 17:39:49 +0000</bug_when>
    <thetext>(In reply to comment #2)
&gt; Is it clockwise when looking towards zero, towards negative infinity or what?
That is what I meant with &quot;wrong side&quot;. Nevertheless, this issue is not solved on rotate3d, we would just delegate the problem to another place.

Maybe we can add &quot;clockwise&quot; by an axis to the terms section and define the view from looking from zero to negative infinite?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64831</commentid>
    <comment_count>4</comment_count>
    <who name="Aryeh Gregor">ayg</who>
    <bug_when>2012-03-01 17:14:30 +0000</bug_when>
    <thetext>There are two issues here: one is the clarity of the non-normative description, and one is the simplicity of the normative description.

The non-normative description (&quot;a clockwise 3D rotation by the given angle about the X axis&quot;) isn&apos;t clear because it doesn&apos;t say which direction you&apos;re facing when evaluating what&apos;s &quot;clockwise&quot; -- I believe it&apos;s &quot;toward negative infinity&quot;.

The normative description isn&apos;t as simple as it could be because it defines separate matrices for rotateX()/rotateY()/rotateZ() instead of just saying they&apos;re equivalent to rotate3d(1, 0, 0, ...) and so on.  It&apos;s simpler to implement and test if you can use the same code for rotate3d() as everything else.  At least it&apos;s simpler in my test implementation.

So I suggest &quot;specifies a clockwise 3D rotation by the given angle about the X axis&quot; be changed to something like &quot;the same as rotate3d(1, 0, 0, &lt;angle&gt;): specifies a rotation around the X-axis by the given angle, clockwise as one looks toward the negative direction&quot;.  Or instead of &quot;as one looks toward the negative direction&quot;, perhaps we could say &quot;as one looks left&quot;, and &quot;as one looks up&quot; for rotateY(), and leave off the qualifier for rotateZ().

It should also be made clear that rotate() and rotateZ() are the same thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65404</commentid>
    <comment_count>5</comment_count>
    <who name="Aryeh Gregor">ayg</who>
    <bug_when>2012-03-12 21:21:54 +0000</bug_when>
    <thetext>I tried to fix this: http://dvcs.w3.org/hg/csswg/rev/24c3ba7855d9

Let me know if anyone doesn&apos;t like this change.  I&apos;m not strongly committed to the wording, except that I think we should define all rotations in terms of rotate3d() to simplify tests and implementations.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>