Unity中Shader观察空间推导

文章目录

  • 前言
  • 一、本地空间怎么转化到观察空间
  • 二、怎么得到观察空间的基向量
    • 1、Z轴向量
    • 2、假设 观察空间的 Y~假设~ = (0,1,0)
    • 3、X = Y 与 Z 的叉积
    • 4、Y = X 与 Z 的叉积
  • 三、求 [V~world~]^T^
    • 1、求V~world~
    • 2、求[V~world~]^T^
  • 四、求出最后在Unity中使用的公式
    • 1、偏移坐标轴
    • 2、把 平移的坐标 构建成之前文章中使用的 平移矩阵
    • 3、化简我们的矩阵


前言

在上一篇文章中,我们推演了矩阵几何计算。

  • Unity中Shader矩阵变换的几何体现

在这篇文章中,我们来推导一下 观察空间(摄像机空间)。


一、本地空间怎么转化到观察空间

可以根据上篇文章的推导得出:

  • 在两个不同角度坐标系下的坐标信息转化可以由如下公式算出。

Pview = [Wview] * Pworld

[Wview] = [Vworld]-1 = [Vworld]T

Pview = [Vworld]T * Pworld

  • Pview顶点在观察空间下的坐标
  • Pworld顶点在世界空间下的坐标
  • Wview世界空间的基向量 在 观察空间下的矩阵
  • Vworld观察空间的基向量 在 世界空间下的矩阵

二、怎么得到观察空间的基向量

  • 我们的观察空间使用的是右手坐标系
    在这里插入图片描述

在这里插入图片描述

1、Z轴向量

  • Z轴正方向是从 模型顶点 指向 摄像机 方向
  • Z = ViewPos - ViewTarget
    请添加图片描述
    现在只知道 Z轴,还需要求 X Y轴。

2、假设 观察空间的 Y假设 = (0,1,0)

  • X = Y 与 Z 的叉积
  • Y = X 与 Z 的叉积

在这里插入图片描述

3、X = Y 与 Z 的叉积

请添加图片描述

4、Y = X 与 Z 的叉积

请添加图片描述
最后,得到的就是 视图空间坐标轴方向上的向量,归一化后即可作为基向量使用


三、求 [Vworld]T

1、求Vworld

  • 把基向量一列一列的写来排列得到 Vworld

V   w o r l d X x   V   w o r l d Y x   V   w o r l d Z x   V   w o r l d X y   V   w o r l d Y y   V   w o r l d Z y   V   w o r l d X z   V   w o r l d Y z   V   w o r l d Z z   \begin{matrix} V~worldXx~&V~worldYx~&V~worldZx~\\ V~worldXy~&V~worldYy~&V~worldZy~\\ V~worldXz~&V~worldYz~&V~worldZz~\\ \end{matrix} V worldXx V worldXy V worldXz V worldYx V worldYy V worldYz V worldZx V worldZy V worldZz 

2、求[Vworld]T

这里原本是求逆矩阵,但是基向量矩阵是正交矩阵,所以逆矩阵 = 转置矩阵

V   w o r l d X x   V   w o r l d X y   V   w o r l d X z   V   w o r l d Y x   V   w o r l d Y y   V   w o r l d Y z   V   w o r l d Z x   V   w o r l d Z y   V   w o r l d Z z   \begin{matrix} V~worldXx~&V~worldXy~&V~worldXz~\\ V~worldYx~&V~worldYy~&V~worldYz~\\ V~worldZx~&V~worldZy~&V~worldZz~\\ \end{matrix} V worldXx V worldYx V worldZx V worldXy V worldYy V worldZy V worldXz V worldYz V worldZz 


四、求出最后在Unity中使用的公式

  • Pview = [Vworld]T * Pworld

1、偏移坐标轴

在之前的步骤中,我们只完成坐标系的旋转转化。
但是,我们的 观察空间 和 世界空间 的原点不在同一地方。
所以,需要进行平移变换

在这里插入图片描述

2、把 平移的坐标 构建成之前文章中使用的 平移矩阵

1 0 0 − T   x   0 1 0 − T   y   0 0 1 − T   z   0 0 0 1 \begin{matrix} 1&0&0&-T~x~\\ 0&1&0&-T~y~\\ 0&0&1&-T~z~\\ 0&0&0&1\\ \end{matrix} 100001000010T x T y T z 1

  • 则我们的公式会变成如下样子:
    在这里插入图片描述

3、化简我们的矩阵

在这里插入图片描述

  • 这两个矩阵相乘,最后的一列的结果,可以化简为:

− ( V   w o r l d X   d o t T ) − ( V   w o r l d Y   d o t T ) − ( V   w o r l d Z   d o t T ) 1 \begin{matrix} -(V~worldX~ dot T) \\ -(V~worldY~ dot T) \\ -(V~worldZ~ dot T) \\ 1\\ \end{matrix} (V worldX dotT)(V worldY dotT)(V worldZ dotT)1

  • 最后,公式化简为:
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[每周一更]-(第31期):Mysql安装汇总

写自:20230204 23:25 一. mysql rpm二进制包 rpm -Uvh http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm yum install mysql-community-server service mysqld start set password password(“123456”)二. mysql yum安装 1、安装查看有没有安装…

企业级“RAS”的数据平台如何炼成?

从“看报表”到“数据分析结果直接投入运营”,数字化正在深入企业经营,数据系统正在成为核心生产系统。相应的,企业对“作业挂了”、“系统崩了”、“算不出来”的容忍度越来越低——只有足够稳定、可靠、专业的数据系统,才能及时…

智能优化算法应用:基于社交网络算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于社交网络算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于社交网络算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.社交网络算法4.实验参数设定5.算法结果6.…

el-select 全选

<template><div class"container"><el-selectv-model"choosedList"clearablemultiplecollapse-tagsplaceholder"请选择"change"select_Change"><div style"padding: 0 20px; line-height: 34px">&l…

机器学习算法(11)——集成技术(Boosting——梯度提升)

一、说明 在在这篇文章中&#xff0c;我们学习了另一种称为梯度增强的集成技术。这是我在机器学习算法集成技术文章系列中与bagging一起介绍的一种增强技术。我还讨论了随机森林和 AdaBoost 算法。但在这里我们讨论的是梯度提升&#xff0c;在我们深入研究梯度提升之前&#xf…

Python实现AR协方差结构线性回归模型(GLSAR算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 GLSAR是具有AR协方差结构的广义最小二乘法线性回归模型。 本项目通过GLSAR回归算法来构建AR协方差结构…

RocketMQ实践:确保消息不丢失与顺序性的高效策略

一、使用RocketMQ如何保证消息不丢失&#xff1f; 这个是在面试时&#xff0c;关于MQ&#xff0c;面试官最喜欢问的问题。这个问题是所有MQ都需要面对的一个共性问 题。大致的解决思路都是一致的&#xff0c;但是针对不同的MQ产品又有不同的解决方案。分析这个问题要从以 下几…

02|用LangChain快速构建基于“易速鲜花”本地知识库的智能问答系统

02&#xff5c;用LangChain快速构建基于“易速鲜花”本地知识库的智能问答系统 项目及实现框架 我们先来整体了解一下这个项目。 项目名称&#xff1a;“易速鲜花”内部员工知识库问答系统。 项目介绍&#xff1a;“易速鲜花”作为一个大型在线鲜花销售平台&#xff0c;有自…

基于java的病房管理系统论文

摘 要 当下&#xff0c;如果还依然使用纸质文档来记录并且管理相关信息&#xff0c;可能会出现很多问题&#xff0c;比如原始文件的丢失&#xff0c;因为采用纸质文档&#xff0c;很容易受潮或者怕火&#xff0c;不容易备份&#xff0c;需要花费大量的人员和资金来管理用纸质文…

Linux多线程

目录 一、Linux线程概念1.1 什么是线程&#xff1f;1.2 线程的优点1.3 线程的缺点1.4 线程异常1.5 线程用途1.6 进程VS线程1.7 关于进程和线程的问题 二、Linux线程控制2.1 POSIX线程库2.2 创建线程2.3 线程ID及进程地址空间布局 三、Linux线程终止四、线程等待4.1 为什么需要线…

MySQL——复合查询

目录 一.基本查询回顾 二. 多表查询 三.自连接 四.子查询 1.单行子查询 2.多行子查询 3.多列子查询 4.在from子句中使用子查询 5.合并查询 一.基本查询回顾 准备数据库&#xff1a; 查询工资高于500或岗位为MANAGER的雇员&#xff0c;同时还要满足他们的姓名首字母为…

stm32项目(14)——基于stm32f103zet6的循迹避障小车

1.功能设计 stm32循迹避障小车&#xff0c;使用超声波测距&#xff0c;使用红外循迹模块追踪黑线&#xff0c;实现循迹功能。此外&#xff0c;还可以检测烟雾、火焰、人体、温湿度。温湿度显示在LCD屏幕上。检测到有人、有火焰、有烟雾时&#xff0c;蜂鸣器报警&#xff01; 功…

ESP32运行MicroPython——环境搭建

1、准备工作 硬件&#xff1a;ESP32-DevKitC V4 开发板、USB串口线 软件&#xff1a; flash_download_tool_3.9.5&#xff08;乐鑫烧录工具&#xff09;、官方下载地址 CP210x&#xff08;USB驱动程序&#xff09;、官方下载地址 ESP32_GENERIC-20231005-v1.21.0.bin&#xff…

串口通信(7)-C#串口通信通信帮助类实例

本文讲解C#串口通信通信帮助类实例 首先创建winform项目添加界面和控件 UI界面 namespace SerialPortDemo {partial class MainForm{/// <summary>/// 必需的设计器变量。/// </summary>private System.ComponentModel.IContainer components = null;/// <sum…

2024年个人目标制定清单~有没有适合你的那一款

在2024年&#xff0c;个人的生活目标可以有多种多样&#xff0c;这主要取决于个人的价值观、兴趣和生活情况。 个人生活目标&#xff1a; 健康和健身&#xff1a;保持身体健康和良好的心理状态是许多人重要的生活目标。这可能包括定期运动&#xff0c;均衡饮食&#xff0c;以…

MySQL报错:1366 - Incorrect integer value: ‘xx‘ for column ‘xx‘ at row 1的解决方法

我在插入表数据时遇到了1366报错&#xff0c;报错内容&#xff1a;1366 - Incorrect integer value: Cindy for column name at row 1&#xff0c;下面我演示解决方法。 根据上图&#xff0c;原因是Cindy’对应的name字段数据类型不正确。我们在左侧找到该字段所在的grade_6表&…

陪诊软件|北京陪诊系统提升医疗服务无限可能

我们深知陪诊软件搭建系统在医疗服务中的重要性。它不仅可以提高医患沟通的效率&#xff0c;还可以提供更个性化、便捷的服务体验。因此&#xff0c;我们为您搭建的陪诊软件系统集合了丰富的功能&#xff0c;旨在提升您的医疗服务质量。 首先&#xff0c;我们的陪诊软件搭建系统…

1.关于浏览器

一、认识主流浏览器 Chrome谷歌浏览器Safari苹果浏览器Firefox火狐浏览器Opera欧朋浏览器 二、浏览器内核是什么&#xff1f; 三、五大浏览器&#xff0c;四大内核 四、前端做网页开发用什么浏览器&#xff1f; Chrome谷歌浏览器。

JavaWeb笔记之WEB项目

一. 版本控制 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理&#xff0c;是软件配置管理的核心思想之一。 版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地了记录下来。每一次文件的改变&a…

leetCode算法—11. 盛最多水的容器

11.给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 难度&#xff1a;中等 ** 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#x…