PDA

Просмотр полной версии : Плоскость в перспективе


b2d_spb
01.06.2006, 15:09
Ребята, помогите со скриптом или исходником!
Задача создать четырёхугольник, изображающий плоскость в перспективе - передняя и задняя стороны параллельны границе экрана, боковые стороны сходятся в направлении точки схода. И всё это дело реагирует на движения мышью - если мышь сдвигается влево, то передняя и задняя стороны четырёхугольника перемещаются вправо, причём передняя чуть быстрее, чем задняя.

MyXus
01.06.2006, 16:07
Скорее всего рисовать придется каждый кадр.
Считай геометрию и рисуй (beginFill(), lineTo())

Надо спросить авторов (тут есть такие), как создавались 3D движки (которые лежат тут же, в исходниках). Самому в исходники мне пока не хватит здоровья лезть.

orangeline
01.06.2006, 17:36
если нужен - не пожадничаю, могу выложить 3д движок рисующий (легко анимируемый) любой 3д объект по координатам узловых точек (x,y,z), принимаемых в виде массива

MyXus
01.06.2006, 23:53
А можно лучше его словесный алгоритм в пару абзацев )
сам напишу )

orangeline
02.06.2006, 00:48
создаётся 3д объект, а затем пересчитываются координаты его узловых точек в зависимости от нужных тебе трансформаций (поворот по оси/осям, масштабирование, перемещение и т.д.).для быстроты расчётов исп. матрицы (2-мерные массивы). вся сложность будет в том что-бы создать матрицы нужных тебе трансформаций (думаю вращение вокру осей X, Y и Z). а в последствии умножаешь матрицу с координатами кадой из узлов на м-цы нужных трансформаций и перерисовываешь объект

iNils
02.06.2006, 00:54
Вопрос нужна ли такая точность, если нет
//// коэффициент
k = .5;
this.createEmptyMovieClip ("mc", 0);
this.onMouseMove = function () {
var x = this._xmouse;
this.clear ();
this.lineStyle (0, 0);
this.moveTo ((-100 + x) * k, 0);
this.lineTo ((100 + x) * k, 0);
this.lineTo (100 + x, 50);
this.lineTo (-100 + x, 50);
this.lineTo ((-100 + x) * k, 0);
};
this.onMouseMove ();

MyXus
02.06.2006, 01:17
Прикольно. Запомню.

orangeline
02.06.2006, 10:07
как бы да, для твоего случая пример iNils'а в самый раз

MyXus
02.06.2006, 12:57
А рисование объектов в твоем примере разве как-то по другому реализовано?
Я кстати всегда хотел спросить, а перекрывание объектов как обычно считают?

Базиль
02.06.2006, 15:37
для перекрывания объектов существует громадное количество алгоритмов, и в случае с векторной графикой это...ну не то что бы сложно, но почти невозможно.

если программировать 3д на флэш, то единственным рациональным способом просчета z-индекса является определение расстояния от "камеры" до центра объекта и прорисовка объекторв в последовательности "издалека".

MyXus
02.06.2006, 15:43
А вот гражданка iLeon утверждает что "отсекает невидимые грани".
http://www.flasher.ru/forum/showthread.php?t=79791

iNils
02.06.2006, 16:01
Я кстати всегда хотел спросить, а перекрывание объектов как обычно считают?
http://kappasoft.narod.ru/info/3d/4.htm
Если хочешь обсуждать данную тему, создай отдельный топик.

Что такое хорошо?
03.06.2006, 21:43
А мне как-то нужно было создать перспективную тень из мувика (трансформировать его), но так и не получилось :(

JhAZZ
05.06.2006, 07:23
Перекрывания объектов все же лучше посчитать заранее и сделать BSP дерево. iNils дал дельную ссылку на алгоритм BSP. А в сочетании с алгоритмами порталов вообще супир. Блин будет время надо сделать BSP компилер для движка в 3dmaxe, чтоб всем начинающим готовый BSP дарило с уже произведеными рассечениями.

Рассечение в рантайме даже квейк не делает.