// получаем мировую матрицу родительского объекта
var m = E.uid[obj.eparent].mWorld.clone();
// делаем параллельный перенос
m.multiply(new THREE.Matrix4().setPosition(obj.pos));
// поворачиваем
m.multiply(new THREE.Matrix4().makeRotationFromQuaternion(obj.ang));
// устанавливаем опорную точку
m.multiply(new THREE.Matrix4().setPosition(obj.basis));
// сохраняем трансформированную матрицу объекта для потомка
obj.mWorld = m.clone();
// масштабируем
m.scale(obj.escale);
// сбрасываем
obj.matrix.identity();
// применяем трансформированную матрицу к объекту
obj.applyMatrix(m.clone());
var sw = 0;
var ms = new Date().getTime();
var mslast = new Date().getTime();
var mscnt = 0;
var dt = new Date(mscnt);
timeLoop();
function timeLoop(){
if(sw){
dt = new Date(mscnt);
ms = new Date().getTime();
mscnt += (ms - mslast);
mslast = ms;
console.log(getDateTimer() ); // для примера
}
setTimeout(timeLoop, 1000);
}
function getDateTimer(){ // получить текущее время с момента запуска
return dt.getUTCHours() + ':' + dt.getUTCMinutes() + ':' + dt.getSeconds() ;
}
function playTimer( beginSec){ // запустить (параметр с какой секунды)
if(beginSec !== undefined) mscnt = beginSec*1000;
sw = 1;
}
function pauseTimer(){ // приостановить
sw = 0;
}
// запускаем таймер со 150 секунды (2:30) ------------------------------------------
playTimer(150);