当前位置: 首页 > news >正文

《Unity3D 实战核心技术详解》书中关于矩阵的错误

最近一直在学习实时渲染,不免要接触线性代数。而渲染中,一定会用到矩阵,当我再次去复习我之前看的书时,发现《Unity3D 实战核心技术详解》关于矩阵就有几处错误 ,特标注出来。

 

书的第一章《3D数学与Unity》,1.3.2讲矩阵缩放、1.3.3讲矩阵的旋转。缩放是一个矩阵,后面旋转针对绕三个不同的轴的旋转矩阵(x、y、z),总共4个矩阵,其中3个是错误的,只有一个绕y轴旋转是正确的。我不确定是印刷问题,还是作者本身对矩阵了解和掌握的就不深入,但出现这样的低级错误实属不该。

我直接上图片,不然口说无凭。

如第一张图所示,如果缩放的矩阵如书中所注,那么x’= x·Sx + y 而不是期望的 x.Sx,同理绕x轴旋转,那么x轴的坐标应当是不动的,也就是除了第一列的第一个为1外,其余应该为0,而第二行居然出现了1,那x’= x + y了,这根本就不是旋转了啊 悲伤,绕z轴旋转的就更离谱了…

 

好了,矩阵确实麻烦,但它却是理解和学习3D必不可少的知识。如果判断一个矩阵是否正确呢?这里我推荐《程序员的数学3 —— 线性代数》这本书中的一个方法,如下图所示。

456204068710673664

注意看画线的部分,我正是掌握了书中这个简单的方法,再去看有“错误”的那本书的矩阵时,一眼就发现矩阵是错的。希望这个小技巧和方法能帮助到你:

将输入的列向量放倒,然后将对应的元素分别相乘。

 

再额外补充一句,我之前也看孟岩在CSDN上写的那三篇《理解矩阵》,里面提及的书有:

《数学:它的内容、方法和意义》

《线性代数五讲》

《数学概观》

《数学拾遗》

《重温微积分》

《计算机图形学 —— 几何工具算法详解》

 

因为作者非数学系的专业人士,所以它的描述可能存在不准确的地方,但那是他自己的理解,能帮助到不理解矩阵的人,我觉得也是很有价值的。毕竟大部分人只是需要了解矩阵到底是什么东东,好奇为什么要用矩阵呢,至于矩阵更深层次的研究可能就不是那么在意了。科普有科普的作用,专业有专业的必要。

 

其实我觉得关于矩阵,看维基百科上的定义已经写的很清晰、明了了,仔细研究透,也就有个大概的了解了。链接地址  https://zh.wikipedia.org/wiki/矩阵 

那矩阵到底是什么,以我目前的理解和认知,矩阵就是映射,矩阵就是映射,矩阵就是映射(重要的事情说三遍!)

 

这里推荐几个我觉得非常好的视频给大家,更直观,进一步降低学习门槛。

【官方双语/合集】线性代数的本质 - 系列合集(用直观的动画、简洁的语言来讲述线性代码,你值得观看!)

https://www.bilibili.com/video/av6731067/index_1.html

 

麻省理工公开课:线性代数
http://open.163.com/special/opencourse/daishu.html

 

Introduction to Linear Algebra, Fifth Edition(2016) —— 线性代数教程评价最高的书,没有之一
http://math.mit.edu/~gs/linearalgebra/

 

Linear Algebra Done Wrong (Sergei Treil)
https://www.math.brown.edu/~treil/papers/LADW/LADW.html

 

陶哲轩在UCLA的linear algebra讲义 (通过阮一峰的博客了解到,他是40岁以下最聪明的美国科学家,24岁便被聘为正教授)
http://www.math.ucla.edu/~tao/resource/general/115a.3.02f/

 

最后扯点题外话,买书尽量买豆瓣上评价高的或者官方出品的(有口碑和品质保障),不然反而被误导了,读书有风险,吸收需谨慎(也可以说尽信书不如无书)。

这里我推荐一本书:《游戏引擎架构》,写书的作者本身的品质有保障,译者的水平也是杠杠的。

 

虽然我指出书中关于矩阵部分的三个错误(点积那部分不知道是印刷错误还是什么原因,存在错误),但本书其它章节依旧值得去阅读,给出的代码也并不算复杂,毕竟作者长期奋战在一线,网上也有很多他录制的视频。更多是吸收他实战的经验,理论部分我建议泛泛看一看,再找本更专业(评价更高)的书去查阅,这本书的理论写的并不好。

转载于:https://www.cnblogs.com/meteoric_cry/p/7954369.html

相关文章:

  • CSS3无图片实现华丽折页菜单效果(多浏览器兼容)
  • Intellij IDEA 2017.3 基于编辑器的REST客户端介绍
  • 让集成的Intel82845g支持1440x900
  • ubuntu 下面手动创建引用程序启动项(转)
  • [LeetCode] Copy List with Random Pointer 拷贝带有随机指针的链表
  • UIM卡 PIN 码特点
  • 详解在visual studio中使用git版本系统(图文)
  • 我来做百科(第五天)
  • POJ-1502 MPI Maelstrom
  • Oracle -- 字符集编码'GBK'库数据导入到'UFT-8'库中 大量报错 ORA-12899 解决方案
  • IOS-创建带Navigation的根控制器
  • .Net IOC框架入门之一 Unity
  • 过 DNF TP 驱动保护(一)
  • 数组倒序输出
  • EF架构~XMLRepository仓储的实现
  • JavaScript-如何实现克隆(clone)函数
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • CSS中外联样式表代表的含义
  • Java 多线程编程之:notify 和 wait 用法
  • JavaScript DOM 10 - 滚动
  • javascript面向对象之创建对象
  • Redux 中间件分析
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 大整数乘法-表格法
  • 当SetTimeout遇到了字符串
  • 翻译:Hystrix - How To Use
  • 高程读书笔记 第六章 面向对象程序设计
  • 构造函数(constructor)与原型链(prototype)关系
  • 扑朔迷离的属性和特性【彻底弄清】
  • 前端工程化(Gulp、Webpack)-webpack
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 深入浅出webpack学习(1)--核心概念
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 怎么将电脑中的声音录制成WAV格式
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #ifdef 的技巧用法
  • (1)(1.13) SiK无线电高级配置(六)
  • (1)(1.9) MSP (version 4.2)
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (二)hibernate配置管理
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (四)Linux Shell编程——输入输出重定向
  • (四)汇编语言——简单程序
  • (转)nsfocus-绿盟科技笔试题目
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • ***详解账号泄露:全球约1亿用户已泄露
  • *上位机的定义
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)