3D图形 和 OpenGL 简介
一、走向3D
三维(3D)表示一个正在描述或显示的物体具有3个维度:宽度、高度和深度。例如,放在书桌上的一张画是一个二维物体,因为它没有可以令人感受得到的深度。而旁边的药瓶却能感受到它是3D,因为它具备高度、深度、宽度。
几个世纪以来,艺术家们已经知道如何让一幅画有立体感并且具有真实的深度。通过颜料在二维画布上所创作的作品,它其实本质上画的是一个二维物体。类似,计算机3D图像实质上也是平面的,它只是在计算机屏幕上所显示的二维图像,但它可以提供深度的错觉。
2D + 透视 = 3D
二、3D图形技术和术语
- 光栅化:实际绘制或填充每个顶点之间的像素形成线程
- 线框渲染是有它的用处,但在大多数情况下我们并不是用线程,而是使用实心三角形渲染。
- 着色:沿着顶点之间改变颜色值,能够轻松创建关照照射子啊一个立方体上的效果。另一方面,着色器则是图形硬件上执行的单独程序,用来处理顶点和光栅化任务。
- 纹理贴图:不过是一个用来贴到三角形或多边形上的图片。在GPU上,纹理是快捷有效的。
- 混合:混合是将不同的颜色混在一起。
三、3D图形的常见用途
实时3D图形的应用范围包括交互式游戏和模拟以及数据的可视化显示(供科学、医学或商业应用);
在个人计算机领域,3D图形的应用几乎没有止境。目前最常见的用途,游戏、AR、VR,都是基于OpenGL 的。3D图形在科学是视觉和工程应用中非常流行,物美价廉的3D硬件大量涌现使得这些应用技术空前的流行火爆。
Mac OS X 以及 iOS 都是使用OpenGL对所有窗口和控件进行渲染,从而创建了功能强大,引人入胜的可视化界面。
例如设计时使用的3D max ,还是游戏制作的Unity 3D,Cocos2D 底层都是使用了OpenGL。而我们医学上的影像渲染也都依托于OpenGL。
三(1)2D笛卡尔坐标
在二维绘图中,最为常用的坐标系统是笛卡尔坐标系统。笛卡尔坐标由一个X坐标和Y坐标构成。x坐标测量水平方向的位置,而y坐标则测量垂直方向的位置。
三(2)3D笛卡尔坐标
现在,我们把二维坐标系统拓展到三维空间中,并增加深度分量;在2D笛卡尔标上加一个新轴,z轴。
z轴同时垂直于x轴&y轴。它代表了一条从屏幕的中心朝向你们的直线(我已经旋转了这个坐标系统的视角,把y轴向左旋转,把x轴向下和后旋转。否则,z轴将直接面向我们,无法看到)。现在我们用3个坐标(x,y,z)来指定三维空间中的一个位置。
==深度:通常表示窗口坐标z值;==
四、着色器
在实时计算机图形中,最前沿的技术是可编程着色器(Programmable Shading)。图形卡不再是低能的渲染芯片。而是功能强大的高度可编程的渲染计算机。类似CPU的术语GPU应运而生。它代表图形处理单元,特指当今图形卡上的可编程芯片。它们是高度并行,并且具有非常快的速度。同样重要的是,程序员可以进行重新配置图形卡的工作方式,几乎可以实现任何可以想得到的特殊效果。
五、3D编程的基本原则
1.并发工具包
OpenGL基本上一种底层渲染API,我们不能告诉它“在什么地方绘制什么”--我们需要自己动手,通过载入三角形,应用必要的变化和正确的纹理、着色器并在必要应用混合模式来组合一个模型。这使得我们能够大量的底层控制,与使用高层工具包,使用OpenGL这样的底层API动人之处在于,我们不能仅仅是重现许多标准3D渲染,我们可以创造自己的算法,甚至可以去发现一些新的捷径、性能技巧和艺术视觉技术。
2.坐标系统
在OpenGL 或几乎所有的3D API中创建一个用于绘图窗口时,必须指定希望使用的坐标系统以及指定的坐标如何映射到实际的屏幕像素。
小结
实际上需要一个物体的2幅画面从不同角度上感知真正三维空间,我们可以通过透视、隐藏直线消除、颜色、着色和其他技巧来创建深度幻觉。