![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
преобразование координат
Sacred © (2003-07-03 02:21:00)
Многоуважаемые, я нуждаюсь в помощи.
у меня такая проблема: вообщем мне нужно по клику мышки на сцене создать объект, динамически объект я создать могу, но столкнулся с проблемой - преобразования координат, тое сть мне надо из экранной системы координат перейти в мировую. Я нашел функцию ScreenToWorld,но она как то странно работает, то есть возвращает тип TAffinevector.
Вы не могли бы рассказать и научить как мне получить в чистом виде x,y,z.
это для того чтобы потом указать объекту position.x и position.y.
Заранее благодарен.
PS работая с компонентами GLScene
voland (2003-07-06 16:18:00) [1]
Kelegorm посмотри ясчик(мыло).
Kelegorm (2003-07-04 12:41:00) [2]
Но ведь похоже? Там надо подобрать коофиценты масштабности, а ткже разброса, и будет всё круто!
Sacred (2003-07-04 01:59:00) [3]
Спасибо за ответы...но сделал вот так...получил вектор
vecOfWSC := GLSceneViewer1.Buffer.ScreenToWorld(x,y);
а потом просто
Position.X := vecOfWSC[0]*10;
Position.Y := vecOfWSC[1]*10;
видимо 10 это коэффициент масштабности, потому что без него объект рисуеться уж слишком близко около центра, а с ним рисуется там где кликаю...
Kelegorm (2003-07-03 07:37:00) [4]
Function ScreenCurPosToWorldPos(X,Y:integer):TPointer;
begin
Result.X := (X - Form1.ClientWidth/2)/(Form1.ClientWidth/2)*WidthScreen;
Result.Y := ((Form1.ClientHeight/2 - Y)/(Form1.ClientHeight/2))*WidthScreen;
end;
Function WorldPosToScreenCurPos(X,Y:Single):TPoint;
begin
Result.X := Round(X*(Form1.ClientWidth/2)/WidthScreen + Form1.ClientWidth/2);
Result.Y := Round(Form1.ClientWidth/2 - Y*(Form1.ClientHeight/2)/WidthScreen);
end;
Думаю, объяснять не надо.
WidthScreen := 8.3.
угол обзора камеры равен Pi/4.
У меня работает.
Asteroid (2003-07-03 02:31:00) [5]
При обратном преобразовании координат (из экранных в мировые) всегда получается вектор (луч). Все точки этого луча при прямой проекции попали бы в одну экранную точку. Так что тебе надо выбрать одну из точек луча (зная хотя бы удаленность от камеры уже можно ее получить).