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

Перевод экранных координат в wolrd space по имеющимся данным. (2 стр)

Страницы: 1 2 3 Следующая »
#15
1:10, 27 окт. 2016

THE_MASTER

погоди, ещё вот чё заметил, там помимо worldIntersection, есть ещё localIntersection. Так вот, если этот прямоугольник трансформацией сдвигать, допустим влево, по оси Z, тогда при кликах примерно в одно и то же место прямоугольника, worldIntersection не меняется, всё время одно и то же, а вот localIntersection меняется... Не появилось новых идей? :-)))

ну чувак, читай документацию, я в ваш кюти не понимаю совсем.  Я только знаю что QVector3D(20, 34.641, 0) не нормализован, значит это не направление, а позиция. Может в пикселях экранные координаты?
Да если это вектор левый, значит и вычислять пока рано...

какой "этот"?  ты там хоть в чем нибудь уверен (наверняка) например в матрице камеры?  Есди знаешь матрицу камеры то можешь уже рейкастить...

#16
1:29, 27 окт. 2016

Polyflow3d
> Есди знаешь матрицу камеры то можешь уже рейкастить...
у камеры есть viewMatrix и projectionMatrix, хз как там чего кастить ))) 
Я тут подцепил сорцы самого Qt к отладчику, ща дебажить до утра это гавно буду....

#17
1:40, 27 окт. 2016

Ну лучь ты можешь создать из экранных координат мышки матрицы камеры?

#18
2:29, 27 окт. 2016
mat4 mViewProj = mView*mProj;
mat4 mViewProjInv = Inverse(mViewProj);
vec2 curPt = vec2(cursorX/WindowWidth, cursorY/WindowHeight);
curPt = curPt*2.0 - vec2(1.0, 1.0);
vec4 vStart = vec4(curPt.x, curPt.y, 0.0, 1.0);
vec4 vEnd = vec4(curPt.x, curPt.y, 1.0, 1.0);

vStart = vStart * mViewProjInv;
vStart.xyz /= vStart.w;
vEnd = vEnd * mViewProjInv;
vEnd .xyz /= vEnd.w;
Код через обратные матрицы. После деления на w в vStart.xyz и vEnd .xyz будут лежать координаты начала и конца луча в world space
#19
2:44, 27 окт. 2016

MrShoor
> После деления на w в vStart.xyz и vEnd .xyz будут лежать координаты начала и
> конца луча в world space
1. А что из себя представляет этот луч? Откуда и куда он идёт? Вот я кликнул мышкой по экрану, из этой точки он куда пошёл, перпендикулярно экрану вглубь или куда?

2. Координаты луча получаются маленькие QVector3D(-0.00473513, -0.0400443, 0.023829) QVector3D(-0.00477987, -0.0404226, 0.0240541)

3. При повороте камеры и тыканье на ту же точку на 3d прямоугольнике - координаты луча - другие

#20
2:59, 27 окт. 2016

THE_MASTER
> А что из себя представляет этот луч? Откуда и куда он идёт? Вот я кликнул
> мышкой по экрану, из этой точки он куда пошёл, перпендикулярно экрану вглубь
> или куда?
Он идет сквозь фрустум. От передней отсекающей плоскости до задней. Для OpenGL нужно только поменять vStart на vec4 vStart = vec4(curPt.x, curPt.y, -1.0, 1.0);

THE_MASTER
> Координаты луча получаются маленькие QVector3D(-0.00473513, -0.0400443,
> 0.023829) QVector3D(-0.00477987, -0.0404226, 0.0240541)
показывай свой код

THE_MASTER
> При повороте камеры и тыканье на ту же точку на 3d прямоугольнике - координаты
> луча - другие
дальше нужно считать пересечение луча и 3д прямоугольника

#21
3:00, 27 окт. 2016

Ах, да, порядок умножения матриц может быть другой. Попробуй поменять местами умножение mView*mProj, и/или поменять местами vStart * mViewProjInv и vEnd * mViewProjInv.

#22
7:51, 27 окт. 2016

Эх, мастер...

#23
9:41, 27 окт. 2016

Dronas
> Эх, мастер...
Такой умный? Подсказал бы тогда

MrShoor
> Ах, да, порядок умножения матриц может быть другой.
Чё то бред какой - то... Вот есть у меня камера, у неё есть viewMatrix и projectionMatrix. Точку из 3D в 2D координаты экрана я переводил и вроде всё правильно было, значит матрицы не левые.... А вот теперь наоборот....  В двух словах, я могу сделать Unproject по аналогии с OpenGL и получить это:

QVector3D nearPos = QVector3D(pos.x(), pos.y(), 0.0f);
nearPos = nearPos.unproject(viewMatrix, projectionMatrix, viewport);
QVector3D farPos = QVector3D(pos.x(), pos.y(), 1.0f);
farPos = farPos.unproject(viewMatrix, projectionMatrix, viewport);

Ну вот я получил точки на nearPlane и на farPlane, а что дальше? Как мне получить точку пересечения хотя бы с плоскостью XZ?

P.S.: Polyflow3d, твоя формула для пересечения не работает, бред какой - то на выходе

Vector3 RaycastToXZ(Vector3 origin, Vector3 direction){
  if(direction.y<0){
    return origin - direction * origin.y/direction.y;
  } else {
    return Vector3.zero;
  }
}

#24
9:46, 27 окт. 2016

И ещё что заметил, на камере матрица проекций вообще не меняется, даже пи изменение FOV, меняется только матрица вида, как не крути камеру и не изменяй FOV, это нормально?    Как самому сотоставить матрицу вида и проекций, зная FOV, позицию камеры, точку мишени камеры, up vector ?

#25
10:00, 27 окт. 2016

THE_MASTER
> Ну вот я получил точки на nearPlane и на farPlane, а что дальше? Как мне
> получить точку пересечения хотя бы с плоскостью XZ?

#26
10:09, 27 окт. 2016

MrShoor, матрица перспективной проекции должна изменяться от FOV?

#27
10:53, 27 окт. 2016

THE_MASTER
> MrShoor, матрица перспективной проекции должна изменяться от FOV?
Ты ошибся сайтом. Это не гугл.

#28
11:21, 27 окт. 2016

MrShoor
> Ты ошибся сайтом. Это не гугл.
Я ошибся форумом, здесь во всех ветках, включая технический - сплошной флейм каких то душевно больных личностей, полных завистью к более успешным и шизофренией в своих высказываниях. Откуда такие люди вообще берутся? В реальной жизни я таких не встречал, как будто тут отстойник каких - то моральных уродов, который при всём этом никто не банит...
WAT, удаляй мой аккаунт, больше я на этот гавнофорум не зайду, roll-back to cyberforum.ru

#29
11:53, 27 окт. 2016

THE_MASTER
Изображение

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

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