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();
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |