11.5 C
Brasília
domingo, junho 15, 2025

Transformações de alinhamento de dois pontos


Estou tentando determinar as etapas de transformação (posição, escala, rotação) precisavam ser aplicadas a um objeto para que dois pontos, posicionados localmente nesse objeto, alinhem -se com duas posições espaciais mundiais.

A configuração atualmente é:

  • E é um pré -fabric com duas crianças transformadas (a, b)
  • Transformações C e D também estão dentro de um pré -fabricação (f)
  • Temos uma posição mundial, escala e rotação que F instanciará com
  • Antes de qualquer instanciação, calcule a transformação que precisa ocorrer para E para acabar na posição correta.

Transformações de alinhamento de dois pontos

A solução que tenho no momento está próxima, mas a rotação nunca parece se alinhar perfeitamente, afetando o posicionamento.

public static (Vector3, Quaternion, Vector3) GetChildPosLeg(
    Rework topReference, // A
    Rework bottomReference, // B
    Rework topTarget, // C
    Rework bottomTarget, // D
    Vector3 scale // Scale of root instantiated object
    )
{
    // World topTarget
    Vector3 topTargetPos = (Vector3.Scale(topTarget.place, scale));
    Vector3 bottomTargetPos = (Vector3.Scale(bottomTarget.place, scale));

    // Scale
    float refDist = Vector3.Distance(topReference.place, bottomReference.place);
    float targetDist = Vector3.Distance(topTargetPos, bottomTargetPos);

    float scaleRatio = targetDist / refDist;
    Vector3 finalScale = new Vector3(0.5f, 1f, 0.5f) * scaleRatio;

    // Rotation
    Vector3 targetDir = topTarget.place - bottomTarget.place;
    Vector3 refDir =  bottomReference.localPosition - topReference.localPosition;

    Quaternion objectRotation = Quaternion.FromToRotation(refDir, targetDir);

    // Place
    Vector3 childNodePos = Vector3.Scale(topReference.localPosition, finalScale);
    childNodePos = objectRotation * childNodePos;
    Vector3 finalPosition = topTargetPos + childNodePos;

    return (finalPosition, objectRotation, finalScale);
}

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Stay Connected

0FansLike
0FollowersFollow
0SubscribersSubscribe
- Advertisement -spot_img

Latest Articles