Форум: "Игры";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
ВнизВопрос по GLScene Найти похожие ветки
← →
Jack (2004-09-19 01:22) [0]Есть в GLScene такая штука как: GLSceneViewer.Buffer.GetPickedObject(x,y)
она возвращает объект с координатами x,y
Вопрос, как получить объект по координатам x,y,z ?
В документации не нашел, может кто знает, поможите.
← →
DeadMeat © (2004-09-19 09:33) [1]Ты видимо не до конца понял, что это за координаты. Это координаты на экране. Точнее на форме.
Другими словами, они нужны, для выборки объекта из сцены, по координатам мыши (или чегонить другого) (x,y). Соответственно Z там не будет (хотя может в LongHorn и введут)...
Получается, что если есть два объекта на сцене, один впереди другого, то выбран будет ближний объект (в случае, если один полностью перекрывает другой). Если же щелкнуть по дальнему (если он будет хоть чуть-чуть виден), то выбрать можно и его...
А вообще глянь
\GLScene\Demos\movements\objmove
---
...Death Is Only The Begining...
← →
Jack (2004-09-19 21:56) [2]Мне как раз нужно выбрать объект, который находится в глубине(Z),
и его на форме не видно, в objmove если спрятать кубик за плоскость координатной сетки, то его уже не выбрать.
Если есть мысли то подскажите ....
← →
DeadMeat © (2004-09-19 22:13) [3]Ты чуть поподробнее объясни чего тебе надо. Для чего и как ты это видишь...
Мож есть другое решение...
---
...Death Is Only The Begining...
← →
Jack (2004-09-20 00:57) [4]На сцену выведено несколько различных объектов, часть из них
не видна, тоесть закрыта теми которые находятся на переднем плане. Задача состоит в том чтобы установить где какой объект,
тоесть мне надо сканируя по координатам пространства (X,Y,Z)определить где какой объект. GetPickedObject(x,y,z) мне бы очень подошел, но он работает только на координатах экрана.
Другие решения есть ?
← →
Ктото (2004-09-20 01:20) [5]См демку meshhit .
Определение 3D-координат объекта по которому кликнули мышкой зависит от КамераСтайл, что несколько осложняет дело.
← →
Jack (2004-09-20 01:35) [6]Мне совершенно не надо чтобы по объекту давили мышью,
интересует описанная возможность вообще.
← →
Ктото (2004-09-20 02:51) [7]
> Jack (20.09.04 01:35) [6]
> Мне совершенно не надо чтобы по объекту давили мышью,
> интересует описанная возможность вообще.procedure TForm1.GLSceneViewer2MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
В демке используются коондираты курсора мыши X и Y. Можешь задать их другими.
← →
Ктото (2004-09-20 06:05) [8]Для камеры csPerspective
var
pick : TGLCustomSceneObject;
rayStart, rayVector, iPoint, iNormal : TVector;
begin
pick := (GLSceneViewer1.Buffer.GetPickedObject(X, Y) as TGLCustomSceneObject); // Берём объект.
if pick <> nil then begin // Если объект нашёлся ...
SetVector(rayStart, GLCamera1.AbsolutePosition);
SetVector(rayVector, GLSceneViewer1.Buffer.ScreenToVector(AffineVectorMake(X, Y1, 0))); // Y1 - перевёрнутый Y.
iPoint1 := rayVector;
NormalizeVector(rayVector);
if pick.RayCastIntersect(rayStart, rayVector, @iPoint, @iNormal) then begin // Пытаемся определить пересечения векторов.
// Если кто-нибудь понимаем пересечение чего с чем мы ищем - объясните пожалуйста.
// Если пересечение нашли, то в iPoint получаем 3D координаты объекта.
end;
Но проблема в том, что эти координаты не всегда находятся. Например, если мы кликаем в FireFX, то мы не найдём пересечения векторов. Если в Terrain, то тоже самое. Как быть ?
← →
DeadMeat © (2004-09-20 19:26) [9]Может GLSceneViewer.Buffer.WorldToScreen(....) ?
---
...Death Is Only The Begining...
← →
Ктото (2004-09-21 02:01) [10]
> DeadMeat © (20.09.04 19:26) [9]
> Может GLSceneViewer.Buffer.WorldToScreen(....) ?
Я нашёл ещё :PointMake(GLSceneViewer1.Buffer.PixelRayToWorld(X, Y));
А всё-таки пересечение чего с чем мы ищем в приведённом выше коде ?
← →
Jack (2004-09-21 02:41) [11]В "верхнем" коде идет поиск пересечения объекта с нормалью от координат экрана.
Есть еще варианты, например :
property AbsolutePosition : TVector read GetAbsolutePosition write SetAbsolutePosition;
function PointInObject(const point : TVector) : Boolean; virtual;
но как их использовать ?
← →
Ктото (2004-09-21 03:02) [12]
> Jack (21.09.04 02:41) [11]
> В "верхнем" коде идет поиск пересечения объекта с нормалью
> от координат экрана.
А как может такого пересечения не быть ?
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.074 c