Graphics::Transform buildMeshWorldSpaceTransform(const Graphics::Transform& meshLocalTransform, const Graphics::Transform& deltaTransformToApply, Math::Vec3 CenterWs)
{
Math::Vec3 scale;
Math::Vec3 orientation;// Not used because i can get glitches
Math::Vec3 position;
const Math::Mat4 mat = deltaTransformToApply.getMatrix() * meshLocalTransform.getMatrix();
Math::GlmExt::decompose(mat, scale, orientation, position);
Graphics::Transform transform;
transform.setPosition(position);
transform.setRotation(Graphics::EulerRotationAdd(deltaTransformToApply.getRotation(), meshLocalTransform.getRotation()));
transform.setScale(scale);
return transform;
}
< /code>
Da [b] CenterWs < /strong> nicht in Rechnung genommen wird. Es ist definitiv sinnvoll, dass die Rotation auf der ganzen Welt der Welt erfolgt.Graphics::Transform buildMeshWorldSpaceTransform(const Graphics::Transform& meshLocalTransform, const Graphics::Transform& deltaTransformToApply, Math::Vec3 CenterWs)
{
Math::Vec3 scale;
Math::Vec3 orientation;// Not used because i can get glitches
Math::Vec3 position;
const Math::Mat4 translationMatrix = glm::translate(Math::Mat4(), CenterWs);
const Math::Mat4 translationMatrixInv = glm::translate(Math::Mat4(), -CenterWs);
const Math::Mat4 mat = translationMatrix * deltaTransformToApply.getMatrix() * meshLocalTransform.getMatrix() * translationMatrixInv;
// @See: https://github.com/g-truc/glm/blob/master/glm/gtx/matrix_decompose.inl
Math::GlmExt::decompose(mat, scale, orientation, position);
Graphics::Transform transform;
transform.setPosition(position);
transform.setRotation(Graphics::EulerRotationAdd(deltaTransformToApply.getRotation(), meshLocalTransform.getRotation()));
transform.setScale(scale);
return transform;
}
< /code>
Mit diesem späteren Code erhalte ich das folgende Ergebnis:
[youtube]nwtcswc_gu8[/youtube]
Es startet gut, dann gibt es einen "Sprung". Siehe 0:16 < /p>
Ich habe dann einen weiteren Test gemacht, der den "Sprung" offensichtlicher macht. Grundsätzlich passiert es jedes Mal, wenn ich einen neuen Drag [/b]
[youtube]hgq-pb8y6b0[/youtube]
[b] Was [/b] mache ich mit dem neuen [b] buildMeshWorldSpacetransform [/b]? />https://www.dropbox.com/scl/fi/r5vu98c6ndin2Pf61jozv/transformModifierpanel Dies:
[img]https://i.sstatic.net/iVKC4pKj.png[/img]
The deltaTransformToApply from BuildMeshWorldSpacetRansform call ist einfach der Unterschied zwischen dem aktuellen und dem anfänglichen Transformationswert. Es wird wie folgt berechnet: < /p>
inline Transform buildDelta(const Transform& other) const
{
Transform outTransform;
outTransform.setPosition(getPosition() - other.getPosition());
outTransform.setRotation(EulerRotationSubstract(getRotation(), other.getRotation()));
outTransform.setScale(getScale() / other.getScale());
return outTransform;
}
[*]
MeshLocalTransform.
Die meshlocalTransform von BuildMeshWorldWorldSpacetRansform einfach von einem Mesh -Raum in ein Mesh -lokaler Raum nach Worldpace konvertieren. Transformationen werden unter Verwendung eines PRS (Position, Rotation, Skalierung) berechnet: < /p>
Hier ein Überblick über alle Gizmos in meiner Software:
[youtube]5bsgcjc005w[/youtube] [b] Jetzt möchte ich ordnungsgemäß einige Maschen um ihre gemeinsame Mitte < /strong>. />[youtube]mmhwgdn7zxa[/youtube] In meiner Software bekomme ich derzeit Folgendes:
[youtube]vrq3yi2wczs[/youtube] grundlegend rot. Mitte. [/b] Hier wird derzeit eine Mesh -endgültige Transformation berechnet: [code]Graphics::Transform buildMeshWorldSpaceTransform(const Graphics::Transform& meshLocalTransform, const Graphics::Transform& deltaTransformToApply, Math::Vec3 CenterWs) { Math::Vec3 scale; Math::Vec3 orientation;// Not used because i can get glitches Math::Vec3 position; const Math::Mat4 mat = deltaTransformToApply.getMatrix() * meshLocalTransform.getMatrix(); Math::GlmExt::decompose(mat, scale, orientation, position);
return transform; } < /code> Da [b] CenterWs < /strong> nicht in Rechnung genommen wird. Es ist definitiv sinnvoll, dass die Rotation auf der ganzen Welt der Welt erfolgt.Graphics::Transform buildMeshWorldSpaceTransform(const Graphics::Transform& meshLocalTransform, const Graphics::Transform& deltaTransformToApply, Math::Vec3 CenterWs) { Math::Vec3 scale; Math::Vec3 orientation;// Not used because i can get glitches Math::Vec3 position;
return transform; } < /code> Mit diesem späteren Code erhalte ich das folgende Ergebnis:
[youtube]nwtcswc_gu8[/youtube]
Es startet gut, dann gibt es einen "Sprung". Siehe 0:16 < /p> Ich habe dann einen weiteren Test gemacht, der den "Sprung" offensichtlicher macht. Grundsätzlich passiert es jedes Mal, wenn ich einen neuen Drag [/b] [youtube]hgq-pb8y6b0[/youtube] [b] Was [/b] mache ich mit dem neuen [b] buildMeshWorldSpacetransform [/b]? />https://www.dropbox.com/scl/fi/r5vu98c6ndin2Pf61jozv/transformModifierpanel Dies:
[img]https://i.sstatic.net/iVKC4pKj.png[/img]
The deltaTransformToApply from BuildMeshWorldSpacetRansform call ist einfach der Unterschied zwischen dem aktuellen und dem anfänglichen Transformationswert. Es wird wie folgt berechnet: < /p> inline Transform buildDelta(const Transform& other) const { Transform outTransform; outTransform.setPosition(getPosition() - other.getPosition()); outTransform.setRotation(EulerRotationSubstract(getRotation(), other.getRotation())); outTransform.setScale(getScale() / other.getScale());
return outTransform; } [/code]
[*] MeshLocalTransform. Die meshlocalTransform von BuildMeshWorldWorldSpacetRansform einfach von einem Mesh -Raum in ein Mesh -lokaler Raum nach Worldpace [url=viewtopic.php?t=12659]konvertieren.[/url] Transformationen werden unter Verwendung eines PRS (Position, Rotation, Skalierung) berechnet: < /p> [code]inline void Transform::computeFromPRS(const Math::Vec3& position) { m_matrix = Math::Mat4(); m_matrix = glm::scale(m_matrix, m_scale); m_matrix = glm::rotate(m_matrix, m_rotation[0].getValue(), Math::Vec3(1.0f, 0.0f, 0.0f)); m_matrix = glm::rotate(m_matrix, m_rotation[1].getValue(), Math::Vec3(0.0f, 1.0f, 0.0f)); m_matrix = glm::rotate(m_matrix, m_rotation[2].getValue(), Math::Vec3(0.0f, 0.0f, 1.0f));
Kontext
Ich erstelle eine App, die grundlegende Benutzereingaben nimmt und sie in eine Tabelle einsetzt (mit Apache Poi und Excel, aber Google Sheets würde auch funktionieren). Ich kann die Daten...
Kontext
Ich erstelle eine App, die grundlegende Benutzereingaben nimmt und sie in eine Tabelle einsetzt (mit Apache Poi und Excel, aber Google Sheets würde auch funktionieren). Ich kann die Daten...
Ich versuche, Diffie Hellman Key Exchange zwischen meiner iOS-App (Swift) und meinem ASP.NET 8 Core-Webserver zum Laufen zu bringen, aber bei allem, was ich bisher versucht habe, sind die auf jeder...
Ich versuche, Diffie Hellman Key Exchange zwischen meiner iOS-App (Swift) und meinem ASP.NET 8 Core-Webserver zum Laufen zu bringen, aber bei allem, was ich bisher versucht habe, sind die auf jeder...
Wenn ich diese Vorlage allein für Paare verwende, funktioniert sie auch für Vektoren mit einem Datentyp mit Ausnahme der Paare, aber wenn ich einen Vektor eines Paares mit einer bestimmten Größe...