这将是我关于正在进行的 VR 项目的第二个问题。
我正在制作一个 photosphere 纸板应用程序。
我添加了一个球体,在其中,我将主摄像机放置在 0,0,0 位置。
在立方体内部,我放置了一个 3d 立方体。如果用户凝视它特定的几秒钟,球体上的等距矩形纹理将通过脚本改变。
现在我在这个项目中使用 GvrReticlePointer,我似乎无法在任何地方找到白点,除非它在 3d 立方体上。我真的很想知道是什么导致标线在现场消失以及如何修复它。
提前致谢。
这将是我关于正在进行的 VR 项目的第二个问题。
我正在制作一个 photosphere 纸板应用程序。
我添加了一个球体,在其中,我将主摄像机放置在 0,0,0 位置。
在立方体内部,我放置了一个 3d 立方体。如果用户凝视它特定的几秒钟,球体上的等距矩形纹理将通过脚本改变。
现在我在这个项目中使用 GvrReticlePointer,我似乎无法在任何地方找到白点,除非它在 3d 立方体上。我真的很想知道是什么导致标线在现场消失以及如何修复它。
提前致谢。
自己回答这个问题!
只需使用此着色器。奇迹般有效!
Shader "Custom/Equirectangular" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_MainTex ("Diffuse (RGB) Alpha (A)", 2D) = "gray" {}
}
SubShader{
Pass {
Cull Front
Tags {"LightMode" = "Always"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#pragma glsl
#pragma target 3.0
#include "UnityCG.cginc"
struct appdata {
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct v2f
{
float4 pos : SV_POSITION;
float3 normal : TEXCOORD0;
};
v2f vert (appdata v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.normal = v.normal;
return o;
}
sampler2D _MainTex;
#define PI 3.141592653589793
inline float2 RadialCoords(float3 a_coords)
{
float3 a_coords_n = normalize(a_coords);
float lon = atan2(a_coords_n.z, a_coords_n.x);
float lat = acos(a_coords_n.y);
float2 sphereCoords = float2(lon, lat) * (1.0 / PI);
//return float2(sphereCoords.x * 0.5 + 0.5, 1 - sphereCoords.y);
return float2(1 - (sphereCoords.x * 0.5 + 0.5), 1 - sphereCoords.y);
}
float4 frag(v2f IN) : COLOR
{
float2 equiUV = RadialCoords(IN.normal);
return tex2D(_MainTex, equiUV);
}
ENDCG
}
}
FallBack "VertexLit"
}