Преобразовать координаты 2D в 3D

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

SergeyZuzic
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 20.03.2009 (Пт) 14:36

Преобразовать координаты 2D в 3D

Сообщение SergeyZuzic » 05.01.2011 (Ср) 16:05

Есть mesh, получаю столкновение:
Код: Выделить всё
D3DX.Intersect Mesh, AddVector, EndVec, Hit, FaceIndex, u, v, Dist, 0

Проверка идет от позиции камеры и центра экрана, а надо, чтобы ещё шла от координат курсора. Вращение камеры фиксировано на: AngleX=-1,57; AngleY=2
Код: Выделить всё
    'DirectID8.GetDeviceStateMouse DirectMouse
    'AngleX = AngleX + DirectMouse.lX * 0.002
    'AngleY = AngleY + DirectMouse.lY * 0.002
    Pov.X = Sin(AngleX) * Sin(AngleY)
    Pov.Y = Cos(AngleY)
    Pov.Z = Sin(AngleY) * Cos(AngleX)
    'SetCursorPos Screen_Center_X, Screen_Center_Y


Код от DirectXManiac:
Код: Выделить всё
Public Function GetMousePickDirection(X As Single, Y As Single) As D3DVECTOR
Dim Mtemp As D3DMATRIX
Dim Mtemp2 As D3DMATRIX
Dim view As D3DVIEWPORT8

d3dDevice.GetTransform D3DTS_WORLD, Mtemp
d3dDevice.GetViewport view
On Local Error Resume Next
Cursor.X = X
Cursor.Y = Y
Cursor.z = 0
d3dDevice.GetTransform D3DTS_VIEW, Mtemp2
D3DXVec3Unproject vNear, Cursor, view, pjm, Mtemp2, Mtemp
Cursor.z = 1
D3DXVec3Unproject vFar, Cursor, view, pjm, Mtemp2, Mtemp
D3DXVec3Subtract GetMousePickDirection, vFar, vNear
End Function


не помог :(

SergeyZuzic
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 20.03.2009 (Пт) 14:36

Re: Преобразовать координаты 2D в 3D

Сообщение SergeyZuzic » 05.01.2011 (Ср) 16:10

И ещё не очень приятная вещь, на запущенной программе происходит редактирование кода. И после остановки там что-то типо WWAASDSSWWASD получается. События клавиатуры VB6 перехватывает себе в текстовое поле (код).

lellel
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 19.12.2007 (Ср) 22:07
Откуда: Долгопрудный

Re: Преобразовать координаты 2D в 3D

Сообщение lellel » 06.01.2011 (Чт) 10:21

я бы сделал так:
(как показал DirectXManiac тоже можно)
Код: Выделить всё
d3dDevice.GetTransform D3DTS_WORLD,      mWORLD
d3dDevice.GetTransform D3DTS_VIEW,       mVIEW
d3dDevice.GetTransform D3DTS_PROJECTION,    mPROJECTION
d3dDevice.GetViewport VIEWPORT

'Cursor это D3DVECTOR
'Cursor.x и Cursor.y хранят координаты точки на экране
'Сursor.z = 1

D3DXVec3Unproject outV, Сursor, VIEWPORT, mPROJECTION, mVIEW, mWORLD
V = CameraPos - outV

и с вектором V искать пересечение.


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

    TopList