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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2010, 14:02   #1
Morod
 
Регистрация: 18.02.2010
Сообщений: 3
По умолчанию DirectX Выбор 3d объектов

Здравствуйте, господа. К вам за советом.Недавно после долгих мучений и поисков смог реализовать нечто подобное на выделение объектов мышью, однако работает это только при камере смотрящей вертикально, а если устанавливаю камеру под углом - координаты теряются.
Вот код камеры :
Код:
  position   := d3dxvector3(0, 0, cus)
  target := d3dxvector3(0, 0, 0.0);
  worldUp := d3dxvector3(0.0, 1.0, 0.0);
  
  D3DXMatrixLookAtLH(ViewMatr, position, target, worldUp);
  Device.SetTransform(D3DTS_VIEW, ViewMatr);
  D3DXMatrixPerspectiveFovLH(proj, PI * 0.25, screen.width / screen.height, 1.0, 1000.0);
  Device.SetTransform(D3DTS_PROJECTION, proj);

  // тут я поворачиваю мир на угол ( пока статичный)
   D3DXMatrixRotationX(WorldMatr, pi/4);
   Device.SetTransform(D3DTS_WORLD, WorldMatr);
вот функция луча
Код:
Device.GetTransform(D3DTS_PROJECTION, projx);
  v.x :=  ( ( ( 2.0 * MousefX ) / global.ScreenField.Witdh ) - 1 ) / Projx._11;
  v.y := -( ( ( 2.0 * MousefY ) / global.ScreenField.Height) - 1 ) / Projx._22;
  v.z :=  1 ;
  v.x := (v.x ) * (abs(cus));
  v.y := (v.y ) * (abs(cus));
  // получаем инвертированную видовую матрицу
  //D3DXMatrixMultiply(mWorldView, Global.WorldMatr, Global.viewMatr);
  Device.GetTransform(D3DTS_VIEW, mWorldView);
  D3DXMatrixInverse( m, nil, mWorldView );
// трансформируем координату щелчка мыши и направление
  //в трехмерное пространство

  vPickRayDir.x  := v.x*m._11 + v.y*m._21 + v.z*m._31;
  vPickRayDir.y  := v.x*m._12 + v.y*m._22 + v.z*m._32;
  vPickRayDir.z  := v.x*m._13 + v.y*m._23 + v.z*m._33;
  vPickRayOrig.x := m._41;
  vPickRayOrig.y := m._42;
  vPickRayOrig.z := m._43;
Ну , а по щелчку мыши создаю объект
Код:
  Quad1 := TQuad1.Create(vec.x,vec.y, vec.z, device);
, и вот когда камера смотрит вниз - всё идеально, объект создаётся ровно под указателем мыши, но при использовании в камере,
Код:
D3DXMatrixRotationX(WorldMatr, pi/4)
, или на любой другой угол происходит сдвиг. Так же пробовал изменять угол отображения
Код:
  position   := d3dxvector3(0, 0, cus)
  target := d3dxvector3(0, 0, 0.0);
изменяя координаты, но тут такая же история. Есть предположение, что когда мир поворачивается под углом, то расстояние cus изменяется, но все мои математические вычисление не увенчались успехом. Может кто сталкивался с такой проблемой, или может подсказать как это обойти?

Последний раз редактировалось Morod; 14.03.2010 в 14:08.
Morod вне форума Ответить с цитированием
Старый 14.03.2010, 19:44   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

я так понимаю ты создаешь контейнер, размер которого есть размер обьекта из вида камеры? Я не знаю как сделан выбор 3д обьектов в 3ds max , но мне кажется, что при щелчке мышью на обьект создается контейнер вокруг самого 3д обьекта. Тогда и проблем с камерой не должно быть
NiCola999 вне форума Ответить с цитированием
Старый 14.03.2010, 20:41   #3
Morod
 
Регистрация: 18.02.2010
Сообщений: 3
По умолчанию

Да нет, на самом деле я не использую пока выделение объекта, а просто создаю на месте клика мыши кубик. И вот если камера направлена вниз - кубик создаётся замечательно, даже если сильно отдаляю, однако, как-только камеру ставлю под углом, кубик создаётся уже не под указателем мыши. Да , и кубики создаются на одной плоскости.

Последний раз редактировалось Morod; 14.03.2010 в 20:54.
Morod вне форума Ответить с цитированием
Старый 10.09.2010, 19:07   #4
m21448
Новичок
Джуниор
 
Регистрация: 10.09.2010
Сообщений: 1
По умолчанию

Решение здесь
Всё подробно описано
m21448 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DirectX 9 НЕБО Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 18.01.2010 22:51
directx и C++ dampirik Общие вопросы C/C++ 4 20.11.2009 14:00
DirectX и С++ mrandrey Общие вопросы C/C++ 2 24.08.2009 14:46
С++ и DirectX Элодар Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 22.02.2009 00:23
DirectX Doom4eg Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 06.08.2008 13:08