





定价:49.8元
印次:1-1
ISBN:9787302548041
出版日期:2020.07.01
印刷日期:2020.06.28
图书责编:黄芝
图书分类:零售
本书推导解释了3D世界的1的具体含义,包括3D编程最常使用的5个坐标1的意义。对于透视投影的3D坐标1,推导了用户使用的透视投影变换。原创性地提出了一个透视投影的一般模型。基于这个一般模型做了一些数学算法上的改进,得到了基于透视除法的透视投影。此外,也分析了模型视图变换,窗口变换,纹理映射等对3D世界的1的影响。对于正交投影,则分析了基于正交投影的Skia的顶点坐标,纹理坐标特点,一些高级的3D编程概念如光线追踪,延迟渲染,阴影纹理等。
徐星,2007年硕士毕业于武汉大学无线电物理专业,工作后专注在操作系统的图形基础框架的开发。目前就职于Intel公司,从事Chromium图形系统的研发工作,是Chromium committer。
前言 本书源起于十年前作者从事Android图形编程时,对3D图形系统单位1的思考。2010年,是各大手机品牌和手机设计厂商热火朝天地定制Android界面的一年。在这股界面定制浪潮中,出现了很多3D桌面。当时作者所在的团队负责优化一个开源的3D桌面。这个3D桌面是一个六棱柱,棱柱的每个侧面都贴上了应用程序的图标。为了优化这个3D桌面,我们短暂地学习了OpenGL接口,也学会了编写3D的“Hello World”程序,但是在计算六棱柱坐标的时候碰到了问题。利用几何知识计算六棱柱坐标很简单,但是在应用了透视投影、模型视图变换、视口变换之后,我们不知道3D桌面里的六棱柱坐标是怎么计算出来的。具体到3D图形编程,六棱柱的计算问题可以描述为: ①3D程序里面,用户输入的顶点纹理坐标的单位1是什么,是窗口上的一个像素吗?或者说,如何定义顶点坐标和各种变换,将3D场景输出到整个窗口?②透视投影使用的视景体和投影矩阵是怎么得到的?3D编程接口的书籍里面并不容易找到这个问题的答案。 直到几年后,作者开始研究学习Chromium图形系统,重新思考总结这个问题,才意识到,学习3D编程和学习一门编程语言是有区别的。 在学习一门新的语言,例如C/C++或者其他语言的时候,一般都能很快地去编写一个“Hello World”程序,甚至实现一些更加复杂的功能。而对于3D编程,作者的感受是,看了图形学的书,学习了OpenGL/Vulkan编程接口,但是真正实战编程的时候,却发现不会写,也很难理解他人源码的设计逻辑。学习3D编程和学习一门编程语言的区别在于,3D编程的难点不是接口和语言本身,而...
第1章3D程序分析方法
1.1输入顶点数据
1.1.1描述顶点
1.1.2传递顶点
1.1.3绑定顶点缓冲区
1.2输入MVP数据
1.3输入纹理
1.3.1创建并传递纹理
1.3.2绑定纹理
1.4输出帧缓冲
1.5数据处理过程
1.6TensorFlow JS的输入输出
1.7Vulkan的输入输出
1.8GL和Vulkan的线程模型
1.9源码下载和编译
小结
第2章3D图形学基础
2.1符号和约定
2.2向量的基本运算
2.3齐次坐标
2.3.14×4齐次矩阵
2.3.2平行线相交
2.4顶点、三角形、片元
2.5光栅化原语
2.6视景体
2.7光照模型
小结
第3章透视投影
3.1左右手坐标系
3.23D坐标和坐标系
3.33D流水线
3.4小孔成像
3.5模型变换和世界变换的意义
3.6透视投影的几何模型
3.6.1眼睛坐标到投影坐标
3.6.2投影坐标到NDC坐标——xy分量
3.6.3眼睛坐标到NDC坐标——xy分量
3.6.4眼睛坐标到NDC坐标——z分量
3.6.5裁剪
3.6.6透视投影的几何模型
3.6.7几何模型的算法分析
3.7透视投影的透视除法模型
3.7.1眼睛坐标到裁剪坐标——xy分量
3.7.2眼睛坐标到NDC坐标——zw分量
3.7.3透视除法
3.7.4裁剪
...