Ho un cerchio che orbita ogni 10 secondi. E sto provando a gettare un'ombra che è inclinata verso l'origine dell'orbita (la sorgente luminosa), tenendo anche conto anche dell'angolazione della telecamera.Spostare un'ombra attorno a un cerchio
L'ombra funziona per alcuni angoli, ma come la fotocamera passa più vantaggio sul o più dall'alto verso il basso, si comincia a guardare meno accurato e non ho idea di come correggere per esso - sembra come un complicato problema di matematica che io sono lottando per capire come risolvere.
Questa è l'animazione: http://jsfiddle.net/8y2bm88w/
E il mio codice sorteggio per l'ombra:
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();
Il codice ha più senso attraverso il JSFiddle come si mette il codice in più contesto.
Quindi penso che questo abbia a che fare con le matematiche per le variabili offsetX
e offsetY
, poiché l'utente modifica l'angolo della telecamera rispetto alla necessità dell'offset di adattarsi e modificare il modo in cui l'ombra si sposta. Ma questo è davvero fonte di confusione su come risolvere.
Quindi, se ho capito bene, si desidera che l'emisfero del cerchio rivolto verso l'origine da illuminare, e il resto per essere scuro. Questo è vero indipendentemente dall'angolo della telecamera. Corretta? –
@AsadSaeeduddin dovrebbe prendere in considerazione l'angolo che si sta osservando il pianeta. Quindi credo che tu abbia capito bene. – Sir
@AsadSaeedudddin punto buono, in pratica ha solo bisogno di sembrare corretto dagli occhi dello spettatore. Se guardi il bordo su 'camera angle = 0' dovrebbe gettare un'ombra completa e nessuna ombra ecc., Dall'alto in basso' camera angle = 1', getterebbe mezza ombra tutto il tempo. – Sir