任意门效果
来源:互联网 发布:万达网络信贷公司 编辑:程序博客网 时间:2024/05/21 13:22
这是一个模拟机器猫里面的任意门的显示效果,即通过门可以看到千里之外的地方,而门边缘以外的地方则仍然是眼前的场景,废话不说,先上效果图:
这里就不讲一个个制作的步骤了,主要讲一下原理以及相应的代码实现吧,理解了原理就很容易做出来了。
其实就是用一个保持与主相机一致的附属相机观察另一个场景,将画面输出都一个rendertexture中,然后把这个观察出来的纹理实时绘制到门上。难点就在于纹理的映射上,如何能够准确的把照相机纹理映射到门框,没有任何赘余。
using System.Collections;using System.Collections.Generic;using UnityEngine;public class main : MonoBehaviour {public Camera m_cam;public Material m_mat;// Use this for initializationvoid Start () {m_mat.SetMatrix ("_WorldToCameraMatrix", m_cam.worldToCameraMatrix);m_mat.SetMatrix ("_ProjectionMatrix", m_cam.projectionMatrix);}// Update is called once per framevoid Update () {m_mat.SetMatrix ("_WorldToCameraMatrix", m_cam.worldToCameraMatrix);m_mat.SetMatrix ("_ProjectionMatrix", m_cam.projectionMatrix);}}以上代码把观察远处场景的照相机(以下称为相机b)的投影矩阵以及世界转相机矩阵传入了下方的着色器中:
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'Shader "Hidden/Door"{Properties{_MainTex("Texture", 2D) = "white" {}}SubShader{Tags{"Queue" = "Transparent+100"}zwrite offPass{Blend SrcAlpha OneMinusSrcAlphaCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"uniform float4x4 _WorldToCameraMatrix;uniform float4x4 _ProjectionMatrix;struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;};v2f vert(appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);float4 worldCoord = mul(unity_ObjectToWorld, v.vertex);float4 cameraCoord = mul(_WorldToCameraMatrix, worldCoord);float4 projectionCoord = mul(_ProjectionMatrix, cameraCoord);o.uv = projectionCoord / projectionCoord.w;o.uv = 0.5f*o.uv + float2(0.5f, 0.5f);return o;}sampler2D _MainTex;fixed4 frag(v2f i) : SV_Target{float dis = (i.uv.x - 0.5f)*(i.uv.x - 0.5f) + (i.uv.y - 0.5f)*(i.uv.y - 0.5f);fixed4 col = tex2D(_MainTex, i.uv);return col;}ENDCG}}}
上面shader代码做的就是把模型(门)在相机b中的投影和相机的拍摄的纹理坐标相互对应。
阅读全文
0 0
- 任意门效果
- 在Button任意位置加图片效果
- 任意模型的折纸效果 Folding effect
- 任意View的跑马灯效果
- 在Button任意位置加图片效果
- android任意view的跑马灯效果
- 一个干货任意门
- 在C#用GDI+实现图形图像的任意变形效果?
- 任意形状窗体生成器(窗体有置顶效果)
- android中在Button任意位置加图片效果
- 为任意自定义的View隐藏时添加动画效果
- 采用Spanned在android View任意位置加图片效果
- android任意view爆炸效果--第三方开源--ExplosionField
- Android动画效果(一) 任意两点间的抛物线动画
- 采用Scroller实现任意布局的上下左右弹性效果
- Shimmer–为应用任意视图添加闪烁效果
- 采用Scroller实现任意布局的上下左右弹性效果
- 让任意view具有滑动效果的SlideUp
- Java设计模式之中介者模式
- 【Python】 sorted函数
- WPF--MVVM之DataGrid数据源绑定
- 一部Web应用自动化部署的进化史[AWS]-使用shell实现CodeDeploy
- No resource identifier found for attribute 'roundIcon' in package
- 任意门效果
- 2017-9-20 1-N维护
- dwg文件转为dxf的格式怎么转
- 第三周项目一2
- 归纳下spring+maven+mybatis的使用
- LeetCode 392. Is Subsequence
- cocos2dx 项目中增加libcurl库
- 使用docker oracle 容器作为开发数据库服务器
- kohana 伪静态的htaccess设置