2013-08-23 40 views
6

Tôi nghĩ vấn đề của tôi tương tự như: Orient object's rotation to a spline point tangent in THREE.JS nhưng tôi không thể truy cập vào jsfiddle đúng cách và tôi đã vật lộn với phần thứ hai của lời giải thích.Three.JS Object theo sau đường spline - các vấn đề xoay/tanget & vấn đề tốc độ không đổi

Về cơ bản, tôi đã tạo jsfiddle này: http://jsfiddle.net/jayfield1979/qGPTT/2/ minh họa một khối lập phương đơn giản sau đường dẫn được tạo bởi một đường spline sử dụng SplineCurve3. Sử dụng tương tác chuột TrackBall tiêu chuẩn để điều hướng.

Định vị hình lập phương dọc theo đường dẫn rất đơn giản. Tuy nhiên tôi có hai câu hỏi.

Trước tiên, tôi đang sử dụng spline.getTanget(t) trong đó t là vị trí dọc theo đường dẫn để xoay khối lập phương (trục Y là chỉ TÊN). Tôi nghĩ rằng tôi đang thiếu một cái gì đó bởi vì ngay cả khi tôi trích xuất các tài sản .y của tang kết quả cung cấp, các vòng quay vẫn có vẻ tắt. Có một số nomalizing rằng cần phải làm gì? Thứ hai, tốc độ là rất đa dạng dọc theo con đường, rõ ràng là nhiều điểm hơn xếp chồng lên nhau trong việc tạo ra các đường cong chặt chẽ hơn, nhưng tôi đã tự hỏi liệu có cách nào để cấu trúc lại đường dẫn để phân bố đều không gian giữa các điểm không? Không. Tôi đã xem qua chức năng reparametrizeByArcLength nhưng cố gắng tìm cách giải thích cách sử dụng nó.

Bất kỳ trợ giúp hoặc giải thích cho một chút của một giả toán học, sẽ được biết ơn.

Trả lời

14

Để duy trì tốc độ không đổi, bạn sử dụng .getPointAt(t) thay vì .getPoint(t).

Để hộp tiếp tục tiếp tục với đường cong, bạn thực hiện theo cùng một logic như được giải thích trong câu trả lời cho Orient object's rotation to a spline point tangent in THREE.JS.

box.position.copy(spline.getPointAt(counter)); 

    tangent = spline.getTangentAt(counter).normalize(); 

    axis.crossVectors(up, tangent).normalize(); 

    var radians = Math.acos(up.dot(tangent)); 

    box.quaternion.setFromAxisAngle(axis, radians); 

EDIT: fiddle Cập nhật: http://jsfiddle.net/qGPTT/509/

three.js r.88

+0

Fantastic. Tôi đánh giá cao fiddle vì nó cho phép tôi thấy điều này trong hành động và học theo cách đó. Cảm ơn bạn rất nhiều. – jayfield1979

+0

Cảm ơn câu trả lời này và câu trả lời, tôi thấy nó rất dễ làm theo, nếu bạn tha thứ cho việc chơi chữ ;-). Không thể chờ đợi để áp dụng điều này cho ý tưởng trò chơi trẻ em của tôi, điều này sẽ làm việc tốt cho một trong hai đường ray xe lửa hoặc tàu lượn siêu tốc. Cảm ơn một lần nữa. –

+0

@WestLangley Theo dõi câu trả lời tuyệt vời này, tôi đã triển khai thành công dự án này (sau một khoảng thời gian dài) nhưng tôi gặp vấn đề với nó: http://jsfiddle.net/jayfield1979/T2t59/ Khi các hộp đến thứ hai thẳng, họ lật! Có cách nào để giải quyết vấn đề này không? – jayfield1979

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