3.绘制
[TOC]
图元
OpenGL支持多种图元,但都可归结为点、线、三角形中的一种。
点
glPointSize
点精灵
线、条带、循环线
- 循环线(line loop)首尾相接
- 条带线 line strip 没有首位闭合
diamond exit
三角形、条带、扇面
TODO 光照对三角形的影响
OpenGL图元模式标识
-
GL_POINTS
- 点
-
GL_LINES
- 将传入的坐标作为单独线条绘制,ABCDEFG六个顶点,绘制AB、CD、EF三条线
-
GL_LINE_LOOP
- 循环线
- 将传入的顶点作为闭合折线绘制,ABCD四个顶点,绘制AB、BC、CD、DA四条线。
-
GL_LINE_STRIP
- 条带线
- 将传入的顶点作为折线绘制,ABCD四个顶点,绘制AB、BC、CD三条线
-
GL_TRIANGLES
- 将传入的顶点作为单独的三角形绘制,ABCDEF绘制ABC,DEF两个三角形
-
GL_TRIANGLE_STRIP
- 三角形条带
- 将传入的顶点作为三角条带绘制,ABCDEF绘制ABC,BCD,CDE,DEF四个三角形
-
GL_TRIANGLE_FAN
- 三角形扇面
- 将传入的顶点作为扇面绘制,ABCDEF绘制ABC、ACD、ADE、AEF四个三角形
多边形正反面
TODO
glPolygonMode
glFrontFace
OpenGL缓存数据
创建分配缓存
glCreateBuffers(GLsizei n, GLuinit* buffers)
glBindBuffer(GLenum target, GLuint buffer)
向缓存输入和输出数据
void glNamedBufferStorage(GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags);
glNamedBufferSubData
glClearNamedBufferData
glCopyNamedBufferSubData
glGetNamedBufferSubData
- GL_BYNAMIC_STORAGE_BIT
- GL_MAP_READ_BIT
- GL_MAP_WRITE_BIT
- GL_MAP_PERSIISTENT_BIT
- GL_MAP_COHERENT_BIT
读取、访问、丢弃缓存数据
TODO
顶点规范
glVertexAttribPointer
glVertexAttribPointer数据类型标识符
- GL_BYTE
- GL_UNSIGNED_BYTE
- GL_SHORT
- GL_UNSIGNED_SHORT
- GL_INT
- GL_UNSIGNED_INT
- GL_FIXED
- GL_FLOAT
- GL_HALF_FLOAT
- GL_DOUBLE
- GL_INT_2_10_10_10_REV
- GL_UNSIGNED_INT_2_10_10_10_REV
如果type传入了GL_SHORT等整数类型,OpenGL将这这些数据类型存储到缓存对象中,OpenGL必须将这些数据转换换为浮点数才能将它们读取到浮点数的顶点属性中。
如果normalize为GL_FALSE,整数直接被强制转换为浮点数,然后再传入到顶点着色器中,如果是GL_TURE将进行归一化
- normalize为GL_FALSE
- 着色器传入的是4.0
- normalize为GL_TURE
- 数据类型是有符号的
- f = c / (2b - 1)
- 数据类型是无符号的
- f = (2c + 1 )/ (2b + 1 )
- f 浮点数值, c 整数分量 b 数据类型 位数 GL_UNSIGNED_BYTE就是8
- 数据类型是有符号的
整数4置入缓存,type为GL_INT
f = 4 / (232 - 1) = 0.000000009313
整型顶点属性
glVertexAttribIPointer
双精度顶点属性
glVertexAttribLPointer
顶点属性的压缩数据格式
size GL_BGRA
GL_INT_2_10_10_10_REV
2 10 10 10
w x y z
静态顶点属性
TODO
绘制命令
- 索引模式
- 非索引模式
图元重启动
TODO
多实例渲染
TODO