opengl-tutorial-cpp示例学习

示例一

内容:绘制第一个窗口

1.glfwWindowHint(GLFW_SAMPLES, 4);函数

抗锯齿化(多重采样):https://www.jianshu.com/p/c6d664c26f8e

2.gult/freeglut/glew/glfw/glad的联系与区别

https://blog.csdn.net/shliang310/article/details/123993668

实例二

内容:利用顶点缓冲对象绘制三角形

示例三

内容:矩阵变换

模型、观察、投影、MVP矩阵;模型、世界、观察、投影矩阵https://www.cnblogs.com/CodeReaper/p/15133771.html#%E4%B8%89%E5%90%84%E4%B8%AA%E5%9D%90%E6%A0%87%E7%B3%BB%E7%BB%9F

示例四

内容:利用顶点缓冲对象绘制,利用颜色缓冲着色

深度测试:http://www.opengl-tutorial.org/cn/beginners-tutorials/tutorial-4-a-colored-cube/

实例五

内容:加载纹理,UV坐标贴图

UV坐标、采样器:https://blog.csdn.net/weixin_44478077/article/details/124061067

实例六

内容:读取键盘和鼠标操作,计算MVP矩阵

背面剔除:https://blog.csdn.net/wangdingqiaoit/article/details/52267314

示例七

内容:模型加载,读取obj文件获取相关数组绘制

obj文件及导入:https://blog.csdn.net/silangquan/article/details/9707347

obj文件示例解释:https://blog.csdn.net/qq_22822335/article/details/50669653

示例八

内容:加入顶点的法线属性,渲染光照效果

mv矩阵、法线的作用,光照计算原理:

http://www.opengl-tutorial.org/cn/beginners-tutorials/tutorial-8-basic-shading/

示例九

内容:通过索引缓冲实现顶点复用

https://blog.csdn.net/jiexuan357/article/details/7727648

着色器文件不需要修改,cpp文件重点代码如下(以正方形为例):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
static const GLfloat position[] = {
-0.5f,-0.5f,
0.5f,0.5f,
-0.5f,0.5f,
0.5f,-0.5f
};
static const GLuint indices[] = {//索引数组为int类型,索引下标从0开始
0,1,2,
1,3,0
}
//除顶点缓冲外添加索引缓冲
GLuint elementbuffer;
glGenBuffers(1, &elementbuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elementbuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
//do循环中启动完顶点数组后
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elementbuffer);
glDrawElements(
GL_TRIANGLES,
sizeof(indices),
GL_UNSIGNED_INT, //此处数据类型要与GLuint相同!
(void*)0
);

示例九-2

内容:同一个着色器绘制两个图(注意不需要重复操作的部分)

示例九-3

内容:另一种读取纹理索引的封装函数(效果同示例九)

示例十

内容:透明(关闭背面剔除,启用混合函数)

两个混合函数:https://blog.csdn.net/weixin_42050609/article/details/125215948

在封装成纹理贴图的时,需要丢弃片段,混合函数用于渲染半透明的纹理。

如果不采用丢弃片段:

image-20221225152021510

此时可以将四边形背景颜色的透明度设置为0,图案的透明度设置为1(或者反过来),在片段着色器添加如下代码:

1
if(color.a < 1.0)discard;
image-20221225152327554

但是会丢弃一部分绘制的图案,可能图案与背景衔接的部分也是<1.0的,所以需要调节参数,如果把参数改成0.5:

示例十一

内容:2D文本(初始化,打印显示,删除)

示例十二

内容:opengl扩展函数debug

示例十三

内容:法线贴图显示凹凸感

http://www.opengl-tutorial.org/cn/intermediate-tutorials/tutorial-13-normal-mapping/

示例十四

内容:利用帧缓冲渲染纹理(帧缓冲/颜色附件/深度附件/四边形)

先正常绘制有纹理的图案,再绘制渲染了新纹理的四边形

https://www.cnblogs.com/dudujerry/p/13573649.html

示例十五

内容:利用软件创建静态光影,正常渲染

示例十六

内容:阴影贴图(渲染两次,第一次从光源视角,第二次主视角)

算法原理:https://copyfuture.com/blogs-details/202211130534068916

https://zhuanlan.zhihu.com/p/150570547

示例十六-1

内容:简化版,便于理解

示例十七

内容:利用欧拉和四元组进行物体旋转 旋转矩阵和平移放缩计算出模型矩阵,再计算MVP矩阵

欧拉原理:https://blog.csdn.net/D_XingGuang/article/details/97148669

旋转的时候一定要注意正向旋转还是反向旋转,在绘制背景图的时候,由于纹理只会渲染在四面形的一面,所以如果旋转反了会显示不出纹理。

正向:

image-20221225153133707

反向:

image-20221225153021951

示例十八

内容:绘制公告牌,正面永远正对相机方向

已知公告板(定义在世界空间)中心位置,先计算相机世界空间向量,根据此向量进行调整,调整后进入VP矩阵

公告板通过几何着色器利用四个顶点画出三角形条带(四边形)

示例十八-1

内容:绘制粒子,利用实例化数组和复用一次绘制大量物体

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码

请我喝杯咖啡吧~

支付宝
微信