Tôi có một vòng tròn quay quanh mỗi 10 giây. Và tôi đang cố gắng để đúc một cái bóng đó là góc cạnh về nguồn gốc quỹ đạo (nguồn ánh sáng) trong khi cũng có tính đến góc máy ảnh là tốt.Di chuyển bóng xung quanh một vòng tròn
Bóng hoạt động cho một số góc nhưng máy ảnh có nhiều cạnh hơn hoặc thấp hơn, nó bắt đầu trông kém chính xác hơn và tôi không biết cách sửa nó - nó có vẻ như một vấn đề toán học phức tạp mà tôi đấu tranh để tìm ra cách giải quyết.
Đây là phim hoạt hình: http://jsfiddle.net/8y2bm88w/
Và mã bốc thăm của tôi cho bóng:
ctx.beginPath();
//rotate shadow with the planet
ctx.translate(originX + obj[i].x, originY + obj[i].y);
ctx.rotate(obj[i].angle); //rotate around origin
ctx.translate(-(originX + obj[i].x), -(originY + obj[i].y));
var offsetX = -(10 * Math.sin(obj[0].angle)); //i feel this is the issue
var offsetY = 0; //this too
ctx.rect(originX + obj[i].x + offsetX, originY + obj[i].y + offsetY - 10, 20, 20);
ctx.fillStyle = 'rgba(213,0,0,0.9)'; //red shadow - easier to see
ctx.fill();
Mã này có ý nghĩa hơn thông qua JSFiddle như nó đặt mã vào bối cảnh nhiều hơn. Vì vậy, tôi nghĩ rằng điều này là để làm với các phép toán cho các biến số offsetX
và offsetY
, khi người dùng thay đổi góc máy ảnh bù đắp cần phải thích ứng và thay đổi cách bóng di chuyển. Nhưng, điều này thực sự khó hiểu làm thế nào để giải quyết.
Vì vậy, nếu tôi hiểu đúng, bạn muốn bán cầu của vòng tròn đối diện với nguồn gốc được chiếu sáng và phần còn lại sẽ tối. Điều này đúng bất kể góc camera. Chính xác? –
@AsadSaeeduddin nó sẽ đưa vào tài khoản góc bạn đang xem hành tinh. Vì vậy, tôi tin rằng bạn đã hiểu chính xác. – Sir
@AsadSaeeduddin điểm tốt, về cơ bản nó chỉ cần nhìn chính xác từ đôi mắt của người xem. Nếu bạn nhìn cạnh trên 'máy ảnh góc = 0' nó nên đổ bóng đầy đủ và không có bóng vv, trên xuống 'máy ảnh góc = 1' nó sẽ đúc nửa bóng tất cả các thời gian. – Sir