【GAMES 101】图形学入门——向量与变换(Vector Transform)

news2024/11/15 3:43:36

一、向量(Vector)

点乘(Dot Product)

  • 定义:计算两个单位向量的夹角
  • 用途:
    • 描述两个向量是否足够接近

叉乘(Cross Product)

  • 定义:用于判断法向量的防线,一般遵循右手螺旋定则,手指指向方向和叉乘向量的顺序相反
  • 用途:
    • 判断叉乘两个向量的左右方向,如a叉乘b与正交坐标系的y轴同向,则a在b的左边
    • 判断点与三角形的位置关系(点P与三角形三个顶点连接的向量相乘,如果结果方向均一致,说明P在三角形内,反之则外)

二、变换(Transform)

  • 变换都基于坐标轴原点来操作
  • 图形图像的变化可以简化成矩阵加减/相乘的形式进行计算
  • 线性变换(Linear Transform):x` = Mx

1. 缩放(Scale)

  • 相关矩阵:【对角矩阵】
  • 矩阵表示:
    在这里插入图片描述

2. 对称/反射(Reflection)

  • 相关矩阵:【单位矩阵】
  • 矩阵表示:
    在这里插入图片描述

3. 切变(Shear)

  • 定义:其中一个方向发生变化,另一方向保持不变
  • 矩阵表示:
    在这里插入图片描述

4. 旋转(Rotation)

  • 相关矩阵:【推导矩阵R】
  • 矩阵表示:
    在这里插入图片描述
  • 负角度旋转:
    在这里插入图片描述

5. 齐次坐标(Homogeneous Coordinates)

  • 用途:在图形学中用于统一所有的变换方式

6. 平移(Translation)

  • 特点:无法仅通过简单的矩阵相乘获取到平移后的位置(因为平移的坐标只和其对应方向的坐标相关,比如x1 =x+Tx而不是 x1=ax+by)
  • 解决方式:新增一个维度
    在这里插入图片描述
  • 矩阵表示:
    • 通过仿射变换(Affine Map)表示:
      在这里插入图片描述

    • 通过齐次坐标(Homogeneous Coordinates)表示:
      在这里插入图片描述

  • 流程:先线性变换,再进行平移
  • 新增维度0、1具体意义:
    • 向量新增维度为0:因为向量平移具有不变性,因此矩阵相乘后不希望发生改变,所以设置为0
    • 点新增维度为1:可以通过向量与点的相加减来下定义
      在这里插入图片描述

7. 逆变换(Inverse Transform)

  • 定义:和变换做相反的操作(如a->b,则逆变换为b->a)

8. 复合变换(Compose Transform)

  • 定义:经过有限次的单个变换操作的总称

9. 分解变换(Decompose Transform)

  • 定义:经过有限次的单个变换操作的总称
  • 用途:用于对一个非原点的图形进行非平移变换
  • 分解特点:先将图形平移回原点,然后经过一系列变换后,再平移回原来的位置

10. 视图变换(Viewing/Camera Transform)

  • 定义:将3D物体转化到3D世界中的2D视图中
  • 流程:
    • 将物体放置于世界坐标系
    • 调整相机的位置到原点
    • 通过投影变换将3D物体映射并以2D形式表现出来
  • 要点:相机、三维物体、投影后的二维平面
  • 相机(Camera)
    • 需要将相机由任一点移动到原点(0,0,0),对应的矩阵变换应该先平移后旋转
    • 由相机所在轴(e,g,t)旋转为(x,y,z)麻烦,可以逆向思维从(x,y,z)旋转到相机所在轴(e,g,t)
      在这里插入图片描述
  • 投影变换(Projection Transform)
    在这里插入图片描述
    • 正交投影(Orthofraphic Projection)
      • 性质:大小始终一致
      • 流程:
        • 将相机设置/移动到原点,看向z轴的负方向,向上为y轴
        • 忽略掉z坐标轴,将得到一个只有x,y轴的2D图形
        • 将2D图形的大小规范化为-1到1
      • 物体:
        • 平移物体中心到原点,然后进行缩放
        • 矩阵计算如下(r为右、l为左、t为上、b为下、n为前/近、f为远/后),左起第一个矩阵为缩放,第二个矩阵为平移
          在这里插入图片描述
    • 透视投影(Perspective Projection)
      • 性质:近大远小、原平行线延长会相交
      • 流程:
        • 将透视投影的四棱锥通过“挤压”成长方体
        • 将挤压后的长方体做正交投影
      • 挤压
        • 因为一个点同乘一个常数,点不变,因此y`=ny
        • 近平面的点经过“挤压”后均不变
        • 远平面的点经过“挤压”后,z方向值不变
          在这里插入图片描述
      • 推导透视投影矩阵
        在这里插入图片描述

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

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

相关文章

C语言:指针和数组(看完拿捏指针和数组)

目录 数组名的理解: 一维数组: 解析: 字符数组: 解析: 解析: 字符串数组: 解析: 解析: 一级指针: 解析: 解析: 二维数组&a…

minion在ubuntu上的搭建步骤

在Ubuntu上搭建MinIO可以按照以下步骤进行: 下载MinIO服务器二进制文件: 通过浏览器访问 https://min.io/download 或使用以下命令获取最新的MinIO二进制文件:wget https://dl.min.io/server/minio/release/linux-amd64/minio赋予二进制文件…

顺序表之初

欢迎来到我的:世界 希望作者的文章对你有所帮助,有不足的地方还请指正,大家一起学习交流 ! 目录 线性表简介顺序表定义动态顺序表的初始化尾插头插Cheak 判断是否增容尾删:头删:打印在pos位置前插入x删除pos位置的值查…

Matlab之智能优化算法函数调用

1.句柄函数 句柄函数即我们要求的目标函数,以下三种算法的调用仅是求解最小值,若要求目标函数的最大值,可在返回结果中加负号。 function value Get_Fitness(x,y)value x^2 y^2;% 若要求x^2 y^2最大值可设value -(x^2 y^2); end句柄函数…

WPF基础入门-Class6-WPF通知更改

WPF基础入门 Class6-WPF通知 1、显示页面&#xff1a; <Grid><StackPanel><TextBox Text"{Binding Name}"></TextBox><TextBox Text"{Binding Title}"></TextBox><Button Command"{Binding ShowCommand}&qu…

VUE笔记(一)初识vue

一、vue的简介 1、什么是vue 官网地址:Vue.js Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。 构建用户界面&#xff1a;之前在学习vue之前通过原生js对DOM操作进行构建用户界面的 使用原生js构建用户界面的不足 - 没有规范&#xff0c…

mysql sql 执行流程

监控查询缓存的命中率 show status like ‘%qcache%’; mysql 缓存机制&#xff0c;以及 8.0 为啥取消 select sql_NO_Cache * from 表 where xxx; # 不使用缓存

如何开发一款唯一艺术平台 区块链 /数字藏品

艺术作品是人类文化的瑰宝&#xff0c;而艺术平台则是连接艺术家与观众的桥梁。如何开发一款独一无二的艺术平台&#xff0c;既要满足专业艺术作品展示的要求&#xff0c;又要提供深度思考的空间&#xff0c;这是我们所面临的挑战。本文将从专业性、思考深度和逻辑性等多个方面…

几个nlp的小任务(抽取式问答)

几个nlp的小任务(抽取式问答) 安装库抽取式问答介绍、SQuAD数据集初始化参数加载、导入数据集查看数据集示例加载tokenizer对长文本处理的演示对答案的位置进行验证整合刚才的步骤对数据集中的数据进行预处理加载微调模型设置args 参数使用数据清洗设置训练函数,开始训练安装…

浅谈信息论和信息编码

目录 背景 信息是什么 信息度量 小白鼠实验 哈夫曼编码 密码学 其它应用 背景 克劳德艾尔伍德香农&#xff08;Claude Elwood Shannon&#xff09;出生于 1916 年 美国密歇根州。1936 年毕业于密歇根大学&#xff0c;获得数学和电子工程学士学位。之后&#xff0c;他在麻…

将数据类型,类名作为参数传递使用的方法

在开发中遇到一个问题&#xff0c;就是给了很多的数据类型&#xff0c;需要找出当前数据属于哪个数据类型。 举个例子&#xff0c;我们现在有一组数据类型<int, double, float, char, bool>&#xff0c;并给定一个数据char c&#xff1b;需要通过一个函数找出变量c是类型…

fegin实现方法级别注解超时配置

fegin实现方法级别注解超时配置 测试的3.18新版本已经支持方法中参数带有Options 也可以自定义配置, Options options findOptions(argv);; 使用该注解方式需配合AOP使用! 原理是包装自己的client客户端, 替换框架的客户端! 应用到生产环境需自己充验证测试 1.0 注解 Target(…

Banana Pi 开源社区在深圳国际电子展(2023)上展示全系列新产品

Banana Pi 开源社区在深圳国际电子展(2023)上展示全系列新产品 Banana Pi开源硬件社区是由广东比派科技主导、台湾鸿海科技&#xff08;富士康&#xff09;全面战略支持的开源硬件项目。Banana Pi开源硬件系列开发板&#xff0c;完成核心系统和架构设计。开发文档、软件、硬件…

远程调试环境

一、远程调试 1.安装vscode 2.打开vscode&#xff0c;下载插件Remote-SSH,用于远程连接 3.安装php debug 4.远程连接&#xff0c;连接到远端服务器 注&#xff1a;连接远程成功后&#xff0c;在远程依然要进行安装xdebug&#xff0c;刚才只是在vscode中进行的安装。 5.配置la…

Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required

项目场景&#xff1a; 最近因为公司业务需要在搭一个新架构&#xff0c;用的springboot3和jdk17,在整合mybatis多数据源的时候报错 &#xff08;引用的mybatisplus 和 mybatisplusjion的是最新的包-2023-08-26&#xff09; Error creating bean with name ‘XXXServiceImpl’:…

Python中的format()函数详细讲解

注&#xff1a;所以代码皆成功运行&#xff0c;可直接复制运行 一、基本使用 1、Python中的format()函数是一个格式字符串的函数&#xff0c;通过花括号{}识别替换字段&#xff0c;从而完成字符串的格式化。 #format后面放数字、字符串都可以 print("{}喜欢{}岁的{}&qu…

「Python」机器学习之线性判别分析(代码,不调包)

「Python」机器学习之线性判别分析&#xff08;代码&#xff0c;不调包&#xff09; 前言1 线性判别分析&#xff08;LDA&#xff09;2 实现2.1 LDA实现2.2 数据集示例 3 最后 前言 语言&#xff1a;python库&#xff1a;numpy, matplotlib教材参考&#xff1a;《机器学习》——…

MySql学习4:多表查询

教程来源 黑马程序员 MySQL数据库入门到精通&#xff0c;从mysql安装到mysql高级、mysql优化全囊括 多表关系 各个表结构之间存在各种关联关系&#xff0c;基本上分为三种&#xff1a;一对多&#xff08;多对一&#xff09;、多对多、一对一 一对多&#xff08;多对一&…

论文阅读 The Power of Tiling for Small Object Detection

The Power of Tiling for Small Object Detection Abstract 基于深度神经网络的技术在目标检测和分类方面表现出色。但这些网络在适应移动平台时可能会降低准确性&#xff0c;因为图像分辨率的增加使问题变得更加困难。在低功耗移动设备上实现实时小物体检测一直是监控应用的…

计网第四章(网络层)(四)

目录 一、IP数据报的发送和转发过程 发送&#xff1a; 1.直接交付和间接交付 如果判断源主机和目的主机是否在同一个网络中&#xff1f; 2.默认网关&#xff1a; 转发&#xff1a; 路由表&#xff1a; 一、IP数据报的发送和转发过程 发送&#xff1a; 由主机发送IP数据…