Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Я не понимаю что происходит: камера на углах Эйлера

Я не понимаю что происходит: камера на углах Эйлера

Страницы: 1 2 3 4 5 6 7 Следующая »
IBetsПользовательwww11 июня 20182:16#0
Сделана камера на углах Эйлера и используется DirectInput
Так вот началась полная дичь.
Стала блокироваться ось по вращению вокруг оси Y
auto dx = SPEED_CAMERA_ROTATE * input.GetMouseState().lX;
auto dy = SPEED_CAMERA_ROTATE * input.GetMouseState().lY;  
camera.Rotate(dy, dx, 0.0f);
Но если вставить
auto dx = SPEED_CAMERA_ROTATE * input.GetMouseState().lX;
auto dy = SPEED_CAMERA_ROTATE * input.GetMouseState().lY;
std::cout << dx;
camera.Rotate(dy, dx, 0.0f);
То все нормально работает
MrShoorУчастникwww11 июня 20182:31#1
IBets
код GetMouseState покажи
IBetsПользовательwww11 июня 20182:39#2
MrShoor
ILINE auto Input::UpdateStateKeyboard() {
  auto result = m_pDeviceKeyboard->GetDeviceState(sizeof(KeysState), static_cast<LPVOID>(&m_BufKeys));
  if (result == DIERR_INPUTLOST || result == DIERR_NOTACQUIRED)
    m_pDeviceKeyboard->Acquire();

}

ILINE auto Input::UpdateStateMouse() {
  auto result = m_pDeviceMouse->GetDeviceState(sizeof(MouseState), static_cast<LPVOID>(&m_BufMouse));
  if (result == DIERR_INPUTLOST || result == DIERR_NOTACQUIRED)
    m_pDeviceMouse->Acquire();

}

ILINE auto Input::Update() {
  this->UpdateStateKeyboard();
  this->UpdateStateMouse();
}

ILINE auto Input::IsKeyDown(Input::KeyCode key) const noexcept->bool {
  return m_BufKeys[static_cast<uint32_t>(key)] & 0x80;
}

ILINE auto Input::GetMouseState() const noexcept-> const MouseState&{
  return m_BufMouse;
}
SuslikМодераторwww11 июня 20182:49#3
IBets
такое бывает, когда у тебя в коде UB и после оптимизации это UB проявляется не так, как без неё. а std::cout просто гарантирует, что оптимизатор не может избавиться от выводимого в консоль значения.
IBetsПользовательwww11 июня 20182:53#4
Suslik
Это в порядке компилятора мелкомягких?
SuslikМодераторwww11 июня 20183:01#5
IBets
это UB в твоём коде, а не коде компилятора. если ты допускаешь UB, то компилятор имеет право генерить для него код, который делает буквально что угодно и это будет по стандарту. может отключить вращение по оси Y, может побрить твою кошку налысо, может твою жену обрюхатить, на то он и UB.

Правка: 11 июня 2018 3:01

IBetsПользовательwww11 июня 20183:13#6
Suslik
Ну мышкой не повращать по горизонтали будет)) Не надо отключать !!!
Great V.Постоялецwww11 июня 20184:39#7
IBets
> ILINE
Это так задумывалось? : )
Daniil PetrovЗабаненwww11 июня 20186:56#8
Я всю трихомонаду для клавиатуры, мыши, джойстика и геймпада брал ещё из примеров DX8. Всё работает прекрасно, только auto не использую где попало, у меня идут конкретные типы с преобразованием, где это требуется.
Может я отстал от жизни и auto = это такая гламурная мулька среди блондинок Инстаграма ))) но я привык придерживаться конкретики, так меньше поноса и разноброда в коде.

Правка: 11 июня 2018 6:57

IBetsПользовательwww11 июня 20187:25#9
Great V.
ILINE может inline __forceinle. Можно пустым оставить
innuendoПостоялецwww11 июня 20187:49#10
IBets
> ILINE

детская болезнь оптимизации

boolУчастникwww11 июня 20187:57#11
Daniil Petrov
Да, особенно прикольно выглядит код типа такого, без авто
std::list<MySuperMegaClass*>::const_iterator it = items.begin();
Daniil PetrovЗабаненwww11 июня 20188:25#12
bool
> Да, особенно прикольно выглядит код типа такого, без авто
Ты свои заморочки-то с этой глупостью не путай:
auto dx = SPEED_CAMERA_ROTATE * input.GetMouseState().lX;

Правка: 11 июня 2018 8:25

g-contПостоялецwww11 июня 20189:58#13
Похоже где-то NAN. cout их обычно "лечит".
AndreyПостоялецwww11 июня 201810:03#14
bool
typedef не устроит?

Страницы: 1 2 3 4 5 6 7 Следующая »

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр