Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.28;
Скачать: CL | DM;

Вниз

Преобразование   Найти похожие ветки 

 
БРУТЪ   (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 вся ветка

Текущий архив: 2003.07.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
14-91809
Лана Розанова
2003-07-10 10:43
2003.07.28
Перевод


3-91643
Zergling
2003-07-04 08:14
2003.07.28
Отмена операции удаления из таблицы


14-91834
Dmitriy O.
2003-07-10 08:54
2003.07.28
Можно ли по зрительно представить человека по тексту


14-91867
sagchat
2003-07-11 15:20
2003.07.28
модем перестал набирать в тоновом режиме


6-91802
Aleksei85
2003-05-18 01:02
2003.07.28
Как узнать, скачивается информация(через модем) или нет