IG_Rich | Дата: Воскресенье, 22 Мая 2016, 16:13 | Сообщение # 1 | Тема: DirectX: преобразование координат (screen->world) |
уже был
Сейчас нет на сайте
| День добры, товарищи! Возникла проблема с обработкой мыши: требуется преобразовать их из координат экрана,в мировые координаты. Для начала создание матриц: C++
Код //проекция D3DXMatrixOrthoLH(&matProj, 1024, 768, 1, 5000); g_pD3DDevice->SetTransform(D3DTS_PROJECTION, &matProj); //вида D3DXVECTOR3 pEye(2000.0f, 2000.0f, 2000.0f), pAt(0.0f, 0.0f, 0.0f), pUp(0.0f, 1.0f, 0.0f); D3DXMatrixLookAtLH(&matView, &pEye, &pAt, &pUp); g_pD3DDevice->SetTransform(D3DTS_VIEW, &matView); Мировая матрица единичная и ничего не делает. Координаты мыши получаю относительно левого верхнего угла экрана, его координаты от нуля до ширины экрана(по x),и от нуля до высоты(по y). При нажатии ЛКМ требуется переместить камеру в точку нажатия, то есть вектор pAt примет значение того,куда мы кликнули,ну а pEye сместится вместе с ним. Поиски по куче статей и ресурсов ничего не дали, всё равно не могу понять как правильно преобразовывать. Пытался через D3DXVec3Unproject: C++
Код D3DXMATRIX view, proj, world; D3DXVECTOR3 p1; g_pD3DDevice->GetTransform(D3DTS_PROJECTION, &proj); g_pD3DDevice->GetTransform(D3DTS_VIEW, &view); g_pD3DDevice->GetTransform(D3DTS_WORLD, &world); D3DVIEWPORT9 pViewport = { 0, 0, 100, 100, 0.0f, 1.0f }; g_pD3DDevice->GetViewport(&pViewport); D3DXVec3Unproject(&p1, &D3DXVECTOR3(g_MouseXPos, g_MouseYPos, 0), &pViewport, &proj, &view, &world); но то-же не получается. Что вообще эта функция возвращает?Вектор из нашего экрана в точку куда кликнули(в мире),в мировых координатах? Так-же пытался сам через скудные знания в геометрии и линейной алгебре вычислить вектора,в итоге получилось что-то вроде: C++
Код //destination - положение курсора мыши относительно лев.верхнего угла temp.x=(destination.x-WNDWIDTH/2); temp.y=(destination.y-WNDHEIGHT/2); temp.z = 0; result.x = pAt.x - temp.x / sqrt(2) + temp.y; result.y = 0; result.z = pAt.z+temp.x / sqrt(2) + temp.y; В итоге все почти верно,лишь с небольшой погрешностью, что говорит о том, что вероятно я напутал что то с коэффициентами. Прошу вашей компетентной помощи.
|
|
| |