You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			80 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
//======= Copyright (c) Valve Corporation, All rights reserved. ===============
 | 
						|
// UNITY_SHADER_NO_UPGRADE
 | 
						|
Shader "Custom/SteamVR_SphericalProjection" {
 | 
						|
	Properties {
 | 
						|
		_MainTex ("Base (RGB)", 2D) = "white" {}
 | 
						|
		_N ("N (normal of plane)", Vector) = (0,0,0,0)
 | 
						|
		_Phi0 ("Phi0", Float) = 0
 | 
						|
		_Phi1 ("Phi1", Float) = 1
 | 
						|
		_Theta0 ("Theta0", Float) = 0
 | 
						|
		_Theta1 ("Theta1", Float) = 1
 | 
						|
		_UAxis ("uAxis", Vector) = (0,0,0,0)
 | 
						|
		_VAxis ("vAxis", Vector) = (0,0,0,0)
 | 
						|
		_UOrigin ("uOrigin", Vector) = (0,0,0,0)
 | 
						|
		_VOrigin ("vOrigin", Vector) = (0,0,0,0)
 | 
						|
		_UScale ("uScale", Float) = 1
 | 
						|
		_VScale ("vScale", Float) = 1
 | 
						|
	}
 | 
						|
 | 
						|
	CGINCLUDE
 | 
						|
 | 
						|
	#include "UnityCG.cginc"
 | 
						|
 | 
						|
	sampler2D _MainTex;
 | 
						|
	float4 _N;
 | 
						|
	float _Phi0, _Phi1, _Theta0, _Theta1;
 | 
						|
	float4 _UAxis, _VAxis;
 | 
						|
	float4 _UOrigin, _VOrigin;
 | 
						|
	float _UScale, _VScale;
 | 
						|
 | 
						|
	struct v2f {
 | 
						|
		float4 pos : SV_POSITION;
 | 
						|
		float2 tex : TEXCOORD0;
 | 
						|
	};
 | 
						|
 | 
						|
	v2f vert(appdata_base v) {
 | 
						|
		v2f o;
 | 
						|
#if UNITY_VERSION >= 540
 | 
						|
		o.pos = UnityObjectToClipPos(v.vertex);
 | 
						|
#else
 | 
						|
		o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
 | 
						|
#endif
 | 
						|
		o.tex = float2(
 | 
						|
			lerp(_Phi0, _Phi1, v.texcoord.x),
 | 
						|
			lerp(_Theta0, _Theta1, v.texcoord.y));
 | 
						|
		return o;
 | 
						|
	}
 | 
						|
 | 
						|
	float3 cartesian(float phi, float theta)
 | 
						|
	{
 | 
						|
		float sinTheta = sin(theta);
 | 
						|
		return float3(
 | 
						|
			sinTheta * sin(phi),
 | 
						|
			cos(theta),
 | 
						|
			sinTheta * cos(phi));
 | 
						|
	}
 | 
						|
 | 
						|
	float4 frag(v2f i) : COLOR {
 | 
						|
		float3 V = cartesian(i.tex.x, i.tex.y);
 | 
						|
		float3 P = V / dot(V, _N.xyz); // intersection point on plane
 | 
						|
		float2 uv = float2(
 | 
						|
			dot(P - _UOrigin.xyz, _UAxis.xyz) * _UScale,
 | 
						|
			dot(P - _VOrigin.xyz, _VAxis.xyz) * _VScale);
 | 
						|
		return tex2D(_MainTex, uv);
 | 
						|
	}
 | 
						|
 | 
						|
	ENDCG
 | 
						|
 | 
						|
	SubShader {
 | 
						|
		Pass {
 | 
						|
			ZTest Always Cull Off ZWrite Off
 | 
						|
			Fog { Mode Off }
 | 
						|
 | 
						|
			CGPROGRAM
 | 
						|
			#pragma vertex vert
 | 
						|
			#pragma fragment frag
 | 
						|
			ENDCG
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |