我对webgl或者说二维、三维的理解

首先我们要做的就是把三维的东西展现在显示器里(浏览器里),但浏览器是二维的。那么就是把一个三维的物体用数学模型描述出来(x,y,z)然后把这个三维的数学模型转换到二维的浏览器里显示出来。(用webgl来模拟一个三维的空间)。
无论用DirectX还是OpenGL,最终都需要将三维的情报向二维进行变换。就像刚开始说的那样,最终的图像都是由二维显示器来显示的。
这时候,坐标变换就是必须的了。坐标变换大致可以分为三种,将这些方法正确的组合在一起,最终决定显示器上的位置。
用身边的东西举例说明的话,三维向二维转换的例子就是照相机。照片和图像,通过照相机已经全部变为了二维,最终,输出成了照片和动画。

三种坐标的转换

1.模型变换:在OpenGL的处理中虽然一般叫做模型变换,但是在DirectX中被叫做世界变换。
模型变换,是指为了定义参照物在三维空间的什么位置而进行的坐标变换。和现实的世界不同,程序中的三维空间里定义了世界的中心的基准点,就是原点。从这个原点出发,为了知道参照物的相对位置,就需要进行必要的坐标变换。假设,虚拟的三维空间里有一个苹果,那么为了表示这个苹果在什么位置,就需要进行相应的模型变换了。

2.视图变换:定义了镜头的实际位置以及镜头的方向。拿刚刚举例的苹果来说,即使三维空间中有一个苹果,如果镜头的方向不对着苹果的话,同样也是看不到这个苹果的。而且,如果将镜头大幅度远离苹果,那么也有可能看不到苹果了。为了决定镜头的位置和角度所进行的坐标变换就叫做视图变换。

3.投影变换:定义了三维空间的摄影区域。比如,是横向摄影,还是纵向摄影,最远拍摄多远距离等。
一般的照相机,直接拍摄镜头前的所有图像,最远拍摄多远也基本上没什么意识。但是,程序是无法模拟无限大的空间的,所以,从哪里开始拍摄,拍摄到哪里,必须有一个明确的范围。投影变幻,通过远近法则,可以将近处的物体描画的比较大,远处的物体描画的比较小。

着色器

认识着色器之前得先了解一下什么是固定渲染管线,简单来说,固定渲染管线就是就是3d渲染所需要进行的一连串的计算流程。也就是上面所说的模型、视图、投影的三种变化,固定渲染管线都会替我们完成。
但webgl中不存在固定渲染管线,那么就意味着,坐标的变化得由我们自己来解决了。在webgl中这个解决坐标变化的机制就叫着色器(shader)。而这种可以有程序员来控制的坐标变换机制又叫做,可编辑渲染管线机制。着色器又分为两种
1.顶点着色器(vertex shader):顾名思义它能处理顶点坐标、大小等(矩阵计算后的结果),能够把数学坐标光栅化。
2.片元着色器(fragment shader):能够接收光栅化数据并加以处理使其显示到屏幕上(光栅化数据包含了像素的位置、颜色等信息)

光栅化就是把顶点数据转换为片元的过程。片元中的每一个元素对应于帧缓冲区中的一个像素。
光栅化其实是一种将几何图元变为二维图像的过程。该过程包含了两部分的工作。第一部分工作:决定窗口坐标中的哪些整型栅格区域被基本图元占用;第二部分工作:分配一个颜色值和一个深度值到各个区域。光栅化过程产生的是片元。把物体的数学描述以及与物体相关的颜色信息转换为屏幕上用于对应位置的像素及用于填充像素的颜色,这个过程称为光栅化,这是一个将模拟信号转化为离散信号的过程。

着色器的使用:使用GLSL(openGL Shading Laguage)硬编码的C语言去使用.


lx_blog
97 声望12 粉丝

geek


« 上一篇
机器学习总结
下一篇 »
leetCode