数学知识

之前我们说有三个方向可以走 - 光、纹理、数学。然后我们简单看了一个光的例子来学习z-buffer和纹理,现在我们来看一下相关的数学知识。这些也很重要。

需要了解的概念包括:

  • 矩阵是如何变换向量的: V' = Matrix * V
  • 窗口变换、坐标变换: 同样可以用矩阵表示
  • 正交投影、透视投影:矩阵表示
  • 左手坐标系vs右手坐标系
  • ...

这部分可以参考我的一些文章

  • [从零开始计算机图形学]之十四数学知识 中的齐次坐标、变换矩阵部分
  • 矩阵的逆、坐标变换和窗口变换
  • LookAt、Viewport、Perspective矩阵
  • 左手坐标系vs右手坐标系

经过这些补充之后,我们需要知道的是为了变换物体位置,并且符合近大远小的原则我们最终画在屏幕上的点需要经过这些变换:

顶点 → 世界坐标系 → 摄像头坐标系 → 投影 → 屏幕坐标系viewport * projection * view * model * vertex.

加上数学

这里我们简单用一点点数学,我们不动物体,但是把眼睛/摄像头放到 z = 3 的位置,头像缩小一点点,再加上透视投影。

结果:

看起来不错,近大远小我们能看出来。

KrisYu/tinyrender​github.com

在geometry.h 中有较大的修改,引入了矩阵类及其运算。

说起数学我们还不能逃开一些问题,比如:

  • 我们在代码中没有考虑当我们变换物体的时候,它的法向量会怎样变化?是否可以用同样的矩阵来变换?→ 法向量变换
  • 我们把物体映射到一个范围,但是不是物体的所有部分都在我们能看到的区域,所以这里还需要一个裁剪步骤
  • 有些三角形可以提前丢弃(比如处于视线背面的),我们可以尽早的丢掉它们,这样可以节省计算 → 参考隐藏面消除 中的背面消除部分
  • 需要比较清楚什么时候选什么坐标系中的顶点,比如光:它应该是跟哪个坐标系或者变换在什么状态下的顶点互动?

代码画简单动物_[500行代码学懂OpenGL]之六数学知识相关推荐

  1. 重心模型选址代码_[500行代码学懂OpenGL]之四z-buffer

    z-buffer 简单光 我们现在先复习一下,我们经过了画点.画线,填三角形之后已经能画出来一些东西了,现在我们有好几条路可以走,那就是 光(上帝说"要有光") 纹理(不然就填白色 ...

  2. python代码画简单动物_Python代码简化

    让代码更Pythonic 当然不要过分追求简洁,不然阅读的人就遭殃了, 部分逻辑复杂的情况还应按照清晰的逻辑脉络去写方便阅读, 毕竟我们是用代码实现功能然后维护,而不是单单的炫技. ######### ...

  3. 【你会用代码画年兽吗】20行代码使用JS实现虎年春节倒计时 —— 红红火火过虎年

  4. python代码示例500行源代码-500行代码使用python写个微信小游戏飞机大战游戏

    这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手. 帮助蹲厕族.YP族.饭圈女孩在无聊之余可以有一样东西让他们振作起来!让他们的左手 / 右 ...

  5. c 语言500行小游戏代码,500行代码使用python写个微信小游戏飞机大战游戏.pdf

    500行行代代码码使使用用python写写个个微微信信小小游游戏戏飞飞机机大大战战游游戏戏 这篇文章主要介绍了500行代码使用python写个微信小游戏飞机大战游戏,本文通过实例代码给大家介绍的非常详 ...

  6. python怎么识别图片里面的文字并合成语音_几行代码搞定识别图片中的文字信息,同时转换成语音...

    image前几天想把一篇不错的文章保存下来,无奈是图片的,于是想利用python把图片中的文字识别出来 实现的方式还是挺多的,这里介绍下百度的AI开放平台,毕竟大公司,感觉识别的精度会高点,同时相信他 ...

  7. 开源自制的6通道航模遥控器(一) 超简单不超过100行代码

    前言 前段时间跟着LOLI大神的教程制作了LOLI三代控,效果很好.但是,由于LOLI三代控的接收机带有数据回传功能,也就是接收机的无线模块也承担了发射数据功能,所以接收机也要使用带有功率放大芯片的N ...

  8. 用Python代码画一个足球(附完整代码)

    用Python代码画一个足球(附完整代码) C站举办了世界杯征文活动,本文用Python代码画一个足球. 实现方法介绍 本文的绘图工具使用Python的标准库turtle库,无需安装,导入即可使用. ...

  9. 压缩过的js代码怎么还原_码农晒出一段代码:500行代码没有一字注释,这种情况怎么应对?...

    对于程序员经常提到的"代码",从某种程度上来讲就算是机器码,因为这个东西机器很擅长读,不论写的怎么乱,怎么压缩混淆,在机器看来都是一样的,而人就不一样了,哪怕是能力再强的程序员,代 ...

最新文章

  1. 《需求分析》读后感之二
  2. 虚拟化的故事连载系列一
  3. 英语 interactive tutorial unary
  4. openstack 重启mysql_突然断电导致mariadb数据库无法启动(openstack 命令无法使用)...
  5. 用Redux来进行组件间通讯
  6. nlog轻量级日志组件
  7. 信息学奥赛一本通(1254:走出迷宫)
  8. php shell exec 阻塞,php shell_exec()vs exec()
  9. 如何检测过时的Kubernetes API
  10. java之mybatis之缓存
  11. java/php/net/python高校教材管理系统设计
  12. 标题栏位于图纸的什么位置_电气施工图的绘图有什么要求,一般有哪些规定?本文清楚告诉你!...
  13. CAB 写inf文件
  14. RabbitMQ之路(二):添加用户和虚拟主机
  15. 搜索引擎开源代码(转)
  16. 周易六十四卦——乾卦
  17. 【VUE】vue网站设计-----字节招聘网站设计
  18. iPhone13充电宝哪个牌子好?iPhone13无线充电宝推荐
  19. 【虚拟机】配置外网访问NAS黑群晖6.17
  20. 用Python实现查心率

热门文章

  1. Cannot forward after response has been committed问题解决及分析
  2. 在Windows上创建CUDA C程序
  3. Java讲课笔记07:计数循环与嵌套循环
  4. Linux综合练习——课件分发
  5. 【codevs1368】【BZOJ1034】泡泡堂BNB,贪心思路
  6. qtablewidget固定一列滚动_简单易懂,最全滚动轴承基本知识汇总
  7. 2017.4.20 hanoi双塔问题 思考记录
  8. 【英语学习】【Daily English】U11 Work L03 He is a had guy to work for
  9. 课程设计-三层架构ASP.NET作品分享网站(sql server数据库)
  10. Ubuntu安装指定版本clang-format