2012-06-14 29 views
14

Tôi muốn làm cho các bộ phận của lưới vô hình khi chạy. Tôi có thể đặt những phần này thành vô hình/minh bạch hay không, ví dụ: bằng cách thay đổi các thuộc tính của các khuôn mặt đơn lẻ? Bản thân lưới chỉ sử dụng một vật liệu.Tôi có thể ẩn khuôn mặt của lưới trong ba.js không?


Kiểu Mẫu minh họa như biên tập hiểu câu hỏi này: Hãy tưởng tượng một lưới (ở đây với một hình học của 20 đỉnh), nơi mỗi quad bốn đỉnh xây dựng một Face4. Bây giờ, một số phần của lưới nên được thực hiện vô hình (ở đây hai khuôn mặt là vô hình).

example

+0

Câu hỏi của bạn không thực sự rõ ràng. Bạn đang cố gắng thiết lập hiển thị của khuôn mặt là sai (làm cho chúng vô hình)? – frank

+0

Tôi đã chỉnh sửa câu hỏi này theo cách tôi hiểu. Đặc biệt, bởi vì tôi cũng có câu hỏi này và không muốn tạo bản sao. – Matthias

Trả lời

23

Bạn có thể chỉ định vật liệu khác nhau cho mỗi khuôn mặt. Dưới đây là một ví dụ trong đó khuôn mặt chia sẻ tài liệu, nhưng một số gương mặt là trong suốt:

// geometry 
var geometry = new THREE.BoxGeometry(100, 100, 100, 4, 4, 4); 

// materials 
materials = [ 
    new THREE.MeshLambertMaterial({ color: 0xffff00, side: THREE.DoubleSide }), 
    new THREE.MeshBasicMaterial({ transparent: true, opacity: 0 }) 
]; 

// assign material to each face 
for(var i = 0; i < geometry.faces.length; i++) { 
    geometry.faces[ i ].materialIndex = THREE.Math.randInt(0, 1); 
} 
geometry.sortFacesByMaterialIndex(); // optional, to reduce draw calls 

// mesh 
mesh = new THREE.Mesh(geometry, materials); 
scene.add(mesh); 

Cập nhật Fiddle cho thấy một cách để thay đổi một loại vật liệu trong thời gian chạy: http://jsfiddle.net/e0x88z7w/

EDIT: MeshFaceMaterial đã bị phản đối. Đã cập nhật bài đăng và fiddle.

three.js r.87

+0

Nhưng làm cách nào để thay đổi các tài liệu khuôn mặt này tại * thời gian chạy *? Tôi đã thêm một trình nghe nhấp chuột vào [Fiddle] (http://jsfiddle.net/2FZU7/2/) sẽ làm cho tất cả các mặt màu vàng một lần nữa nhưng nó * không hoạt động *. Tôi đã tìm thấy [thảo luận liên quan] (https://github.com/mrdoob/three.js/issues/1303) về điều đó. – Matthias

+0

** Lưu ý: ** Làm lại tất cả các khuôn mặt màu vàng một lần nữa đối với trường hợp sử dụng của câu hỏi. Tôi [thay đổi mã] (http://jsfiddle.net/2FZU7/3/) để áp dụng các vật liệu trong suốt cho mỗi khuôn mặt trên nhấp chuột mà không làm việc, hoặc, tất nhiên. – Matthias

+1

Fiddle này cho phép _runtime_ thay đổi. http://jsfiddle.net/2FZU7/4/. Nó dựa trên "thảo luận liên quan" mà bạn đã tham chiếu. Cũng bởi vì bộ đệm cần được phân bổ trước, bạn không thể thay đổi thành một tài liệu phức tạp hơn, do đó, trong fiddle mới, cả hai tài liệu là 'Lambert'. – WestLangley

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