这篇或者接下来的一系列文章都是我阅读《OpenGL超级宝典》第五版后的个人总结。那为什么要做总结?我觉得看完之后自己感觉自己是记住,但是过不了几天又忘记了。我用自己的理解把书上东西再写出来有助于加深我的记忆和理解。
第一,2D与3D有什么关系。
2D就是我们平常在纸上画矩形之类的,他们只有宽度和高度。而3D比2D多一个深度。真实世界中,由于我们的双眼的存在,看到的是3D世界。即使你遮住一只眼,由于光线照射产生的表面着色和近大远小的缘由,这些效果激发了我们大脑的记忆,这使得我们观察到的仍是3D世界。
那对于在屏幕上又是怎么样显示3D的?其实在在屏幕上只能显示2D图形,人们通过将屏幕上的点连起来使得观察者产生3D的错觉。可以这样说,在屏幕上显示3D的原理就是,2D+连接点=3D。至于如何连接点以及如何把3D图形的点映射到2D屏幕上,这与图形算法有关。
第二,2D转换3D的方法及其概念。
Rendering(渲染),把数学和图形数据转换成3D空间图像的操作或指图像。
Transformaton(转换),把2D下的点连接,使得观察者产生3D的错觉。
Projection(投影),把3D坐标转换为2D屏幕坐标。
Rasterization(光栅化),绘制或填充每个定点之间的像素形成线段。在大多数渲染的情况下,我们并不使用线段,而是用实心三角形进行渲染。
Shading(着色),改变顶点间的表面的颜色值。
Shader(着色器),在图形硬件上执行的单独程序,用来处理顶点和执行光栅化。
Texture Mapping(纹理贴图),把图片贴到三角形或多边形上,使3D效果更加显著。
Blending(混合),把不同颜色混在一起。可以在一个图形中绘制另一个图形,使得效果真实。
上面渲染是整个过程,其他的都是在2D上显示3D的方法。可以这样说,3D几何体就是在2D平面上做顶点的连接,然后对三角形进行光栅化,如果要效果更逼真,就要进行着色、纹理、混合。
第三,关于2D和3D的坐标系。
在2D下,采用的是笛卡尔坐标系,即x轴为水平方向,向右为正。y轴为垂直x轴,向上为正。关于如何,把逻辑坐标转换成物理屏幕像素坐标,可以通过坐标裁剪。有两种比较常见的坐标裁剪方法。一种是裁剪区域就是窗口内部最小和最大的x和y值。另一种就是根据窗口制定原点的位置。
Primitives(图元),一维或二维到的实体或表面。图元的每个角称为顶点(Vertex,复数Vertices),这些顶点拥有坐标。
在3D下,笛卡尔坐标系多了一个z轴,z轴同时垂直于x轴和y轴,向外为正。
第四,3D坐标转换为2D坐标
3D坐标转换为2D坐标,需要投影(Projection),投影分为正投影(Orthographic Projection)和透视投影(Perspectiv
e Projection)。投影后,在2D上窗口上显示得叫做视景体(Viewing Volume)。
最后,OpenGL超级宝典第一章告诉我们一个最基本也是最重要的话“创建实体3D几何图形就是一种连线游戏”。