Odpowiedź na pytanie o rotację postaci w irrlicht Aby postać skierowała się w stronę gracza, należy obliczyć kąt między wektorem pozycji postaci a wektorem pozycji gracza. W irrlicht kąty podaje się zwykle w stopniach, więc nie musisz przeliczać na radiany (chyba że używasz funkcji trygonometrycznych z biblioteki C++).
Kroki realizacji:
1. Oblicz wektor kierunkowy od postaci do gracza:
f32 dx = kam_pos.X - pos_pos.X;
f32 dz = kam_pos.Z - pos_pos.Z;
2. Wylicz kąt obrotu za pomocą
atan2f (zwraca radiany, ale w irrlicht można pracować bezpośrednio w stopniach):
f32 angleRad = atan2f(dz, dx); // Zwraca kąt w radianach
f32 angleDeg = angleRad * (180.0f / M_PI); // Przelicz na stopnie
3. Ustaw rotację postaci na osi Y (domyślnie w irrlicht rotacja Y to "obrót w pionie"):
pos->setRotation(vector3df(0, angleDeg, 0));
4. Jeśli postać porusza się, upewnij się, że rotacja jest aktualizowana w każdej klatce animacji.
Uwagi dodatkowe: - Jeśli model postaci nie jest wyprostowany (np. obraca się wokół innych osi), może być konieczne dodanie offsetu do kąta (np.
angleDeg += 90).
- Upewnij się, że wektor pozycji gracza (
kam_pos) i postaci (
pos_pos) są poprawnie przekazywane.
- W przypadku braku efektu, sprawdź, czy funkcja
setRotation jest wywoływana po aktualizacji pozycji (
setPosition).
Odpowiedź na pytanie o kąt pełny (360°): W programowaniu i irrlicht 360° to rzeczywiście kąt pełny. Jednak funkcje takie jak
atan2f zwracają wartości w zakresie [-π, π] (radiany) lub [-180°, 180°] (stopnie). Dlatego przy operacjach na kątach należy uwzględnić normalizację (np.
fmod(angleDeg, 360.0f)).
Powodzenia w implementacji!