У меня есть круг, который вращается каждые 10 секунд. И я пытаюсь наложить тень, которая направлена к источнику орбиты (источник света), а также с учетом угла камеры.
Тень работает под некоторыми углами, но по мере того, как камера становится более красной или сверху вниз, она начинает выглядеть менее точной, и я понятия не имею, как ее исправить - похоже, сложная математическая проблема, с которой я борюсь чтобы выяснить, как решить.
Это анимация: http://jsfiddle.net/8y2bm88w/
И мой код рисования для тени:
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();
Код имеет больше смысла с помощью JSFiddle, поскольку он помещает код в больший контекст.
Итак, я думаю, что это связано с математикой для переменных offsetX
и offsetY
, поскольку пользователь меняет угол камеры, необходимый смещению, и меняет способ перемещения тени. Но, это действительно запутывает, как решить.