Push и Pop изменяют указатель стека - SP
.
Вызов вызывает FLAGS - регистр состояния, а также адрес возврата RA. Ret выталкивает FLAS pops и перескакивает на обратный адрес.
Как сказал rkhb, необходимо сохранить определенные регистры, поскольку они поступают из вызывающих соглашений.
Смотрите, вы используете SkinnedMesh здесь, который является производным от класса Mesh . Сам Mesh имеет свойство Mesh.material .
Так что все, что вам нужно, чтобы изменить цвета, это собрать детей, чтобы вы могли получить к ним доступ по отдельности при помощи обработчика нажатия кнопки.
Вот ваш откорректированный код:
var daeChildren = {}; // map dae child name => child node
var loader = new THREE.ColladaLoader();
loader.options.convertUpAxis = true;
var url='obj/szkieletCube.dae';
loader.load( url, function ( collada ) {
dae = collada.scene;
...
dae.traverse( function ( child ) {
child.castShadow = true;
child.receiveShadow = false;
// 1. Collect DAE children here
daeChildren[child.name] = child;
} );
...
} );
И затем, нажав кнопку, вы можете изменить цвет материала:
function handleButtonClick() {
// 2. drop texture if you need the mesh to be just colored
daeChildren[child.name].material.map = null;
// 3. set mesh color red
daeChildren[child.name].material.color = new THREE.Color( 0xff0000 );
// 4. tell threejs that material must be updated
daeChildren[child.name].material.needsUpdate = true;
}