第四章 管理3D图形数据
缓冲区与顶点属性
-
每个顶点数据所关联的相关数据:顶点,法线,颜色,uv等
-
缓冲区类型:VBO、VAO、EBO
统一变量uniform
uniform变量是cpu向gpu传递数据的一种方式,支持:
- 将变量传递到每个着色器中
- 每个着色器不能修改uniform变量
- 顶点着色和片段着色中的uniform值相同,片段中不会对uniform进行插值
顶点属性插值
从顶点传递到片段的数据会进行线性插值
模型视图投影变换矩阵
gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertext;
3D立方体程序
- createShaderProgram
- readShaderSource
- checkOpenGLError
- printProgramLog
- pringShaderLog
实例化
glDrawArraysInstanced
gl_InstanceID
矩阵栈
z冲突
z-fighting /Depth-fighting
产生原因: 深度缓冲区中值的精度有限
解决方法:
- 使用合适的近远裁
- 使用polygonoffset进行偏移处理
性能优化
- 尽量减少动态内存空间分配
- 尽量减少动态内存空间分配
- 背面剔除:glCullFace
第五章 纹理贴图
opengl相关函数:
- glBindTexture
- glTexParameter
- 着色器中使用纹理采样器:Sampler2D、Sampler3D等
滤波方式
- minFilter
- magFilter
滤波值:
- GL_LINEAR
- GL_NEAREST
-
mipmaping 多级渐远
- GL_NEAREST_MIPMAP_NEAREST:最近插值
- GL_LINEAR_MIPMAP_NEARST: 线性插值
- GL_NEARST_MIPMAP_LINEAR: 双线性插值
- GL_LINEAR_MAPMAP_LINEAR:三线性插值
各向异性
为解决mipmaping使用过程中,由于视角不同而产生的失真模糊,给出的解决方式
环绕和平铺
- GL_REPEAT
- GL_MIRRORED_REPEAT
- GL_CLAMP_TO_EDGE
- GL_CLAMP_TO_BORDER
透视矫正
noperspective
第六章 3D模型
1 程序构建模型
1.1 构建球体
- 在整个球体上,选择一系列圆形“水平切片”的精度
- 将每个原型切片的圆周若干等分
- 将顶点切分组成三角形
- 根据纹理图像的性质选择纹理坐标
- 对每个顶点计算法线
1.2 构建环
- 将一个顶点位于远点的右侧,在XY平面上的圆中,让这个顶点绕Z轴旋转形成“环”
- 将这个环“向外”移动“内半径”那么长距离。
- 围绕Y轴旋转最初的这个环,形成用来构成环面的其他环的顶点
2 加载外部模型
OBJ格式加载
- vn-顶点法线
- f-面
- v- 几何(顶点)数据
- vt-纹理