Unity中Shader面片一直面向摄像机

文章目录

  • 前言
  • 一、实现思路
    • 1、 我们要实现模型面片一直跟着摄像机旋转,那么就需要用到旋转矩阵
    • 2、确定 原坐标系 和 目标坐标系
    • 3、确定旋转后坐标系基向量
  • 二、确定旋转后 坐标系基向量 在 原坐标系 下的值
    • 1、Z轴基向量
    • 2、假设Y轴基向量 和 世界空间下 的Y轴方向一致竖直向上
    • 3、X轴基向量
    • 4、Y轴基向量
  • 三、顶点应用旋转
    • 法一:向量乘法
    • 法二:矩阵乘法
    • 最后转化到齐次裁剪空间
  • 四、最终效果
    • 最终测试代码


前言

在之前的文章中,我们实现了Shader的序列帧动画。

  • Unity中Shader序列帧动画(总结篇)

但是,我们会发现,我们的面片不会一直面向摄像机,当摄像机移动时,人物或特效就会出现穿帮的效果。所以,我们接下来就来实现让我们的面片面向摄像机。

类似的功能,还可能用于:特效、公告牌、八方旅人风格效果、饥荒风格效果。


一、实现思路

1、 我们要实现模型面片一直跟着摄像机旋转,那么就需要用到旋转矩阵

  • Unity中Shader旋转矩阵(二维旋转矩阵)
  • Unity中Shader旋转矩阵(四维旋转矩阵)
  • Unity中Shader矩阵变换的几何体现

2、确定 原坐标系 和 目标坐标系

  • 原坐标系 就是模型的本地坐标
    在这里插入图片描述
  • 目标坐标系
    因为我们的面片需要一直朝向摄像机。
    所以,可以确定旋转后的坐标系Z轴方向 需要 和 原模型本地空间坐标系原点 指向 摄像机 方向一致。
    在这里插入图片描述

3、确定旋转后坐标系基向量


二、确定旋转后 坐标系基向量 在 原坐标系 下的值

1、Z轴基向量

  • 求 摄像机坐标 在模型本地空间下的坐标值,在 归一化后 就是 Z轴基向量

float3 viewDir = mul(GetWorldToObjectMatrix(),float4(_WorldSpaceCameraPos,1)).xyz;

2、假设Y轴基向量 和 世界空间下 的Y轴方向一致竖直向上

在这里插入图片描述

float3 upDir = float3(0,1,0);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/611889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go study twoday

交换两个数值 package mainimport "fmt"func main() {var num1 intvar num2 float32fmt.Println("请输入一个整数:")if _, err : fmt.Scanln(&num1); err ! nil {fmt.Println("输入错误:", err)return}fmt.Println(&q…

基于51单片机的蓄水池液位无人监测与自动调节系统设计

设计并实现基于51单片机的蓄水池液位无人监测与自动调节系统是一篇工程实践性很强的技术论文,以下是一个可能的论文提纲示例: **标题:** 基于51单片机的智能蓄水池液位监测与自动调节系统设计 **摘要:** 本文针对蓄水池液位实时…

在 ESP-IDF 环境下,使用标准 C 扩展 Micropython 模块

在 ESP-IDF 环境下,使用标准 C 扩展 Micropython 模块 源码地址 : https://gitee.com/Mars.CN/micropython_extend_example 一、 安装 ESP-IDF 环境 在其他课程中讲过,这里不再赘述,有机会再出教程吧,但需要注意的是…

全网独家:基于openEuler-20.03-LTS-SP4底包构建opengaussV5.0.1LTS的单机极简版数据库容器

本文尝试基于openEuler-20.03-LTS-SP4底包构建opengaussV5.0.1LTS的单机版极简版数据库容器。 一、软件包源 1、openEuler-20.03-LTS容器底包 openEuler-20.03-LTS-SP4 下载链接 sha256:24d8f51c1f3a79eb975c4e498cadd9055bfd708d66c15935ec46664d0f975a7b openEuler-dock…

QT上位机开发(键盘绘图控制)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 绘图是qt很基础的一个功能。通常,我们进行qt绘图的时候,一般会先创建一个qt view,这个相当于视图。接着创建一个…

YOLOv5改进 | 主干篇 | EfficientNetV2均衡缩放网络改进特征提取层

一、本文介绍 这次给大家带来的改进机制是EfficientNetV2,其在其V1版本通过均衡地缩放网络的深度、宽度和分辨率,以提高卷积神经网络的性能的基础上,又提出了一种改进的渐进式学习方法,通过在训练过程中逐步增加图像尺寸并适应性调整正则化来加快训练速度,同时保持准确性…

TinyLog iOS v3.0接入文档

1.背景 为在线教育部提供高效、安全、易用的日志组件。 2.功能介绍 2.1 日志格式化 目前输出的日志格式如下: 日志级别/[YYYY-MM-DD HH:MM:SS MS] TinyLog-Tag: |线程| 代码文件名:行数|函数名|日志输出内容触发flush到文件的时机: 每15分钟定时触发…

SQL SERVER 不拼接SQL如何条件查询

遇到条件查询,比如用户可以在界面上选择想要查询的条件。 我们常用的方法是拼接SQL,如下: declare id int, SQL NVARCHAR(50) set SQL select * from user where 11 if id is not null beginset SQL SQL and id id end 但是如果需…

【前端】使用javascript开发一个在线RGB颜色转换

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是是《前端》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌…

WebGL在实验室方向的应用

WebGL在实验室方向的应用涉及到实验过程的可视化、数据分析、模拟等方面。以下是一些WebGL在实验室领域的应用示例,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.分子模型和化学反应模拟&#xff…

Microsoft To-Do使用经验分享,使用Microsoft To-Do更好的规划自己的目标

为什么使用Microsoft To-Do 很久之前尝试使用过onenote,有道云笔记,印象笔记,小米便签等管理自己的日程,有一定的作用,但是功能过于简单或者冗余,没有达到时间管理的目的,没有办法坚持下来,通过…

C++类与对象基础(8)

目录 1. 隐式类型转换与关键字explicit: 1.1 隐式类型转换举例: 1.2 explicit关键字: 2. 友元: 2.1 友元函数: 2.2 友元类: 3. 内部类: 4. 勘误: 1. 隐式类型转换与关键字explicit: 1.1…

网安入门12-文件上传(黑白名单,00截断)

黑名单绕过 Pass-03 有的时候后端限制了一些黑名单,比如过滤后缀名.php 我们就可以用黑名单里没有的后缀名进行绕过,例如: 大小写:.phP .pHp .AsPphp1 .php2 .php3 .php9 .phtml(成功率较高)特殊文件名绕…

使用kennycason.kumo.WordCloud For JAVA 制作词云图

官网&#xff1a;https://kennycason.com/posts/2014-07-03-kumo-wordcloud.html 一&#xff1a;添加POM文件 <!-- 词云 --><dependency><groupId>com.kennycason</groupId><artifactId>kumo-core</artifactId><version>1.27<…

网络安全导论知识要点

主观题&#xff1a; 特洛伊木马&#xff1a; 特洛伊木马&#xff08;木马是计算机中的一个程序&#xff09;&#xff1a;植入目标&#xff08;客户端&#xff09;----木马&#xff08;在有网时候&#xff09;连接控制端&#xff0c;跳板机----跳板机反馈给backer----backer再…

CHS_01.1.4+操作系统体系结构 一

CHS_01.1.4操作系统体系结构 一 操作系统的体系结构 也就是操作系统的内核应该怎么设计这样一个问题操作系统的内核 在这个小节中 我们会学习 操作系统的体系结构 也就是操作系统的内核应该怎么设计这样一个问题 那这个小节的内容我们只需要做简要的了解就可以了 我们考试中常考…

Ubuntu系统中查看内存使用情况

在Ubuntu系统中&#xff0c;你可以使用以下命令来查看内存使用情况&#xff1a; free -m&#xff1a;这个命令会以MB为单位显示内存使用情况。它会显示总内存、已用内存、空闲内存和缓冲/缓存的内存。top&#xff1a;这是一个动态的查看内存和CPU使用情况的工具。它会实时更新…

Day3Qt

1. &#xff08;1&#xff09;完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 …

C++并发编程实战第2版笔记

文章目录 p19 某个线程只可以join()一次p22 只有当joinable()返回true时才能调用detach()P21 在std::thread对象析构前&#xff0c;必须明确是等待还是分离线程P25 移动语义P25 将类的成员函数设定为线程函数 p19 某个线程只可以join()一次 只要调用了join()&#xff0c;隶属于…

概述:利用大模型 (LLMs) 解决信息抽取任务

论文标题&#xff1a;Large Language Models for Generative Information Extraction: A Survey 论文链接&#xff1a;https://arxiv.org/pdf/2312.17617.pdf 论文主要探讨了大型语言模型&#xff08;LLMs&#xff09;在生成式信息抽取&#xff08;IE&#xff09;任务中的应用…