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);
...