61 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			61 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								using System.Collections;
							 | 
						||
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						||
| 
								 | 
							
								using Godot;
							 | 
						||
| 
								 | 
							
								using System;
							 | 
						||
| 
								 | 
							
								using System.Linq;
							 | 
						||
| 
								 | 
							
								using System.Threading.Tasks;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Rokojori
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  [Tool]
							 | 
						||
| 
								 | 
							
								  [GlobalClass]
							 | 
						||
| 
								 | 
							
								  public partial class PixelDensityTool:Node
							 | 
						||
| 
								 | 
							
								  { 
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public float fovDegrees = 60;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public Vector2 screenSize = new Vector2( 1920, 1080 );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public float startDistance = 1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public float endDistance = 4000;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public int numEntries = 20;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public float densityTablePower = 2;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [ExportToolButton( "Compute Pixel Density Tables")]
							 | 
						||
| 
								 | 
							
								    public Callable ExecuteButton => Callable.From( () => 
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      var list = new List<string>();
							 | 
						||
| 
								 | 
							
								      for ( int i = 0; i < numEntries; i++ )
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        var t = i / ( float ) ( numEntries - 1f );
							 | 
						||
| 
								 | 
							
								        t = Mathf.Pow( t, densityTablePower );        
							 | 
						||
| 
								 | 
							
								        var distance = Mathf.Lerp( startDistance, endDistance, t );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        var pixelDensity = Cameras.ComputePixelDensityVertical( fovDegrees, distance, screenSize );
							 | 
						||
| 
								 | 
							
								        var minSize = 1f / pixelDensity;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        list.Add( "[" + distance._M()+ "] density: " + pixelDensity._FF() + "px/m  -  size:" + ( minSize < 1 ? minSize._CM() :  minSize._M() ) + " " );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      distanceToPixelSize = list.ToArray();
							 | 
						||
| 
								 | 
							
								    } 
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public string[] distanceToPixelSize;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  } 
							 | 
						||
| 
								 | 
							
								}
							 |