1 随着探索的深入,我们逐渐的不可避免的需要去逛网站了...不过在此之前,我们还是回顾一下渲染过程里面的坐标变换吧...
这张图很典型了:
举个例子
现在,我输入一组顶点到glsl中,这组顶点是组成了一个Cube
但是,这个Cube应该显示在哪个地方呢?
所以,[Cube]*[x,y,z,w]'这个过程就叫做模型变换
model transform
然后就是摄像机开始捕获里面的东西了,假设,摄像机是一个没有边界的视锥体
假设它的视域是无限大的,那么投影到的这个区域就是 投影域,对应的矩阵叫做投影矩阵,而
[Model]*[World]->变换到投影域的过程叫做
viewing transform(projection transform:投影变换)
但是,我们的视线是有限的,所以需要裁减,这个过程叫做
clip transform(perpective division:透视分割)
最后,注意,我们的webgl的坐标系是x:[-1,1]y:[-1,1]的
也就是说还需要将坐标归一化,而这个过程叫做
viewport transform:视口变换
2 gl_Position
在投影变换之后,输出的是gl_Position,也就是说你最终画在屏幕里面的哪个位置,这个位置就是gl_Position...so,我们来看一下上一部分在
VertexShader里面的代码
应对于这个代码,我们得先知道position是啥,从直觉上讲,我们认为它就是
世界坐标
ps:至少到目前位置我并没有找到position这个vec3的引用,我初步怀疑它是VertexShader里面内置的一个位置特性,或者是属于three.js的,目前我们就把它当做是世界坐标。
接下来modelViewMatrix,目前没有太好的指导教材证明modelViewMatrix是属于Three.js的模型矩阵,什么意思呢:
modelViewMatrix表述当你创建一个Cube时,这个Cube的所有顶点会组成一个矩阵叫做modelViewMatrix。但是不清楚的事情是
modelViewMatrix是属于Three.js的还是原生的webgl的shader提供的矩阵API。
但其实并不重要。
mvPosition表示这个Cube的世界投影。
而
projectionMatrix表示投影矩阵,这是非常重要的概念
projectionMatrix*mvProjection表示变换到投影矩阵。
这个就是gl_Position,然后输出,现在gl_Position就表示一些列在投影屏上的没有上色的点,注意,它就是一群点,我需要去使用gl_line,gl_triangle(划线或者画三角形)这些命令去给这个点去绘制对应的线,面,体,其实这很简单,也不是很重要。
以上就是gl_Position的相关比较基础的概念(在下的极限了...下一章里我们介绍gl_FragColor)