2013-04-25 28 views
7

Vì vậy, tôi có một hình học (phạm vi của mã này là BA.Geometry.prototype) và tôi đang chỉnh sửa động. newData là một đối tượng của {faces: [mảng của các chỉ mục mặt], các đỉnh: [mảng các chỉ mục đỉnh]}. (các mảng này duy trì độ dài của mặt gốc và chiều dài mảng đỉnh và giữ dạng [null, null, null, "4", "5", null, null ...])Ba JS Không có cập nhật trực quan sau khi chỉnh sửa hình ảnh theo cách thủ công

Sử dụng các mảng này, I dải qua tất cả các khuôn mặt và đỉnh và áp dụng chúng vào 1 trong 2 mảng mới, tách tất cả dữ liệu thành 2 nhóm một cách hiệu quả. Tôi cũng cập nhật các con trỏ trên khuôn mặt!

Cuối cùng tôi biết tôi đã cập nhật hình học và nó là chính xác, nhưng những thay đổi tôi thực hiện không được hiển thị. Tôi đã thử .elementsNeedUpdate là nguyên nhân và lỗi. (không có thuộc tính 'a' không xác định trong InitWebGlObjects ... Tôi đã xem ở đó, không thể thấy tham chiếu đến a)

Tôi đã thử các đỉnh cần cập nhật, không có gì.

Tôi cũng đã thử updateCentroids kết hợp với công cụ trước đó. Nó không làm gì cả.

Tôi đã nghe nói về việc không thể thay đổi kích thước bộ đệm. Bộ đệm và độ dài của bộ đệm là gì? Số lượng các đỉnh tôi đang đưa ra cho một mô hình?

Tôi đã thấy "Bạn có thể mô phỏng thay đổi kích thước bằng cách phân bổ trước bộ đệm lớn hơn và sau đó giữ các đỉnh không cần thiết bị thu gọn/ẩn". Có vẻ như đó là những gì tôi đang làm? Làm thế nào tôi có thể thu gọn/ẩn một đỉnh? Tôi đã không thấy bất kỳ tham chiếu đến điều đó.

Cảm ơn bạn đã dành thời gian!

 var oldVertices = this.vertices 
     var oldFaces = this.faces; 

     var newVertices = [] 
     var newFaces = []; 

     var verticeChanges = []; 

     this.vertices = []; 
     this.faces = [];   


     for(var i in oldVertices){ 
      var curAr = ((newData.vertices[i]) ? (newVertices):(this.vertices)); 
      curAr.push(oldVertices[i]); 
      verticeChanges[i] = curAr.length-1; 
     } 

     for(var i in oldFaces){ 
      var curAr = ((newData.faces[i]) ? (newFaces):(this.faces)); 
      oldFaces[i].a = verticeChanges[oldFaces[i].a]; 
      oldFaces[i].b = verticeChanges[oldFaces[i].b]; 
      oldFaces[i].c = verticeChanges[oldFaces[i].c]; 
     } 
     console.log('Vertices Cut from', oldVertices.length, "to:", newVertices.length, 'and', this.vertices.length); 
     console.log('Faces Cut from', oldFaces.length, "to:", newFaces.length, 'and', this.faces.length); 
+0

Bạn đang sử dụng bản sửa đổi ba.js nào? – Jias

+0

Tôi nghĩ rằng tôi đang sử dụng phiên bản 52, bất cứ điều gì là mới nhất –

+0

Bạn có thể thiết lập một jsfiddle? – gaitat

Trả lời

0

Có lẽ kết nối đến thời điểm này từ this hướng dẫn:

"Tôi chỉ muốn một cách nhanh chóng chỉ ra một Gotcha nhanh chóng cho Three.js, mà là nếu bạn sửa đổi, ví dụ, đỉnh của một lưới, bạn sẽ thông báo trong vòng lặp kết xuất của bạn mà không có gì thay đổi Tại sao? Vâng vì Three.js (theo như tôi có thể biết) lưu trữ dữ liệu cho một lưới là một cái gì đó của một tối ưu hóa. phải làm là gắn cờ vào Three.js rằng có điều gì đó đã thay đổi để nó có thể tính toán lại bất cứ điều gì nó cần. Bạn làm điều này như sau:

// thiết lập các hình học để động để nó cho phép cập nhật

sphere.geometry.dynamic = true;

// thay đổi cho các đỉnh

sphere.geometry .__ dirtyVertices = true;

// thay đổi đối với normals

sphere.geometry .__ dirtyNormals = true;".

+1

Vâng tôi đã thử những điều này. Chúng đã được đổi tên thành các phần tửNeedUpdate và verticesNeedUpdate propertries, bài đăng này cũ –

1

Gần đây tôi đã chạy vào vấn đề này bản thân mình tôi thấy rằng nếu tôi thêm đỉnh và đang phải đối mặt với hình học, tôi cần phải đặt this.groupsNeedUpdate = true để thông báo cho trình kết xuất cập nhật bộ đệm nội bộ của nó

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