![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2005
Сообщений: 127
|
есть сцена - вокруг большого шара двигается другой поменьше и отбрасывает тень. предполагается наличие более чем одного маленького шара, пытаюсь делать прототип, а потом множить его и поворачивать. Все движения задаются программно. Вращение сделано, но при повороте тень никак не хочет правильным образом проецироваца на плоскость. Перепробованы все формулы из школьного курса преобразования координат при повороте, но ни одна из них не дает правильного результата. Вот код движения тени с вариантами.
onEnterFrame = function () {
shadow._rotation = -_parent._rotation;
// shadow._x = _parent.ball._x;
// shadow._y = _parent.ball._y;
// shadow._x = _parent.ball._x*Math.cos(this._rotation)-_parent.ball._y*Math.sin(this._rotation);
// shadow._y = _parent.ball._y*Math.cos(this._rotation)+_parent.ball._x*Math.sin(this._rotation);
// shadow._x = _parent.shadow2._x+(_parent.ball._x-_parent.shadow2._x)*Math.cos(this._rotation)+(_parent.shadow2._y-_parent.ball._x)*Math.sin(this._rotation);
// shadow._y = _parent.shadow2._y+(_parent.ball._x-_parent.shadow2._x)*Math.sin(this._rotation)+(_parent.ball._y-_parent.shadow2._y)*Math.cos(this._rotation);
shadow._x = shadow._x+(_parent.ball._x-shadow._x)*Math.cos(this._rotation)+(shadow._y-_parent.ball._x)*Math.sin(this._rotation);
shadow._y = shadow._y+(_parent.ball._x-shadow._x)*Math.sin(this._rotation)+(_parent.ball._y-shadow._y)*Math.cos(this._rotation);
shadow._alpha = 60+_parent.ball._y;
shadow._yscale = shadow._xscale=50+_parent.ball._y;
};
__________________
За все надо платить |
|
|||||
|
Регистрация: Jun 2005
Сообщений: 127
|
РАзве нет знающих людей?
А я так надеялся. |
|
|||||
|
Регистрация: Jun 2005
Сообщений: 127
|
Ладно давайте попробуем с другой стороны.
С помощью какого алгоритма можно задать движение тени для объектов, созданных путем поворота на угол одно и того же прототипа. Прототип двигает по эллипсоидной окружности. Тени от всех объектов естессно должны лежать в одной плоскости.
__________________
За все надо платить |
|
|||||
|
Регистрация: Nov 2005
Сообщений: 149
|
для меня самого физика довольно проблемный предмет, мне не до конца понятна организации сцены у тебя, но из того, что я понял я бы избрал другой подход - намного проще. (если это просто эффект, а не основа какого-нибудь движка) Попробуй по аналогии со следующей ситуацией. _rotation очень удбно привязывать к пройденному пути. например, катится мяч и требуется естественно вращать его поверхность, чтоб создать иллюзию вращения. Оказалось все невероятно просто (я сам не ожидал) - просто делал surface._rotation = mc._x (просто движение было только по х, поэтому он и был единственной точкой привязки. При движении по окружности надо будет просто вычислять пройденный путь). Т.е. нарисовав один раз проекцию тени и поместив точку ее регистрации в точку регистрации самого тела, вращать ее. Вращение же по элипсу можно вообще эмулировать - нарисовал невидимый круг воруг тела, крутанул по вышеописанному принципу, сплющил, прицепил к конторльной точке спроецированную тень. А может тень у тебя вообще не меняет форму? - тогда еще проще получается.
все несколько туманно, но может натолкнет на что полезное |
|
|||||
|
Регистрация: Jun 2005
Сообщений: 127
|
сенкс, обмозгую вариант)
__________________
За все надо платить |
|
|||||
|
Регистрация: Jun 2005
Сообщений: 127
|
попробывал, получается не очень. По условиям задачи объект движется сначал по прямой, а уже потом по эллипсу. Все написано кодом. Было бы неплохо написать код для тени, чтоб она отслеживала движение объекта и св соответствии с ним изменялась. Но вот программно что-то не очень получается. Неужели нет у нас знающих людей.
__________________
За все надо платить |
|
|||||
|
Регистрация: Nov 2005
Сообщений: 149
|
источник света далеко от объекта? подвижен ли? Если вариант типа земля-солнце, то можно все сделать с помощью единожды прорисованной тени, просто программно менять ее размеры по горизонтали и вертикали. Немного только повозиться с подбором коэффициентов уравнений, для естесственности. Если что-то вроде проблемы с фонарем, тогда сложнее - без школьной физики не обойтись. Ну это должен быть, вероятно, супер-клип ради которого стоит так выкладываться (без знаний физики).
|
|
|||||
|
Регистрация: Jun 2005
Сообщений: 127
|
сцена аналог солнечной системы (для ясности), только мелкие объекты движутся в разных плоскостях, аля электроны протоны вокруг атома. Как сделать я понимаю, но тень неправильная получается. В верхнем топе есть уравнения, которые я пытался привязать к тени.
__________________
За все надо платить |
|
|||||
|
Регистрация: Jun 2005
Сообщений: 127
|
На картинке показано, чего я хочу добиться, так же прилоэен исходник с моими попытками. До сих пор ничего не получается. Где же все наши знатоки и профи??
__________________
За все надо платить |
|
|||||
|
Регистрация: Oct 2004
Адрес: Москва
Сообщений: 168
|
Смотри, источник света в твоей модели бесконечно удален поэтому, вращение тени происходит по элипсу. Если ты посмотришь на картинку внимательно, то заметишь, что главная ось элипса тени равна главной оси движения объекта умноженной на косинус угла между плоскостью движения и плоскостью проекции тени. Далее, возникает вопрос о второй оси элипса. каков его размер? Здесь нужно понять, что этот размер зависит от угла под которым наблюдатель смотрит на сцену, поэтому вторую ось нужно просто подобрать так чтобы она лучше смотрелась =) Здесь всё субъективно =)
Вопрос, а для чего Вы делаете эту задачу? |
![]() |
![]() |
Часовой пояс GMT +4, время: 13:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|