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

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

Страницы: 1 2 3 4 5 6 7 Следующая »
#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);
То все нормально работает

11 июня 2018


#1

IBets
код GetMouseState покажи

11 июня 2018

#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;
}

11 июня 2018

#3

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

11 июня 2018

#4

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

11 июня 2018

#5

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

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

#6

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

11 июня 2018

#7

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

11 июня 2018

#8

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

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

#9

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

11 июня 2018

#10

IBets
> ILINE

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

11 июня 2018

#11

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

std::list<MySuperMegaClass*>::const_iterator it = items.begin();

11 июня 2018

#12

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

auto dx = SPEED_CAMERA_ROTATE * input.GetMouseState().lX;

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

#13

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

11 июня 2018

#14

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

11 июня 2018

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