17 lines
870 B
HLSL
17 lines
870 B
HLSL
void Facing_float(float3 ObjectPos, float3 Origin, float3 InUp, uint Orthographic, out float3 FacingWorldPos, out float3 FacingObjectPos, out float3 Right, out float3 Up, out float3 Forward)
|
|
{
|
|
float3 origin = TransformObjectToWorld(float3(0, 0, 0));
|
|
float3 view = lerp(normalize(origin - _WorldSpaceCameraPos.xyz), GetViewForwardDir(), Orthographic);
|
|
|
|
Up = normalize(InUp);
|
|
Right = normalize(cross(Up, view));
|
|
Forward = cross(Right, Up);
|
|
|
|
FacingWorldPos = Origin;
|
|
FacingWorldPos += ObjectPos.x * length(TransformObjectToWorld(float3(1, 0, 0)) - origin) * Right;
|
|
FacingWorldPos += ObjectPos.y * length(TransformObjectToWorld(float3(0, 1, 0)) - origin) * Up;
|
|
FacingWorldPos += ObjectPos.z * length(TransformObjectToWorld(float3(0, 0, 1)) - origin) * Forward;
|
|
|
|
FacingObjectPos = TransformWorldToObject(FacingWorldPos);
|
|
}
|