ПрограммированиеФорумГрафика

Как узнать экранные координаты

Страницы: 1 2 3 Следующая »
#0
6:49, 1 фев 2016

DirectX 9. Есть единичный куб, есть камера, которая на него смотрит. Можно вывести мировые координаты куба. А как узнать его экранные координаты (с помощью каких манипуляций\функций)?
Если считать их вручную, то, по сути, мне надо проделать все преобразования вручную, т.е. самому перемножать все матрицы, выполнять вращение, что достаточно долго и сложно.
Сразу извиняюсь за глупый вопрос

#1
8:27, 1 фев 2016

Ramm
> Если считать их вручную, то, по сути, мне надо проделать все преобразования
> вручную, т.е. самому перемножать все матрицы, выполнять вращение, что
> достаточно долго и сложно.

Используй для расчетов компьютер.

#2
8:43, 1 фев 2016

Ramm
+ к ответу dave
На компьютере считать все гораздо удобнее, гарантирую.

#3
12:05, 1 фев 2016

Ramm
> ... самому перемножать все матрицы, выполнять вращение, что
> достаточно долго и сложно.
>

Если ты решил заняться созданием игр и считаешь, что это долго и сложно, то  знай, что дальше будет еще хуже, дольше и сложнее. Беги пока можешь!

#4
12:32, 1 фев 2016

Ramm
> А как узнать его экранные координаты (с помощью каких манипуляций\функций)?
А зачем, если не секрет нужны именно экранные координаты куба? Какое этому практическое применение?
Если требуется кликать по кубу мышкой, то тут обычно начинают от экранных координат курсора мыши, а не нарисованного объекта. Если нужно это, то ищи по "mouse picking". Материала полно.

#5
12:33, 1 фев 2016

Ramm
> Если считать их вручную, то, по сути, мне надо проделать все преобразования
> вручную, т.е. самому перемножать все матрицы, выполнять вращение, что
> достаточно долго и сложно.
Эм, если перемножение 3-х матриц это сложно, то лучше дальше не продолжать ибо с твоим походом будет сложно все.

#6
16:52, 1 фев 2016

Digan
> А зачем, если не секрет нужны именно экранные координаты куба? Какое этому
> практическое применение?

1. Mouse picking.
2. Для LODов. Если видимый размер куба меньше определённого порога, можно уменьшить детализацию.
3. Для автоматической системы управления камерой. Если куб на экране вышел за допустимую область, нужно повернуть камеру, чтобы не выходил.

#7
17:14, 1 фев 2016

alexzzzz
> 1. Mouse picking.
в другую сторону же все делаю обычно: из места клика пускают луч и проверяют его пересечение с объектом.
alexzzzz
> 2. Для LODов. Если видимый размер куба меньше определённого порога, можно
> уменьшить детализацию.
Вроде LOD обычно зависит от удаленности объекта от камеры, а не от размеров объекта на экране.
alexzzzz
> 3. Для автоматической системы управления камерой. Если куб на экране вышел за
> допустимую область, нужно повернуть камеру, чтобы не выходил.
Рискну предположить, что если куб не влезает в экран значит он будет пересекаться хотя бы с одной плоскость усеченной пирамиды. Тогда можно просто проверить пересекает или нет. Если пересечет повернуть камеру.

#8
17:14, 1 фев 2016

Ramm
> Если считать их вручную, то, по сути, мне надо проделать все преобразования
> вручную, т.е. самому перемножать все матрицы, выполнять вращение, что
> достаточно долго и сложно.
А ты подумай как это делает DirectX - ты уже объявил все нужные для этого матрицы. DirectX ими же пользуется? Если ты заправишь в этот конвейер нужную мировую координату, то на выходе получишь вектор в экранных координатах. Разбирай шейдеры - если не лезть ручками в конвейер, то и смысла никакого в использовании напрямую Direct'а сейчас нет.

#9
17:40, 1 фев 2016

Digan
> Вроде LOD обычно зависит от удаленности объекта от камеры, а не от размеров
> объекта на экране.
Обычно это где?
Я могу просто посмотреть на лоды в разном масштабе и решить, что при размере в 25%..10% надо показывать второй лод, а при 10% и меньше - 2д прокси.
Как мне так же на глаз определить расстояния, которые напрямую зависят от FOV и физических размеров объекта?

#10
17:43, 1 фев 2016

Digan
> > 2. Для LODов. Если видимый размер куба меньше определённого порога, можно
> > уменьшить детализацию.
> Вроде LOD обычно зависит от удаленности объекта от камеры, а не от размеров
> объекта на экране.

Уровень LOD зависит от удалённости от камеры, от FOV камеры (игрок смотрит в бинокль, FOV маленький) и от реальных размеров объекта (скамейка парке  vs небоскрёб). По видимому на экране размеру делать правильнее.

> > 3. Для автоматической системы управления камерой. Если куб на экране вышел за
> > допустимую область, нужно повернуть камеру, чтобы не выходил.
> Рискну предположить, что если куб не влезает в экран значит он будет
> пересекаться хотя бы с одной плоскость усеченной пирамиды. Тогда можно просто
> проверить пересекает или нет. Если пересечет повернуть камеру.

Хорошая камера должна уметь доворачиваться, не дожидаясь, пока объект выпадет из кадра. Есть некоторая область вокруг центра экрана. Если объект всё ещё в кадре, но уже выпал из этой области, нужно его туда вернуть.

#11
18:22, 1 фев 2016

-Eugene-
> Как мне так же на глаз определить расстояния, которые напрямую зависят от FOV и
> физических размеров объекта?
м.б. как расстояние от камеры до AABB объекта?)

#12
18:37, 1 фев 2016

Digan
> м.б. как расстояние от камеры до AABB объекта?)
И что мне даст расстояние в, например, 24 метра? Много это или мало?

#13
19:03, 1 фев 2016

Конкретно в игровом объекте/модели прописывается список типа "на 100 попугаях заменить на скамейку_лод1, на 200 попугаях заменить на скамейку_лод2, от 300 попугаев и дальше - прятать с глаз долой".
Попугаи, само собой, считаются от центра камеры до центра объекта/модели.
Конкретные значения забиваются вручную, ибо в общем случае, их нахождение - задача нетривиальная, как и генерация этих самых лодов, от качества которых диапазоны попугаев в том числе зависят. "Нетривиальная" в смысле "проще сделать вручную".

alexzzzz
> Хорошая камера должна уметь доворачиваться, не дожидаясь, пока объект выпадет
> из кадра. Есть некоторая область вокруг центра экрана. Если объект всё ещё в
> кадре, но уже выпал из этой области, нужно его туда вернуть.
Факт выпадения запросто определяется векторной алгеброй. Требуемые действия - зависят от условий. В вакууме достаточно повернуть камеру. В комнате, рабочая тактика - нарисовать сплайн вручную и катать камеру по нему.

#14
19:57, 1 фев 2016

Delfigamer
> Конкретно в игровом объекте/модели прописывается список типа "на 100 попугаях
> заменить на скамейку_лод1, на 200 попугаях заменить на скамейку_лод2, от 300
> попугаев и дальше - прятать с глаз долой".

Игрок смотрит на дерево. На дереве сидит белочка. Расстояние от камеры до белочки 200 метров. На таком расстоянии её можно было бы и вообще не рисовать, но... Игрок смотрит через оптический прицел, белочка у него на пол экрана и поэтому должна быть нарисована в полной детализации.

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.