Unity VR 球体中的倒置视图
Inverted View in VR sphere in Unity
我一直在尝试在 Google Cardboard VR 的翻转法线球内投射 360 度视频。视频工作正常,只是它是水平反转的,只有当屏幕上有一些文字时才会注意到。我已经包含了视频的屏幕截图和它前面的 UI.Text 元素以进行比较。
我试图通过 projectionMatrix 反转相机的视图,但它最终变成空白 space。截图:
我想不出使视频项目正确的方法。请帮忙!
在球体上翻转法线是不够的,您还需要反转 UV 坐标的 U 部分(即,将所有值 U
更改为 1-U
)。设置了一个球体,以便外部从右到左正确呈现文本。当你翻转法线时 "right" 从外面看仍然在右边...这意味着从里面看它在 左边 。
您需要自己手动编辑 UV 坐标,或者从资产商店获取预制倒球体(IIRC 有两个免费提供)。
这是一个正确显示内容而不反转它的着色器,我已经用 Unity 2018.1.1 测试了它,因为我目前在我的项目中使用它:
Shader "InsideVisible" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
Tags { "RenderType"="Opaque" }
Cull front // ADDED BY BERNIE, TO FLIP THE SURFACES
LOD 100
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata_t {
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
};
struct v2f {
float4 vertex : SV_POSITION;
half2 texcoord : TEXCOORD0;
};
sampler2D _MainTex;
float4 _MainTex_ST;
v2f vert (appdata_t v) {
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
// ADDED BY BERNIE:
v.texcoord.x = 1 - v.texcoord.x;
o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
return o;
}
fixed4 frag (v2f i) : SV_Target {
fixed4 col = tex2D(_MainTex, i.texcoord);
return col;
}
ENDCG
}
}
}
如果您需要有关着色器的更多信息,可以查看 this tutorial。
我一直在尝试在 Google Cardboard VR 的翻转法线球内投射 360 度视频。视频工作正常,只是它是水平反转的,只有当屏幕上有一些文字时才会注意到。我已经包含了视频的屏幕截图和它前面的 UI.Text 元素以进行比较。
我试图通过 projectionMatrix 反转相机的视图,但它最终变成空白 space。截图:
我想不出使视频项目正确的方法。请帮忙!
在球体上翻转法线是不够的,您还需要反转 UV 坐标的 U 部分(即,将所有值 U
更改为 1-U
)。设置了一个球体,以便外部从右到左正确呈现文本。当你翻转法线时 "right" 从外面看仍然在右边...这意味着从里面看它在 左边 。
您需要自己手动编辑 UV 坐标,或者从资产商店获取预制倒球体(IIRC 有两个免费提供)。
这是一个正确显示内容而不反转它的着色器,我已经用 Unity 2018.1.1 测试了它,因为我目前在我的项目中使用它:
Shader "InsideVisible" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
Tags { "RenderType"="Opaque" }
Cull front // ADDED BY BERNIE, TO FLIP THE SURFACES
LOD 100
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata_t {
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
};
struct v2f {
float4 vertex : SV_POSITION;
half2 texcoord : TEXCOORD0;
};
sampler2D _MainTex;
float4 _MainTex_ST;
v2f vert (appdata_t v) {
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
// ADDED BY BERNIE:
v.texcoord.x = 1 - v.texcoord.x;
o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
return o;
}
fixed4 frag (v2f i) : SV_Target {
fixed4 col = tex2D(_MainTex, i.texcoord);
return col;
}
ENDCG
}
}
}
如果您需要有关着色器的更多信息,可以查看 this tutorial。