Mam okrąg, który krąży co 10 sekund. Próbuję rzucić cień, który jest ustawiony pod kątem do orbity (źródło światła), jednocześnie biorąc pod uwagę kąt kamery.Przenoszenie cienia wokół okręgu
Cień działa pod pewnymi kątami, ale gdy kamera jest bardziej lub bardziej z góry na dół, zaczyna wyglądać mniej precyzyjnie i nie mam pojęcia, jak to poprawić - wydaje się to skomplikowanym zagadnieniem matematycznym, którym jestem. walcząc, aby dowiedzieć się, jak rozwiązać.
Jest to animacja: http://jsfiddle.net/8y2bm88w/
A mój kod losowanie cieniu:
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();
Kod większy sens poprzez JSFiddle gdyż stawia kod na więcej kontekstu.
Sądzę, że ma to związek z matematyką dla zmiennych offsetX
i offsetY
, ponieważ użytkownik zmienia kąt kamery, do której musi się dostosować offset i zmienia sposób poruszania cienia. Ale to naprawdę mylące, jak rozwiązać.
Tak więc, jeśli dobrze rozumiem, chcesz półkuli koło skierowane na pochodzenie, które ma być oświetlone, a reszta jest ciemna. Jest to prawdą niezależnie od kąta kamery. Poprawny? –
@AsadSaeeduddin należy wziąć pod uwagę kąt, w którym oglądasz planetę. Więc wierzę, że zrozumiałeś poprawnie. – Sir
@AsadSaeeduddin dobry punkt, w zasadzie to po prostu musi wyglądać poprawnie z oczu widza. Jeśli spojrzysz na krawędź "kąta kamery = 0", powinien on rzucić pełny cień i bez cienia itp., Z góry w dół "kąt kamery = 1" będzie rzucał pół cienia cały czas. – Sir