2013-03-13 24 views
11

Tôi đang sử dụng BA.JS rev 49.Cập nhật hình học bên trong lưới không có gì

Chương trình của tôi cần cập nhật lưới bằng cách thay đổi hình dạng của nó. Thật không may màn hình dường như không cập nhật.

Đây là mã của tôi:

// theObject is an array of associatives : 

// { 
//  object1: {mesh: undefined/THREE.mesh, mat: THREE.Material, geo: THREE.Geometry} 
//  object2: {mesh: undefined/THREE.mesh, mat: THREE.Material, geo: THREE.Geometry} 
//  ... 
// } 

// In my function, theObject[i].mesh geometry must change to be theObject[i].geo. 


for(i in theObjects) { 

    //* 
    if (theObjects[i].mesh == undefined) { 
     theObjects[i].mesh = new THREE.Mesh(theObjects[i].geo, theObjects[i].mat); 

     theObjects[i].mesh.geometry.dynamic = true; 
     theObjects[i].geo.verticesNeedUpdate = true; 

     scenePostsurgery.add(theObjects[i].mesh); 
    } else 
     theObjects[i].mesh.geometry.vertices = theObjects[i].geo.vertices; 

} 

Tôi có phải thêm cái gì khác?

/Oragon

Trả lời

13

Nếu tôi hiểu đúng bạn đang cập nhật đỉnh ở đây:

else{ 
     theObjects[i].mesh.geometry.vertices = theObjects[i].geo.vertices; 
} 

Cố gắng thay đổi mã này vào:

else{ 
     theObjects[i].mesh.geometry.dynamic = true; 
     theObjects[i].mesh.geometry.vertices = theObjects[i].geo.vertices; 
     theObjects[i].mesh.geometry.verticesNeedUpdate = true; 
    } 

Trong if(){} bạn tạo ra một lưới và trong else{} bạn cập nhật như vậy dynamic = trueverticesNeedUpdate = true bạn cần phải đặt thành lưới nằm trong else{}.

+1

Cảm ơn bạn Uhura.Tôi mặc dù 'verticesNeedUpdate' là một tùy chọn vĩnh viễn. :) –

2

Khi thay đổi toàn bộ hình, tôi nghĩ cách dễ nhất là xóa hình cũ (scene.remove (hình học), sau đó thêm hình mới (scene.add (geometry)) .Tôi nghĩ chi phí sửa đổi các tham số và thuộc tính lưới và hình học cũng giống như thêm một thông số mới, mặc dù việc thêm dễ dàng hơn nhiều và tiết kiệm rất nhiều đau đầu!

+0

làm việc cho tôi - thanks – bernhardrusch

+0

hãy chắc chắn nếu bạn sử dụng 'scene.remove (mesh)', bạn cũng gọi 'mesh.geometry.dispose()', 'mesh.material.dispose()' và 'mesh.texture.dispose()' else bạn sẽ bị rò rỉ bộ nhớ mà tôi nghĩ (r71) – JoeRocc

+0

mesh.geometry.dispose không phải là một hàm –

Các vấn đề liên quan