Animation 设置三个.js顶点的动画
我正在尝试从collada模型中设置单个顶点的动画。 顶点只设置了一次动画,但之后不再设置动画 1:装上我的衣领Animation 设置三个.js顶点的动画,animation,three.js,position,vertices,Animation,Three.js,Position,Vertices,我正在尝试从collada模型中设置单个顶点的动画。 顶点只设置了一次动画,但之后不再设置动画 1:装上我的衣领 // name obj var orgVerts = false; var desVerts = false; var material = new THREE.MeshBasicMaterial({ color:0x1e5679, wireframe:true }); var loader = new THREE.ColladaLoader(); var nameModel = f
// name obj
var orgVerts = false;
var desVerts = false;
var material = new THREE.MeshBasicMaterial({ color:0x1e5679, wireframe:true });
var loader = new THREE.ColladaLoader();
var nameModel = false;
loader.options.convertUpAxis = true;
loader.load( '3d/name.dae', function ( collada ) {
nameModel = collada.scene.children[0].children[0];
nameModel.material = material;
nameModel.geometry.dynamic = true;
nameModel.position.set(0,0,0);//x,z,y- if you think in blender dimensions ;)
nameModel.scale.x = .0035;
nameModel.scale.y = .0035;
nameModel.scale.z = .0035;
scene.add(nameModel);
orgVerts = nameModel.geometry.vertices; // make a backup of all verts
genVerts(); // create a new array of random verts
});
2:在我的渲染函数中
var render = function () {
requestAnimationFrame(render);
// do stuff
if(nameModel){
if(window.globalCurrentSlide != 0){
for(var r=0; r < nameModel.geometry.vertices.length; r++){
var vert = desVerts[r]; // loop through all the destination verts
nameModel.geometry.vertices[r].x = nameModel.geometry.vertices[r].x - (nameModel.geometry.vertices[r].x - vert.x)/20;
nameModel.geometry.vertices[r].y = nameModel.geometry.vertices[r].y - (nameModel.geometry.vertices[r].y - vert.y)/20;
nameModel.geometry.vertices[r].z = nameModel.geometry.vertices[r].z - (nameModel.geometry.vertices[r].z - vert.z)/20;
}
}else{
for(var t=0; t < nameModel.geometry.vertices.length; t++){
var vert2 = orgVerts[t]; // loop through all the original verts
nameModel.geometry.vertices[t].x = nameModel.geometry.vertices[t].x - (nameModel.geometry.vertices[t].x - vert2.x)/20;
nameModel.geometry.vertices[t].y = nameModel.geometry.vertices[t].y - (nameModel.geometry.vertices[t].y - vert2.y)/20;
nameModel.geometry.vertices[t].z = nameModel.geometry.vertices[t].z - (nameModel.geometry.vertices[t].z - vert2.z)/20;
}
}
nameModel.geometry.verticesNeedUpdate = true;
nameModel.rotation.y += .005;
}
renderer.render( scene, camera );
}
var render=function(){
请求动画帧(渲染);
//做事
如果(名称模型){
如果(window.globalCurrentSlide!=0){
对于(var r=0;r
窗口。globalCurrentSlide
设置为0开始,一切正常。如果我将window.globalcurrentsiled
更改为1,则所有顶点都会正确设置动画但是当我更改窗口时。全局当前幻灯片
返回到0,顶点不会动画返回到其原始位置。我已经调试了堆,并且可以100%地说,desVerts
和orgVerts
都不会改变,它们是正确的。有什么想法吗?它快把我逼疯了
PS:我知道代码可以压缩,我只是在玩ATM。答案是我的
orgVerts
只是一个参考,而不是克隆。使用:
var geometry = nameModel.geometry.clone();
orgVerts = geometry.vertices;