Главная страница
    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.005 c
3-91660
Nikola62
2003-07-05 15:22
2003.07.28
Колесо мыши в DbGride


14-91894
Катрин
2003-07-11 19:32
2003.07.28
Память в Delphi


14-91908
Юрий Зотов
2003-07-12 13:25
2003.07.28
Соотношение валют в Украине


1-91754
mao
2003-07-15 11:57
2003.07.28
Длина текста в label


9-91612
Universal
2003-02-03 18:22
2003.07.28
Изометрия





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский