正投影/透视投影
-
正投影
正投影.png
- 我们通常在2D会图中使用正投影,并在我们的几何图形中将Z坐标设置为0.0。
- 我们把上图笛卡尔可视区域叫做视景体
- 视景体外的几何图形将会被裁减掉,也就是说,它将被沿着视景体的边界进行裁剪
-
透视投影
透视投影会进行透视除法对距离观察者很远的对象进行缩短和收缩。观察者可以这样理解 就是屏幕外的你。如下图所示。我们把下图中一个金子塔形被截断后的形状叫做平截头体(frustum)。它的观察方向是从金字塔的尖端到宽阔端。
GLFrustum类通过setPerspective 方法为我们构建一个平截头体
CLFrustum::SetPerspective(float fFov , float fAspect ,float fNear ,float fFar)
- 参数:
fFov:垂直方向上的视场角度
fAspect:窗口的宽度与⾼度的纵横比
fNear:近裁剪面距离
fFar:远裁剪面距离
纵横比 = 宽(w)/高(h)
OpenGL 提供的存储着色器
- 单元着色器(Idebtity)
GLShaderManager::UserStockShader(GLT_SHADER_IDENTITY,GLfloat vColor[4]);
参数1:存储着色器种类 -单元着色器
参数2:颜色
使用场景:绘制默认OpenGL 坐标系(-1,1)下图形. 图形所有片段都会以一种颜色填充
- 平面着色器(Flat)
GLShaderManager::UserStockShader(GLT_SHADER_FLAT,GLfloat mvp[16],GLfloat vColor[4]);
参数1:存储着色器种类-平面着色器
参数2:允许变化的4*4矩阵
参数3:颜色
使用场景:在绘制图形时,可以应用变换(模型/投影变化)
- 上色着色器(Shaded)
GLShaderManager::UserStockShader(GLT_SHADER_SHADED,GLfloat mvp[16]);
参数1:存储着色器种类-上色着色器
参数2:允许变化的4*4矩阵
使用场景:在绘制图形时,可以应用变换(模型/投影变化)颜色将会平滑的插入到顶点之间成为平滑着色
- 默认光源着色器(Default Light)
GLShaderManager::UserStockShader(GLT_SHADER_DEFAULT_LIGHT,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vColor[4]);
参数1:存储着色器种类-默认光源着色器
参数2:模型4*4矩阵
参数3:投影4 *4矩阵
参数4:颜色值
使用场景:在绘制图形时, 可以应⽤变换(模型/投影变化) 这种着⾊器会使绘制的图形产⽣阴影和光照的效果.
- 点光源着色器
GLShaderManager::UserStockShader(GLT_SHADER_POINT_LIGHT_DIEF,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vColor[4]);
参数1:存储着色器种类-点光源着色器
参数2:模型4*4矩阵
参数3:投影4 *4矩阵
参数4:点光源的位置
参数5:漫反射颜色值
使用场景:在绘制图形时, 可以应用变换(模型/投影变化) 这种着色器会使绘制的图形产⽣
阴影和光照的效果.它与默认光源着⾊器⾮常类似,区别只是光源位置可能是特定的.
- 纹理替换矩阵着色器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE,GLfloat mvMatrix[16],GLint nTextureUnit);
参数1:存储着色器种类-纹理替换矩阵着色器
参数2:模型4*4矩阵
参数3:纹理单元
使用场景:在绘制图形时, 可以应⽤用变换(模型/投影变化)这种着⾊器通过给定的模 型视图投影矩阵.使用纹理单元来进行颜色填充.其中每个像素点的颜色是从纹理中 获取.
- 纹理调整着色器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_MODULATE,GLfloat mvMatrix[16],GLfloat vColor[4],GLint nTextureUnit);
参数1:存储着色器种类-纹理调整着色器
参数2:模型4*4矩阵
参数3:颜色值
参数4:纹理单元
使用场景:在绘制图形时, 可以应⽤用变换(模型/投影变化)这种着色器通过给定的模 型视图投影矩阵. 着色器将一个基本色乘以一个取自纹理单元nTextureUnit 的纹理.将颜色与纹理进行颜色混合后才填充到片段中.
OpenGL 基本图元(7种)
- OpenGL在计算机屏幕上进行绘图,我们关心的不是物理屏幕坐标和像素,而是视景体中的位置坐标。将这些点、线和三角形从创建的3D空间投影到计算机屏幕上的2D图形则是着色器程序和光栅化硬件所要完成的工作。
- OpenGL 定义了7种图元来绘制几何图形,这些图元将在一个包含给定图元的所有顶点和相关属性的单个批次中进行渲染。实质上,在一个给定的批次中的所有顶点都会用于组成这些图元中的一个
图元 | 描述 |
---|---|
GL_POINTS | 每个顶点在屏幕上都是单独点 |
GL_LINES | 每一对顶点定义一个线段 |
GL_LINE_STRIP | 一个从第一个顶点依次经过每个后续顶点而绘制的线条 |
GL_LINE_LOOP | 和GL_LINE_STRIP相同,但是最后一个顶点和第一个顶点连接成闭合线圈 |
GL_TRIANGLES | 每三个顶点定义一个新的三角形 |
GL_TRIANGLE_STRIP | 共用一个条带(strip)上的顶点的一组三角形 |
GL_TRIANGLE_FAN | 以一个圆点为中心呈扇形排列,共用相邻顶点的一组三角形 |
- 上表中的图元类型 等同于 下图中展示的图元类型 下图中更能直观的表达图元特性
- 为了绘制实体表面,我们需要的不仅仅是点和线——还需要多边形。一个多边形就是一个封闭的图形,它可能用颜色或纹理数据进行填充,也可能不进行填充,在OpenGL中,多边形是所有实体对象构建的基础,而存在的最简单的实体多边形就是三角形。 所以光栅化硬件最欢迎三角形。而三角形也是目前OpenGL 中支持的唯一的一种多边形。
网友评论