Смотрите, вы используете 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;
}
Если ни одно из других предложений не работает, это мог бы быть Ваш селектор для ссылки, не работает правильно. В примере Вы, если Вы, кажется, ищете ссылку как это:
<a id='reply' href='#'>add comment</a>
Это корректно? Вы не упоминали, как Вы генерировали HTML, но я знаю с asp.net серверный идентификатор! = клиентский идентификатор и Вы должны были бы изменить Ваш селектор как так:
$('a[id$=reply]')
В любом случае вот полный пример с HTML, это хорошо работает для меня:
<html>
<head>
<script type="text/javascript" src='scripts\jquery-1.2.6.min.js'></script>
</head>
<body>
<div style='height:400px'>
Space to demonstrate that clicking the link does not scroll the page.
</div>
<div id='main'>
<a href='#' id='clicky'>here</a>
</div>
</body>
<script>
$(function(){
$('a#clicky').click(function(){
$(this).after('Hello There')
return false;
});
});
</script>
</html>
$(document).ready(function(){
$('a#reply').click(function() {
$(this).after("the html blah");
return false;
});
});
Вам, возможно, понадобится, 'возвращают false'; там, чтобы мешать странице перезагрузить себя, когда Вы нажимаете на ссылку.
Для добавления к ответу rodbv, Вы будете добавлять текст "HTML и тому подобное" в ссылке, на которую нажали, потому что Вы используете append
. Измените его на:
$(this).after("the html");
И это выпишет HTML после ссылки вместо этого.