Форум программистов, компьютерный форум, киберфорум
DirectX
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
6 / 6 / 5
Регистрация: 25.02.2015
Сообщений: 202

Управление камерой при помощи мыши

20.01.2016, 19:02. Показов 1559. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Обучаюсь потихоньку directx9 по книге Франка Луны. По его примерам удалось реализовывать потихоньку камеру - вроде получилось - но управлять могу только клавиатурой, хотелось бы сделать управление мышкой, как в играх, где камера с видом от первого лица, собственно код подсмотрел в чужой недоделанной статье, получилось следующие - камера вроде работает нормально - но вектор правого угла камеры и вектор верхнего угла камеры постоянно куда - то не в ту сторону трансформируются и получается наклон по координате Y, помогите исправить это:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
float vx = 0.0f, vy = 0.0f, vz = 1.0f;
//Получаем координаты мыши клиентского окна
vx = mpos(hwnd_).x * (float) 0.01;
vy = mpos(hwnd_).y * (float) 0.01;
 
float vr = (float)(sqrt(pow(vx, 2) + pow(vy, 2) + pow(vz, 2)));
 
float vtx = (float)(sin(vx) * sin(vy)) * vr;
float vty = (float)(cos(vy)) * vr;
float vtz = (float)(sin(vy) * cos(vx)) * vr;
 
lookTargetPostion_ = D3DXVECTOR3(vtx, vty, vtz);    
 
if (pIDirect3DDevice9_->SetTransform(D3DTS_VIEW, &getCameraSettings()) != D3D_OK) {
 
    msg_er_full;
}
На всякий случай

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
D3DXMATRIX Camera::getCameraSettings()
{
    D3DXVec3Normalize(&lookTargetPostion_, &lookTargetPostion_);
 
    D3DXVec3Cross(&upPosition_, &lookTargetPostion_, &rightPositition_);
    D3DXVec3Normalize(&upPosition_, &upPosition_);
 
    D3DXVec3Cross(&rightPositition_, &upPosition_, &lookTargetPostion_);
    D3DXVec3Normalize(&rightPositition_, &rightPositition_);
 
    (cameraSettings_)(0, 0) = rightPositition_.x; (cameraSettings_)(0, 1) = upPosition_.x; (cameraSettings_)(0, 2) = lookTargetPostion_.x; (cameraSettings_)(0, 3) = 0.0f;
    (cameraSettings_)(1, 0) = rightPositition_.y; (cameraSettings_)(1, 1) = upPosition_.y; (cameraSettings_)(1, 2) = lookTargetPostion_.y; (cameraSettings_)(1, 3) = 0.0f;
    (cameraSettings_)(2, 0) = rightPositition_.z; (cameraSettings_)(2, 1) = upPosition_.z; (cameraSettings_)(2, 2) = lookTargetPostion_.z; (cameraSettings_)(2, 3) = 0.0f;
    (cameraSettings_)(3, 0) = -D3DXVec3Dot(&rightPositition_, &cameraPosition_); (cameraSettings_)(3, 1) = -D3DXVec3Dot(&upPosition_, &cameraPosition_); (cameraSettings_)(3, 2) = -D3DXVec3Dot(&lookTargetPostion_, &cameraPosition_); (cameraSettings_)(3, 3) = 1.0f;
 
    return cameraSettings_;
}
Я так понял, что мне нужно трансформировать вектор правого края камеры и верхнего, вместе с вектором куда смотрит камера, подскажите как сделать правильно или приведите пожалуйста свои примеры реализации.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.01.2016, 19:02
Ответы с готовыми решениями:

При управлении камерой (DirectInput) объект должен следовать за ней и поворачиваться с помощью мыши
Мнн нужна помощь с DirectX. Мне нужно сделать так, чтобы при управлении камерой( С DirectInput) объект следовал за ней и поворачивался с...

Реализовать управление камерой с помощью мыши
Здравствуйте, программируя в OpenGL столкнулся с такой проблемой - мне необходимо создать управление камерой с помощью мыши (т.е. при...

Управление камерой посредством мыши Unity3d
Здравствуйте, прошу помощи. Облазил весь интернет и ничего не нашел, либо нашел только какие-то обрывки кодов без объяснения. Суть в...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.01.2016, 19:02
Помогаю со студенческими работами здесь

Как при помощи .load() при наведении указателя мыши на элемент подгрузить в head
Как при помощи .load() при наведении указателя мыши на элемент подгрузить в head <script...

Перемещение формы при помощи мыши
Имеется форма с BorderStyle:bsNone Как можно передвигать эту форму мышкой? И можно-ли назначить такую функцию отдельной части формы,...

Рисование линии при помощи мыши
Добрый вечер. Есть код рисования линии по двум точкам (которые заданы в кач-ве переменных). Хочу эти переменные заполнять координатами...

Рисование линии при помощи мыши
Здравствуйте! Возникла следующая проблема и буду очень благодарна, если кто-нибудь сможет мне помочь. Необходимо заносить значение оси Х...

Перемещение объекта при помощи мыши
Доброго времени суток. Как можно реализовать перемещение какого либо объекта (label, button и т.д) с помощью мыши, нажал на него и таскаешь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru