Ich habe mit OpenGL einen Autosimulator erstellt. Für die Autokollisionsbox habe ich ein OBB verwendet. Das Problem ist, wenn ich die Kollisionsbox drehen möchte. Dafür verwende ich diese Funktion:
Die Funktion berechnet mit den Min- und Max-Punkten des OBB alle Ecken und dreht sie mit einer Rotationsmatrix (berechnet mit Winkel). Anschließend ermittelt die Funktion die Punkte newMin und newMax und gibt sie zurück. Das Problem, auf das ich gestoßen bin, ist, dass die Funktion nicht mit Winkelwerten funktioniert, die ungleich 0° oder 180° sind. newMin und newMax stimmen nicht mit dem Auto überein.
An der Basis habe ich zur Berechnung der newMin- und newMax-Werte nur boxMin und boxMax mit der rotationMatrix multipliziert, was bei dieser Methode jedoch nicht der Fall war berücksichtigt alle Ecken. Um dieses Problem zu lösen, habe ich diese Funktion erstellt:
Diese Funktion war besser, weil sie für alle Winkel funktionierte, die ein Vielfaches von 90 sind, aber sie reichte nicht aus. Also habe ich die erste Funktion erstellt, aber sie ist schlechter als die zweite, weil sie für nicht funktioniert diese Winkel: 90° und 270°. Bitte helfen Sie mir.
Ich habe mit OpenGL einen Autosimulator erstellt. Für die Autokollisionsbox habe ich ein OBB verwendet. Das Problem ist, wenn ich die Kollisionsbox drehen möchte. Dafür verwende ich diese Funktion: [code]std::vector rotateCollisionBox(float angle, glm::vec3 boxMin, glm::vec3 boxMax) { std::vector rotatedVertices; glm::mat4 rotationMatrix = glm::rotate(glm::mat4(1.0f), glm::radians(angle), glm::vec3(0.0, 1.0, 0.0));
return {newMin, newMax}; } [/code] Die Funktion berechnet mit den Min- und Max-Punkten des OBB alle Ecken und dreht sie mit einer Rotationsmatrix (berechnet mit Winkel). Anschließend ermittelt die Funktion die Punkte newMin und newMax und gibt sie zurück. Das Problem, auf das ich gestoßen bin, ist, dass die Funktion nicht mit Winkelwerten funktioniert, die ungleich 0° oder 180° sind. newMin und newMax stimmen nicht mit dem Auto überein. An der Basis habe ich zur Berechnung der newMin- und newMax-Werte nur boxMin und boxMax mit der rotationMatrix multipliziert, was bei dieser Methode jedoch nicht der Fall war berücksichtigt alle Ecken. Um dieses Problem zu lösen, habe ich diese Funktion erstellt: [code]std::vector rotateCollisionBox(float angle, glm::vec3 boxMin, glm::vec3 boxMax) { std::vector rotatedVertices; glm::mat4 rotationMatrix = glm::rotate(glm::mat4(1.0f), glm::radians(angle), glm::vec3(0.0, 1.0, 0.0));
return {newMin, newMax}; } [/code] Diese Funktion war besser, weil sie für alle Winkel funktionierte, die ein Vielfaches von 90 sind, aber sie reichte nicht aus. Also habe ich die erste Funktion erstellt, aber sie ist schlechter als die zweite, weil sie für nicht funktioniert diese Winkel: 90° und 270°. Bitte helfen Sie mir.
Ich habe ein Problem mit meinem Enthüllungsidemenu-Kreis; Der Punkt ist, dass die Person auf das Symbol klickt, und dann dreht sich der Kreis, und die obere Seite wird zur Seite bewegt, um einen...
Ich habe ein Problem mit meinem Enthüllungsidemenu-Kreis; Der Punkt ist, dass die Person auf das Symbol klickt, und dann dreht sich der Kreis, und die obere Seite wird zur Seite bewegt, um einen...
Ich habe ein Problem mit meinem Enthüllungsidemenu-Kreis; Der Punkt ist, dass die Person auf das Symbol klickt, und dann dreht sich der Kreis, und die obere Seite wird zur Seite bewegt, um einen...
Ich habe ein Problem mit meinem Enthüllungsidemenu-Kreis; Der Punkt ist, dass die Person auf das Symbol klickt, und dann dreht sich der Kreis, und die obere Seite wird zur Seite bewegt, um einen...