本节概述
绘制图形的第一步就是指定顶点坐标,可以每个顶点指定,也可以是用于所有顶点的常量,或者直接用顶点数组指定,OpenGL-ES 标准实现必须支持最少 16 个顶点属性;
顶点着色器处理图元顶点之后进入图元装配阶段,在这个阶段执行裁剪,透视分割和视口变换,往后会进入光栅化阶段;
光栅化是指将图元转换为一组二维片段的过程,这些片段最后会由FragmentShader 处理
顶点的指定
常量顶点属性和顶点数组
常量顶点属性对一个图元的所有顶点都相同,所以对图元的所有顶点都只需要指定一个值,可以用下面的函数指定:
| 顶点指定函数 | 说明 |
|---|---|
| glVertexAttrib1f | 加载顶点 (x,0.0,0.0,1.0) |
| glVertexAttrib2f | 加载顶点 (x,y,0.0,1.0) |
| glVertexAttrib3f | 加载顶点 (x,y,z,1.0) |
| glVertexAttrib4f | 加载顶点 (x,y,z,w) |
| glVertexAttrib1fv | 加载顶点 (x,0.0,0.0,1.0) |
| glVertexAttrib2fv | 加载顶点 (x,y,0.0,1.0) |
| glVertexAttrib3fv | 加载顶点 (x,y,z,1.0) |
| glVertexAttrib4fv | 加载顶点 (x,y,z,w) |
常量顶点属性提供标量/向量等价的功能
顶点数组
顶点数组指定每个顶点的属性,是保存在应用程序地址空间的缓冲区,使用下面的函数指定
| 函数 | 说明 |
|---|---|
| glVertexAttribPointer | 指定顶点数组 |
| glVertexAttribIPointer | 指定顶点数组 |
glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsize stride, const void *pointer)
- GLuint index 指定通用顶点属性索引,从0到 最大支持索引数 -1
- GLint size 所指定的分类数量 有效值 1~4
- GLenum type 数据格式
- GLboolean normalized 表示非浮点类型在转换为浮点数时是否应该规范化
- GLsize stride 表示两个顶点之间的位移,如果stride 为 0,表示按照顺序存储
- const void *pointer 顶点数据缓冲区的指针
重点关注的是
- GLuint index : 和Shader 中的指定的 layout 一致
- void *pointer : 指向顶点的指针
顶点属性的定义
定义顶点属性的坐标并且关联到一个属性索引上,
对应的代码:
GLfloat color[4] = {
1.0f, 0.0f, 0.0f, 1.0f };
// 3 vertices, with (x,y,z) per-vertex
GLfloat vertexPos[3 * 3] = {
0.0f, 0.5f, 0.0f, // v0
-0.5f, -0.5f, 0.0f, // v1
0.5f, -0.5f, 0.0f // v2
};
glViewport ( 0, 0, esContext->width, esContext->height );
glClear ( GL_COLOR_BUFFER_BIT );
glUseProgram ( userData->p

最低0.47元/天 解锁文章
2685

被折叠的 条评论
为什么被折叠?



