BabylonJS - toEulerAngles BUG

http://www.html5gamedevs.com/topic/3159-quaternionrotationyawpitchroll-parameters-and-toeulerangles-result-should-be-the-same/

by Julien Gobin

HTML

<script src="https://rawgithub.com/BabylonJS/Babylon.js/v1.8.0/babylon.1.8.0.js"></script>
<button id="euclideanspaceEuler">Use euclideanspace Euler<->Quaternion conversions</button>
<button id="babylonjsEuler">Use babylon js Euler<->Quaternion conversions</button>

<button id="euclideanspaceMatrix">Use euclideanspace Quaternion->RotationMatrix conversion</button>
<button id="babylonjsMatrix">Use babylon js Quaternion->RotationMatrix conversion</button>    
<div id="rootDiv">
  <canvas id="renderCanvas"></canvas>
  <canvas id="canvas_2D"></canvas>
</div>

CSS

html, body, div, canvas {
    width: 100%;
    height: 100%;
    padding: 0;
    margin: 0;
    overflow: hidden;
}

button { height: 20px; }

#canvas_2D {
    position: absolute;   
    top: 40px;
    pointer-events: none;
}

JavaScript

document.getElementById("euclideanspaceEuler").onclick = function() {
    BABYLON.Quaternion.RotationYawPitchRollToRef = ES_RotationYawPitchRollToRef;
    BABYLON.Quaternion.prototype.toEulerAngles = ES_toEulerAngles;
    
    var rotation = new BABYLON.Vector3(0.1, 0.2, 0.3);

    var q = BABYLON.Quaternion.RotationYawPitchRoll(rotation.y, rotation.x, rotation.z);
    var eulerAngles = q.toEulerAngles();

    console.log("Initial rotaion", rotation.x, rotation.y, rotation.z);
    console.log("Euler angles", eulerAngles);

    model1.rotation = rotation;
    model2.rotation = eulerAngles;    
    
    model1.computeWorldMatrix(true);
    model2.computeWorldMatrix(true);
    ground.computeWorldMatrix(true);
};

document.getElementById("babylonjsEuler").onclick = function() {
    BABYLON.Quaternion.RotationYawPitchRollToRef = BJ_RotationYawPitchRollToRef;
    BABYLON.Quaternion.prototype.toEulerAngles = BJ_toEulerAngles;
    
    var rotation = new BABYLON.Vector3(0.1, 0.2, 0.3);

    var q = BABYLON.Quaternion.RotationYawPitchRoll(rotation.y, rotation.x, rotation.z);
    var eulerAngles = q.toEulerAngles();

    console.log("Initial rotation", rotation.x, rotation.y, rotation.z);
    console.log("Euler to Quat to Euler rotation", eulerAngles);

    model1.rotation = rotation;
    model2.rotation = eulerAngles;    
    
    model1.computeWorldMatrix(true);
    model2.computeWorldMatrix(true);
    ground.computeWorldMatrix(true);
};

//*
document.getElementById("euclideanspaceMatrix").onclick = function() {
    BABYLON.Quaternion.prototype.toRotationMatrix = ES_toRotationMatrix;
    
    model1.computeWorldMatrix(true);
    model2.computeWorldMatrix(true);
    ground.computeWorldMatrix(true);
};

document.getElementById("babylonjsMatrix").onclick = function() {
    BABYLON.Quaternion.prototype.toRotationMatrix = BJ_toRotationMatrix;
    
    model1.computeWorldMatrix(true);
    model2.computeWorldMatrix(true);
   ...