Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.006 c
14-91851
acsoft
2003-07-11 06:48
2003.07.28
Слышал, что при помощи UPX можно еще и зашифровать exe. Как это с


11-91698
IZVER
2002-11-18 08:42
2003.07.28
Сокеты, прокси....


14-91882
Домарощинер
2003-07-10 12:50
2003.07.28
Сабж


1-91715
Nikolai_S
2003-07-14 15:07
2003.07.28
Вызов процедур из TList


3-91640
xxxCrazyManxxx
2003-07-04 17:57
2003.07.28
Вставка записей в таблицу с помощью StoredProc?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский