46 lines
1018 B
C#
46 lines
1018 B
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Godot;
|
|
using System;
|
|
|
|
|
|
|
|
namespace Rokojori
|
|
{
|
|
public class OctahedralMapping
|
|
{
|
|
public static Vector3 Hemisphere( Vector2 uv )
|
|
{
|
|
var position = new Vector3 (uv.X - uv.Y, 0, -1.0f + uv.X + uv.Y );
|
|
var absolute = position.Abs();
|
|
position.Y = 1.0f - absolute.X - absolute.Z;
|
|
|
|
return position;
|
|
}
|
|
|
|
public static Vector3 Sphere( Vector2 uv )
|
|
{
|
|
uv = uv * 2.0f - Vector2.One;
|
|
var position = new Vector3( uv.X, 0, uv.Y );
|
|
var absolute = position.Abs();
|
|
position.Y = 1.0f - absolute.X - absolute.Z;
|
|
|
|
if ( position.Y < 0 )
|
|
{
|
|
var sign = position.Sign();
|
|
position.X = sign.X * ( 1.0f - absolute.Z );
|
|
position.Z = sign.Z * ( 1.0f - absolute.X );
|
|
}
|
|
|
|
return position;
|
|
}
|
|
|
|
public static Vector3 Map( Vector2 uv, bool sphere )
|
|
{
|
|
var position = sphere ? Sphere( uv ) : Hemisphere( uv );
|
|
|
|
return position.Normalized();
|
|
}
|
|
}
|
|
}
|