Войти
ПрограммированиеФорумОбщее

Математика компьютерной игры (2 стр)

Страницы: 1 2 3 4 5 Следующая »
#15
19:06, 6 окт. 2011

Zefick
> Если умножать два вектора, то да. Если три, то будет вектор.
у него 2 вектора, код он привел выше


#16
20:49, 6 окт. 2011

Кстати, а зачем вообще может понадобиться при разработке игры обратная матрица (инвертированная матрица)? До этого у меня ещё дело не доходило.

#17
21:15, 6 окт. 2011

Ну как понадобится, так и узнаешь.

#18
11:58, 7 окт. 2011

Всем доброго дня!

Обдумываю как вообще пускать луч из каждой точки экрана. Поправьте если я не так собираюсь находить позицию и направление луча, или если же есть более изящный способ.

Предположим у нас есть матрица 4x4 mProjection, которая отвечает за перспективную проекцию (пока ещё я в поиске такой матрицы (D3DX пошёл вон), чтобы была левосторонняя система координат). Предположим я уже заполнил матрицу mProjection, где указал ближнюю плоскость отсечения в значение 0.1f, а дальнюю в 100.0f.

Далее у меня есть два вектора, которые описывают положение точки в трёхмерном пространстве: vPos1, vPos2. И вот теперь мне нужно точку (x,y) в экранных координатах преобразовать в пространственные координаты. Для этого я устанавливаю вектор vPos1 в следующие значения (x,y,0.1f,1). Тут меня смущает следующее, а нужно ли для преобразования из экранных в пространственные координаты указывать значение ближней плоскости отсечения (в моём случае это 0.1f)? Может нужно всегда указывать 0? Или 1? Параметр w я указал как 1, потому что преобразовывать мы будем точку, а не вектор. Теперь умножу вектор vPos1 на матрицу mProjection. Таким образом я получу точку начала луча. Далее я найду вторую точку луча, установив vPos2 в (x,y,0.2f,1). То есть любое другое значение, которое будет определять следующую плоскость (например значение дальней плоскости отсечения 100.0f). Умножу вектор i]vPos2[/i] на матрицу mProjection.

В результате я полу две точки, которые определяют луч. Формулировка не верная, но суть такова, что определим ещё один вектор vDir, который будет определять направление луча. И найдём этот вектор через вычитание векторов: vDir = vPos2 - vPos1.

Вот мы и получи начало луча в вектор-точке vPos1 и направление луча в векторе vDir в трёхмерном пространстве. Всё верно?

#19
12:23, 7 окт. 2011

http://www.opengl.org/sdk/docs/man/xhtml/gluUnProject.xml

#20
12:57, 7 окт. 2011

s3dworld
> Обдумываю как вообще пускать луч из каждой точки экрана.
Называется "Трассировка лучей". Море инфы. Гугли.
http://ru.wikipedia.org/wiki/%D2%F0%E0%F1%F1%E8%F0%EE%E2%EA%E0_%EB%F3%F7%E5%E9
http://www.gamedev.ru/code/forum/?id=77559
http://www.gamedev.ru/code/forum/?id=39602

#21
15:37, 7 окт. 2011

s3dworld
Круче будет, если плоскости отсечения (near, far) станут фрагментами сферы, тогда можно будет побороть искажения перспективы.

#22
15:59, 7 окт. 2011

Что-то больно много ссылок. А никто ведь даже не знает что я хочу сделать, повторить Wolf3D или выбрать объект мышкой)) Алгоритм то у меня правильный?

#23
16:08, 7 окт. 2011

s3dworld
> то-то больно много ссылок. А никто ведь даже не знает что я хочу сделать, повторить Wolf3D или выбрать объект мышкой)) Алгоритм то у меня правильный?
Результат один - пересечение луча с чем-то.

#24
16:21, 7 окт. 2011

Sbtrn. Devil
> Векторное произведение двух векторов определено только в 3D и 7D
И как считать для ДВУХ векторов в 7D?
Помоему в n-мерном пространстве екторное произведение n-1 векторов считаеться как такой "определитель" (это просто удобная форма записи):

| -->        -->            -->        |
| e1          e2  ...        en        |
| x11        x12 ...        x1n        |
|            ..........                      |
|            ..........                      |
| x(n-1,1)  x(n-1,2) ... x(n-1,n) |

где e1,...,en-базисные вектора

s3dworld
соответсвенно считай по формуле выше для ТРЕХ векторов (перпендикуляр к двум векторам задан неоднозначно)

#25
16:41, 7 окт. 2011

Sbtrn и Devil
> Векторное произведение двух векторов определено только в 3D и 7D
D3DXVec4Cross():

D3DXVECTOR4* D3DXVec4Cross(
    __inout  D3DXVECTOR4 *pOut,
    __in     const D3DXVECTOR4 *pV1,
    __in     const D3DXVECTOR4 *pV2,
    __in     const D3DXVECTOR4 *pV3);
#26
16:43, 7 окт. 2011

asvp
Да я собственно про то, какую координату Z пихать в вектора. Я привёл пример с 0.1f (ближняя плоскость отсечения) и 100.0f (дальняя плоскость отсечения).

#27
17:02, 7 окт. 2011

s3dworld
> Да я собственно про то, какую координату Z пихать в вектора. Я привёл пример с 0.1f (ближняя плоскость отсечения) и 100.0f (дальняя плоскость отсечения).
Да я собсвенно про то, чтобы сначала литературу прочитал, примеры посмотрел. Попытался сам разобраться, а уж потом давно избитые (и достаточно простые) вопросы задавать.

#28
19:24, 7 окт. 2011

s3dworld
> > Векторное произведение двух векторов определено только в 3D и 7D
> D3DXVec4Cross():
  двух векторов

#29
19:24, 7 окт. 2011

Zefick
Туплю.

Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорумОбщее

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