Войти
ПрограммированиеФорумГрафика

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

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

Сделана камера на углах Эйлера и используется 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);
То все нормально работает


#1
2:31, 11 июня 2018

IBets
код GetMouseState покажи

#2
2:39, 11 июня 2018

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;
}
#3
2:49, 11 июня 2018

IBets
такое бывает, когда у тебя в коде UB и после оптимизации это UB проявляется не так, как без неё. а std::cout просто гарантирует, что оптимизатор не может избавиться от выводимого в консоль значения.

#4
2:53, 11 июня 2018

Suslik
Это в порядке компилятора мелкомягких?

#5
(Правка: 3:01) 3:01, 11 июня 2018

IBets
это UB в твоём коде, а не коде компилятора. если ты допускаешь UB, то компилятор имеет право генерить для него код, который делает буквально что угодно и это будет по стандарту. может отключить вращение по оси Y, может побрить твою кошку налысо, может твою жену обрюхатить, на то он и UB.

#6
3:13, 11 июня 2018

Suslik
Ну мышкой не повращать по горизонтали будет)) Не надо отключать !!!

#7
4:39, 11 июня 2018

IBets
> ILINE
Это так задумывалось? : )

#8
(Правка: 6:57) 6:56, 11 июня 2018

Я всю трихомонаду для клавиатуры, мыши, джойстика и геймпада брал ещё из примеров DX8. Всё работает прекрасно, только auto не использую где попало, у меня идут конкретные типы с преобразованием, где это требуется.
Может я отстал от жизни и auto = это такая гламурная мулька среди блондинок Инстаграма ))) но я привык придерживаться конкретики, так меньше поноса и разноброда в коде.

#9
7:25, 11 июня 2018

Great V.
ILINE может inline __forceinle. Можно пустым оставить

#10
7:49, 11 июня 2018

IBets
> ILINE

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

#11
7:57, 11 июня 2018

Daniil Petrov
Да, особенно прикольно выглядит код типа такого, без авто

std::list<MySuperMegaClass*>::const_iterator it = items.begin();
#12
(Правка: 8:25) 8:25, 11 июня 2018

bool
> Да, особенно прикольно выглядит код типа такого, без авто
Ты свои заморочки-то с этой глупостью не путай:

auto dx = SPEED_CAMERA_ROTATE * input.GetMouseState().lX;
#13
9:58, 11 июня 2018

Похоже где-то NAN. cout их обычно "лечит".

#14
10:03, 11 июня 2018

bool
typedef не устроит?

Страницы: 1 2 3 4 5 6 7 Следующая »
ПрограммированиеФорумГрафика