Форум: "Media";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];
ВнизПреобразование Найти похожие ветки
← →
БРУТЪ (2003-04-03 14:57) [0]Подскажите, как зная (x,y,z) координаты нарисовать
на канвасе линию (двухмерные координаты)
← →
pasha676 (2003-04-03 15:02) [1]Насколько я понимаю надо знать с какой точки смотришь на трехмерную сцену.
Если тебе надо изобразить именно изометрическую проекцию (с заданной проекцией трех осей на двумерное пространство), то я бы посоветовал учебничек по черчению полистать, потом написать функцию по преобразованию координат точки, ну а там сам понимаешь - дело техники.
← →
Max1981 (2003-04-04 03:24) [2]Лови пример:
const
lz = 600;
lx1 = 320;
lx2 = 480;
ly = 300;
procedure Line3d(x1, y1, z1, x2, y2, z2: real; c: integer);
var
x11, x12, yy1, x21, x22, yy2: integer;
begin
x11 := round((x1*lz + z1*lx1)/(z1 + lz));
x12 := round((x1*lz + z1*lx2)/(z1 + lz));
yy1 := round((y1*lz + z1*ly)/(z1 + lz));
x21 := round((x2*lz + z2*lx1)/(z2 + lz));
x22 := round((x2*lz + z2*lx2)/(z2 + lz));
yy2 := round((y2*lz + z2*ly)/(z2 + lz));
with Canvas do
begin
Pen.Color := c;
MoveTo(x11, yy1);
LineTo(x21, yy2);
MoveTo(x12, yy1);
LineTo(x22, yy2);
end;
end;
Он рисует две линии, которые(если правильно смотреть) сливаются в одну, как стерео картинка. Если такой эффект не нужен, то одну линию можешь стереть.:))
← →
БРУТЪ (2003-04-04 04:24) [3]Max1981,
Спасибо )
Вот только, скажи пожалуйста
зачем введены константы и что
они обозначают
const
lz = 600;
lx1 = 320;
lx2 = 480;
ly = 300;
← →
Max1981 (2003-04-05 04:31) [4]Эти константы выбираются в зависимости от разрешения экрана, расстояния от экрана(на котором ты смотришь картинку) и расстояния между глазами.
ly - середина экрана по y(у меня было разрешение 800x600);
lx1 и lx2 - это те точки, напротив которых расположены твои глаза(разумеется приблизительно);
lz - расстояние от тебя до монитора(в тех же единицах что и все остальное - то биш в пикселях)
← →
БРУТЪ (2003-04-05 06:50) [5]Max1981, большое спасибо )
← →
com2003 (2003-04-05 18:52) [6]Если тебе надо просто вывести 3D отрезок на экран, то можно сделать проще:
x":=x;
y":=round(y*(1-k)-z*k);
где 0<=k<=1 - как бы высота точки обзора.
Это самый примитивный способ, но если ты собираешься как-угодно перемещать и поворачивать точку зрения, то это уже работа с камерой и отдельный разговор.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c