深海迷航坐标传送代码_走进 Stencil Buffer 系列 5:Stencil 后处理非递归传送门效果...

02a24f7e9c3d87ff79e4331f89af4664.png

一、前言
“在迟到路上赶路的人,大部分心里想的都不是迟到的原因,而是在想如果有传送门就好了。”

著名哲学家阿创如是说。

然而可惜的是现实中并没有传送门,但不妨碍传送门的身影出现在无数小说、动漫、游戏中(阿创可能也是逻辑家),比如《哆啦 a 梦》里的任意门,还有以传送门为核心玩法的游戏《Portal》。本篇文章将介绍用 Stencil Test 和屏幕后处理制作非递归的传送门效果。

二、实现目标与思路

本篇文章将实现最最基本的的非递归传送门视觉效果,也就是说不支持套娃,不支持物体物理位置的传送转移。(传送门完全体可能等项目做完有时间另开文章补上咕咕咕)

也就是说我们的目标效果就如下图这样,我们在空间 1 能通过传送门 1 看到空间 2 中里面的的内容。

2785ce38bafab3431e06226555c529bc.png

传送门视觉效果示意图

那我们如何实现呢?

在现实世界中我们只有在空间 2 才能看到空间 2 里的内容。那我们可以摆一个替身玩家(虚拟摄像机)到空间 2 来帮我们看。要求替身玩家(虚拟摄像机)相对传送门 2 的位置、旋转 等于 玩家相对传送门 1 的位置、旋转沿 Y 轴旋转 180°。并且看到的内容只能在传送门框框内显示。

5baac5546d45e4b6e31a89f2abefd72e.png

   替身玩家(虚拟摄像机)的摆放

我们来分析一下其中的技术细节:

1. 对于获取相对位置这个要求,是不是有点熟悉咧?没错就是在我们的系列 3:镜面反射中有用到过镜子 Transform.worldToLocalMatrix 矩阵来获得世界坐标转换到镜子局部空间坐标系矩阵。而在 Unity 提供的 API 中也有一个函数 Transform.InverseTransformPoint 可以把某个点位置转化到物体空间坐标系内。

2. 对于获取相对旋转,我们也可以通过 Unity 提供的 API:Quaternion.Inverse(inPortal.transform.rotation) 获得传送门 1 的 rotation 四元数的逆,用其乘于玩家的 rotation 四元数就可以获得玩家相对于传送门 1 为坐标系的相对旋转。

3. 沿 Y 轴旋转 180 度只需要乘于一个 Quaternion.Euler(0.0f,180.0f,0.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值