Unity3d 在Unity中,如何使网格成为“a”;门户网站;或显示底层图像的裁剪
在Unity中,我想创建一种效果,其中任意形状(四边形或立方体)充当显示图像的“入口”。无论对象以何种方式旋转,或者摄影机透视图是什么,“入口内”的图像始终面向同一方向 在这张图像中,我有一个3D平面,它显示了棋盘格图案纹理,就像场景中的一个切口。无论以何种方式旋转平面对象或放置摄影机,门户内的图像都保持完全固定。内部图像不会移动或扭曲Unity3d 在Unity中,如何使网格成为“a”;门户网站;或显示底层图像的裁剪,unity3d,Unity3d,在Unity中,我想创建一种效果,其中任意形状(四边形或立方体)充当显示图像的“入口”。无论对象以何种方式旋转,或者摄影机透视图是什么,“入口内”的图像始终面向同一方向 在这张图像中,我有一个3D平面,它显示了棋盘格图案纹理,就像场景中的一个切口。无论以何种方式旋转平面对象或放置摄影机,门户内的图像都保持完全固定。内部图像不会移动或扭曲 我希望能够对场景中的多个对象执行此操作。所以一个球体可以是一个固定的狗图片的入口,或者一个立方体可以是一个平铺图案的入口。即使知道这种效应的名称也会有所帮助。
我希望能够对场景中的多个对象执行此操作。所以一个球体可以是一个固定的狗图片的入口,或者一个立方体可以是一个平铺图案的入口。即使知道这种效应的名称也会有所帮助。是否必须编写着色器才能执行此操作?这称为屏幕空间着色器。大多数着色器将根据像素在网格上的位置计算uv坐标,这些着色器使用屏幕上的位置。这里有一个关于他们的例子 热提示:这通常与渲染到渲染器的第二个摄影机一起使用,以便创建三维空间的入口 您可能需要使用平铺来获得正确的纹理纵横比,此着色器假定它与屏幕相同,即16:9
Shader "Ahoy/Screen Space Texture"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
Tags { "Queue"="Transparent" "RenderType"="Transparent"}
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD0;
float4 screenPos:TEXCOORD1;
};
sampler2D _MainTex;
float4 _MainTex_ST;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
o.screenPos = ComputeScreenPos(o.vertex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
float2 uvScreen = i.screenPos.xy / i.screenPos.w;
uvScreen = TRANSFORM_TEX(uvScreen,_MainTex);
return tex2D(_MainTex, uvScreen);
}
ENDCG
}
}
}
您需要编写一个着色器,但它相当简单。听起来你想要的是相对于屏幕而不是“世界”固定的“背景”图像。你要寻找的术语是“屏幕空间纹理”(或UV)。