2017-08-15 14 views
6

Tôi đã tự hỏi liệu có cách nào để có được hộp giới hạn cho các mô hình được chèn qua 3dio.js hay tính điểm trung tâm của chúng? Tôi đang tìm cách tập trung chúng vào nguồn gốc.Lấy hộp giới hạn hoặc các trung tâm của mô hình

Hình ảnh bên dưới hiển thị hai mô hình liên quan đến nguồn gốc của cảnh được chỉ báo bằng hộp màu đỏ.

3D-Model_1

3D-Model_2

Trả lời

6

Bạn có thể truy cập vào đối tượng three.js của thực thể 3d.io như thế này:

var threeElem = document.getElementById("custom-id").components['io3d-data3d'].data3dView.threeParent 

Sau đó, bạn có thể sử dụng hộp bounding có nguồn gốc từ three.js :

var bbox = new THREE.Box3().setFromObject(threeElem) 

Giống như bạn nhận được min/max bounds whi bạn có thể sử dụng để xác định nguồn gốc.

Tôi hy vọng sẽ trả lời câu hỏi của bạn. Cho tôi biết!

Edit: cho đồ nội thất nó có lẽ sẽ

var threeElem = document.getElementById("custom-id").components['io3d-furniture'].data3dView.threeParent 
+1

Làm việc nhờ vĩ đại, chỉ là một chút lỗi đánh máy. 'Data3dView' phải là' data3dView'. Đây là những gì tôi đã thử ban đầu nhưng nó không hoạt động vì mô hình chưa được tải. Điều này đã được giải quyết bằng cách lắng nghe sự kiện 'mô hình nạp'. Tôi sẽ thêm giải pháp của mình làm câu trả lời bên dưới để tham khảo cho người khác. –

+0

cảm ơn rất nhiều. tôi sửa lỗi đánh máy trong câu trả lời của tôi :) –

4

Dựa trên câu trả lời của Madlaina. Tôi cần thiết để đảm bảo các mô hình đã được nạp trước khi

addModelToScene(type) { 

    let scene = document.querySelector('a-scene'); 
    let model = document.createElement('a-entity'); 
    model.setAttribute('io3d-data3d', getModelKey(type))  

    model.addEventListener('model-loaded',() => { 
     // Access the three.js object of the 3d.io 
     let threeElem = model.components['io3d-data3d'].data3dView.threeParent 

     // create the bounding box 
     let bbox = new THREE.Box3().setFromObject(threeElem) 

     // Calculate the center-point offsets from the max and min points 
     const offsetX = (bbox.max.x + bbox.min.x)/2 
     const offsetY = (bbox.max.y + bbox.min.y)/2 
     const offsetZ = (bbox.max.z + bbox.min.z)/2 

     // apply the offset 
     model.setAttribute('position', {x:-offsetX,y:-offsetY, z:-offsetZ}) 
    }); 

    scene.appendChild(model);  

} 

Kết quả: Centered 3D-Model

+0

cool! vui vì nó hoạt động! và tôi chắc chắn sẽ sử dụng nó trong bản nháp của chính mình –

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