![]() |
|
||||||||||
|
|||||
|
Народ, киньте пару ссылок, про построения перспективы (Искажение, точки схода и т.д.)
__________________
The truth is out there... |
|
|||||
|
Регистрация: Jan 2002
Сообщений: 1,323
|
x0, y0, z0 - координаты точки в трехмере
R0 - z-координата глаза Re - расстояние от глаза до экрана xf, yf - координаты точки схода xe, ye - координаты центра экрана K=Re/(R0+z0); x=xe+K*(x0-xf)+xf; y=ye+K*(y0-yf)+yf; x, y - координаты точки на экране Если мувик в центре и точка схождения там же, то x=K*x0; y=K*y0; И все дела.
__________________
ВКЛЮЧИ МОЗГИ!!! Одноразовых граблей не бывает. На большинство из них уже кто-то наступал. (c) Dindin |
|
|||||
|
... Наверно, я неправильно поставил вопрос:
Я делаю куб, который можно врашать, но я знаю только часть законов искажения перспективы и куб получился не-даделанный (см. исходник), и может-быть кто-нибудь знает, где лежит информация об этом.
__________________
The truth is out there... |
|
|||||
|
[+1.3 05.04.09]
|
stop();
// создание 3 масивов с координатами х у z
x = [-50, 50, 50, -50, -50, 50, 50, -50];
y = [50, 50, -50, -50, 50, 50, -50, -50];
z = [-50, -50, -50, -50, 50, 50, 50, 50];
//смещаем главный слой для того чтобы куб был в центре
_root._x = 150;
_root._y = 150;
// глубина ну дает искожение эфект горизонта
s = 200;
// углы поворота
pX = 0.1;
pY = -0.2;
_root.onEnterFrame = function() {
pX = -(0-_ymouse)/50;
pY = (0-_xmouse)/50;
// чистим главный уровень
_root.clear();
//запускаем цикл для обновление координат прошета их новых положений
for (i=0; i<8; i++) {
r = Math.PI/180;
// поворот вокруг оу
ky = y[i]*Math.cos(pX*r)-z[i]*Math.sin(pX*r);
//поворот вокруг ох
kx = x[i]*Math.cos(pY*r)+(y[i]*Math.sin(pX*r)+z[i]*Math.cos(pX*r))*Math.sin(pY*r);
//поворот вокруг oz
kz = -x[i]*Math.sin(pY*r)+(y[i]*Math.sin(pX*r)+z[i]*Math.cos(pX*r))*Math.cos(pY*r);
//сохроняем переменные в масив
x[i] = kx;
z[i] = kz;
y[i] = ky;
}
//стиль линий :)
lineStyle(0, 0xff0000, 100);
//дальше идет рисование сторон куба
//так как их 6 рисуем шесть квадратов
//с помощю точек из масива
// 1
moveTo(x[0]*(s/(s+z[0])), y[0]*(s/(s+z[0])));
lineTo(x[1]*(s/(s+z[1])), y[1]*(s/(s+z[1])));
lineTo(x[2]*(s/(s+z[2])), y[2]*(s/(s+z[2])));
lineTo(x[3]*(s/(s+z[3])), y[3]*(s/(s+z[3])));
lineTo(x[0]*(s/(s+z[0])), y[0]*(s/(s+z[0])));
//2
moveTo(x[4]*(s/(s+z[4])), y[4]*(s/(s+z[4])));
lineTo(x[5]*(s/(s+z[5])), y[5]*(s/(s+z[5])));
lineTo(x[6]*(s/(s+z[6])), y[6]*(s/(s+z[6])));
lineTo(x[7]*(s/(s+z[7])), y[7]*(s/(s+z[7])));
lineTo(x[4]*(s/(s+z[4])), y[4]*(s/(s+z[4])));
//3
moveTo(x[0]*(s/(s+z[0])), y[0]*(s/(s+z[0])));
lineTo(x[4]*(s/(s+z[4])), y[4]*(s/(s+z[4])));
lineTo(x[5]*(s/(s+z[5])), y[5]*(s/(s+z[5])));
lineTo(x[1]*(s/(s+z[1])), y[1]*(s/(s+z[1])));
lineTo(x[0]*(s/(s+z[0])), y[0]*(s/(s+z[0])));
//4
moveTo(x[2]*(s/(s+z[2])), y[2]*(s/(s+z[2])));
lineTo(x[6]*(s/(s+z[6])), y[6]*(s/(s+z[6])));
lineTo(x[7]*(s/(s+z[7])), y[7]*(s/(s+z[7])));
lineTo(x[3]*(s/(s+z[3])), y[3]*(s/(s+z[3])));
lineTo(x[2]*(s/(s+z[2])), y[2]*(s/(s+z[2])));
//5
moveTo(x[0]*(s/(s+z[0])), y[0]*(s/(s+z[0])));
lineTo(x[3]*(s/(s+z[3])), y[3]*(s/(s+z[3])));
lineTo(x[7]*(s/(s+z[7])), y[7]*(s/(s+z[7])));
lineTo(x[4]*(s/(s+z[4])), y[4]*(s/(s+z[4])));
lineTo(x[0]*(s/(s+z[0])), y[0]*(s/(s+z[0])));
//6
moveTo(x[1]*(s/(s+z[1])), y[1]*(s/(s+z[1])));
lineTo(x[2]*(s/(s+z[2])), y[2]*(s/(s+z[2])));
lineTo(x[6]*(s/(s+z[6])), y[6]*(s/(s+z[6])));
lineTo(x[5]*(s/(s+z[5])), y[5]*(s/(s+z[5])));
lineTo(x[1]*(s/(s+z[1])), y[1]*(s/(s+z[1])));
};
__________________
Бойтесь китайцев, компы приносящих! |
|
|||||
|
opex, спасибо тебе огромное, это именно то, что мне нужно было, но я хочу именно теорию, чтоб потом самому въехать что к чему.
__________________
The truth is out there... |
![]() |
Часовой пояс GMT +4, время: 10:19. |
|
|
« Предыдущая тема | Следующая тема » |
|
|