Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2009, 01:48   #1
sfok3
 
Регистрация: 01.10.2009
Сообщений: 5
По умолчанию Камера DirectX

Привет всем. Вот появилась у меня такая проблема, если кто может что либо подсказать, был бы очень рад.

передвижение камеры

Код:
D3DXMatrixIdentity(matView);
vEyePt := D3DXVector3(0.0, 5.0, 5-iks);
vLookatPt :=  D3DXVector3(0.0, 0.0, 0.0-iks);
vUp :=  D3DXVector3(0.0, 1.0, 0.0);
D3DXMatrixLookAtLH(matView, vEyePt, vLookatPt, vUp);
g_pd3dDevice.SetTransform(D3DTS_VIEW, matView);

вращение камеры вокруг точки

Код:
D3DXMatrixIdentity(matRotateX);
D3DXMatrixRotationX(matRotateX, -Angle);
D3DXMatrixIdentity(matRotateY);
D3DXMatrixRotationY(matRotateY, -AngleZ);
D3DXMatrixMultiply(matRotateSumm, matRotateX, matRotateY);
D3DXVec3TransformNormal(vEyePt, vEyePt, matRotateSumm);
D3DXVec3Add(vEyePt, vEyePt, vLookatPt);
D3DXMatrixLookAtLH(matView, vEyePt, vLookatPt, vUp);
g_pd3dDevice.SetTransform(D3DTS_VIEW, matView);

но как только я пытаюсь это совместить всё начинает работать криво.... лучшего эффекта я достиг при:

Код:
D3DXMatrixIdentity(matView);
vEyePt := D3DXVector3(0.0, 5.0, 5-iks);
vLookatPt :=  D3DXVector3(0.0, 0.0, 0.0-iks);
vUp :=  D3DXVector3(0.0, 1.0, 0.0);
D3DXMatrixIdentity(matRotateX);
D3DXMatrixRotationX(matRotateX, Angle);
D3DXMatrixIdentity(matRotateY);
D3DXMatrixRotationY(matRotateY, AngleZ);
D3DXMatrixIdentity(matRotateSumm);
D3DXMatrixMultiply(matRotateSumm, matRotateX, matRotateY);
D3DXMatrixLookAtLH(matView, vEyePt, vLookatPt, vUp);
D3DXMatrixMultiply(matView, matView, matRotateSumm);
g_pd3dDevice.SetTransform(D3DTS_VIEW, matView);

камера вращается, объект движется... камера вращается просто так, а мне надо чтоб вокруг объекта.
sfok3 вне форума Ответить с цитированием
Старый 02.10.2009, 20:56   #2
sfok3
 
Регистрация: 01.10.2009
Сообщений: 5
По умолчанию

Код:
vEyePt := D3DXVector3(0.0, 5.0, 5);
vLookatPt :=  D3DXVector3(0.0, 0.0, 0.0-iks);
проблема решена, если vEyePt высчитывается у меня, то зачем я от него тоже отнимаю значение iks
sfok3 вне форума Ответить с цитированием
Старый 06.02.2012, 21:05   #3
Oleveto
Новичок
Джуниор
 
Регистрация: 06.02.2012
Сообщений: 1
По умолчанию

Цитата:
Сообщение от sfok3 Посмотреть сообщение
Привет всем. Вот появилась у меня такая проблема, если кто может что либо подсказать, был бы очень рад.

передвижение камеры

Код:
D3DXMatrixIdentity(matView);
vEyePt := D3DXVector3(0.0, 5.0, 5-iks);
vLookatPt :=  D3DXVector3(0.0, 0.0, 0.0-iks);
vUp :=  D3DXVector3(0.0, 1.0, 0.0);
D3DXMatrixLookAtLH(matView, vEyePt, vLookatPt, vUp);
g_pd3dDevice.SetTransform(D3DTS_VIEW, matView);

вращение камеры вокруг точки

Код:
D3DXMatrixIdentity(matRotateX);
D3DXMatrixRotationX(matRotateX, -Angle);
D3DXMatrixIdentity(matRotateY);
D3DXMatrixRotationY(matRotateY, -AngleZ);
D3DXMatrixMultiply(matRotateSumm, matRotateX, matRotateY);
D3DXVec3TransformNormal(vEyePt, vEyePt, matRotateSumm);
D3DXVec3Add(vEyePt, vEyePt, vLookatPt);
D3DXMatrixLookAtLH(matView, vEyePt, vLookatPt, vUp);
g_pd3dDevice.SetTransform(D3DTS_VIEW, matView);

но как только я пытаюсь это совместить всё начинает работать криво.... лучшего эффекта я достиг при:

Код:
D3DXMatrixIdentity(matView);
vEyePt := D3DXVector3(0.0, 5.0, 5-iks);
vLookatPt :=  D3DXVector3(0.0, 0.0, 0.0-iks);
vUp :=  D3DXVector3(0.0, 1.0, 0.0);
D3DXMatrixIdentity(matRotateX);
D3DXMatrixRotationX(matRotateX, Angle);
D3DXMatrixIdentity(matRotateY);
D3DXMatrixRotationY(matRotateY, AngleZ);
D3DXMatrixIdentity(matRotateSumm);
D3DXMatrixMultiply(matRotateSumm, matRotateX, matRotateY);
D3DXMatrixLookAtLH(matView, vEyePt, vLookatPt, vUp);
D3DXMatrixMultiply(matView, matView, matRotateSumm);
g_pd3dDevice.SetTransform(D3DTS_VIEW, matView);

камера вращается, объект движется... камера вращается просто так, а мне надо чтоб вокруг объекта.
Поменяй местами строки D3DXMatrixLookAtLH(matView, vEyePt, vLookatPt, vUp); и D3DXMatrixMultiply(matRotateSumm, matRotateX, matRotateY);
Порядок операций с матрицами играет огромную роль. От перемены мест множителей изменяется результат
Oleveto вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DirectX и С++ mrandrey Общие вопросы C/C++ 2 24.08.2009 14:46
Телефон+камера vitya1979 Свободное общение 1 26.07.2009 14:01
Камера в OpenGL. Подскажите. spamer Общие вопросы Delphi 0 06.05.2009 23:45
Камера от третьего лица в DirectX Pedro Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 08.04.2009 15:51
DirectX Doom4eg Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 06.08.2008 13:08