全景图(二):在Unity3D上实现360°柱面投影

全景图(一):使用Unity完成水晶球纹理贴图 建立的工程基础之上,做修改。


步骤:

1、把上次创建好的水晶球移走,放到一个不妨碍观察的地方。

2、创建一个圆柱体,位置设为(0,1.5,0),比例设为(2,0,5,2)。
注:比例的设置和作为纹理映射的图像的宽高比有关,Unity中默认的圆柱体是2个单位高度以及1个单位宽度。

3、在圆柱体的Inspector面板中禁用Capsule Collider组件。

4、将图片作为纹理,拖到圆柱体上。

5、在圆柱体的Inspector面板中,第4步导入的纹理材质组件上,点击菜单Shader|Custom|InwardShader。

注:这个渲染器就是让纹理渲染在其内表面,需要自己定制,写入一个渲染定义文件。这个文件在后面给出。

6、将绑定相机的空对象放置在圆柱体内,并旋转圆柱体观察不同方向视野。


渲染器定义文件

InwardShader.shader:

Shader "Custom/InwardShader" {
  Properties {
    _MainTex ("Albedo (RGB)", 2D) = "white" {}
  }
  SubShader {
    Tags { "RenderType"="Opaque" }
    LOD 200
    
    Cull Front

    CGPROGRAM
    #pragma surface surf Standard vertex:vert

    void vert(inout appdata_full v) {
      v.normal.xyz = v.normal * -1;
    }

    sampler2D _MainTex;

    struct Input {
      float2 uv_MainTex;
    };

    void surf (Input IN, inout SurfaceOutputStandard o) {
      fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
      o.Albedo = c.rgb;
    }
    ENDCG
  } 
  FallBack "Diffuse"
}

Unity shader是一个文本脚本文件,包含一些Unity渲染流水线动作的指令。我们自定义的shader命名为InwardShader。

它有一个Property面板—Albedo纹理可以在Unity的编辑器中设置。

我们把Cull模式设置成Font(选项有Back,Font和Off);单词cull的意思是“需要被移除或忽略”。这样,它将忽略前方表面的渲染。

我们还要反转每个面的法向量(v.normal.xyz=v.normal*-1)用于光照计算。

surf()采样函数由Unity的渲染器调用,应用shader中定义的属性,在这里是仅有的主要纹理图片。


给圆柱体添加旋转脚本

跟上个博客中水晶球添加旋转控制如出一辙,旋转脚本是一样的。


准备好的作为纹理的图像

这里写图片描述


全景效果

这里写图片描述

这里写图片描述


其它示例

这里写图片描述
注:提供的图像并未覆盖360°,所以圆柱体表面有一条纵线。

这里写图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值