OpenGL-learn
OpenGL
OpenGL简介
- 实质: 图形规范,并非API;具体由显卡商实现;
- 特点: 状态机
GLAT
OpenGL具体代码由硬件厂家实现,调用函数时需要实际函数的指针,GLAT库可以用来将函数指向具体实现。
图形渲染管线
着色器
标准化设备坐标
顶点着色器
Term
perspective:透视
orthographic:正射投影
frustum:平截头体
深度测试 Depth Testing
默认禁用,启用深度测试:
1 |
|
- glsl中 gl_FragCoord.z表示片段的深度缓冲值
禁止深度缓冲写入
1 |
|
深度缓冲将深度值映射到[0, 1],是非线性函数,物体离平截头体近平面越近,精度越高,离近平面越远,精度越低:$F_{depth} = \frac{1/z - 1/near}{1/far - 1/near}$
深度测试函数,规定在什么情况通过深度测试
1 |
|
深度冲突 Z-fighting
当物体紧密排列时,深度缓冲没有足够精度决定谁在前面,两个形状抢夺显示先后顺序。会有奇怪的显示,冲突解决方法:
- 不要把物体摆放太近
- 使用高精度深度缓冲
- 近平面设置远一点
模板测试 Stencil testing
由窗口库(GLFW)配置模板缓冲,默认禁用,启用模板测试:
1 |
|
模板掩码,stencil写入缓冲前先与stencil mask做与运算
1 |
|
- 模板函数:
1 |
|
用模板测试绘制物体边框
Blending
- source:源颜色,上面叠的颜色
- destination:目标颜色,底色
destination和source和绘制顺序相关
Framebuffer
point light
- create a cube map texture
- setting cube texture to GL_DEPTH_COMPONENT
- setting texture parameter
- shadow Projection & shadow view matrix
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!