OpenGl着色器简单范例
新手将书本代码反复调试,始终无法运行。经过长时间搜索,最终成功实现了一个定点着色器和片元着色器的运行。
1、 首先,使用VS2013英文版创建C++控制台应用程序,并添加相关文件(如.cpp或.h)。需要注意的是,添加文件后可通过重命名方式修改后缀名,例如将文件改为.vert格式。这一操作方法已有相关经验分享。
2、 依次添加5个文件,文件名所示。这些名称源于文档中相关调用,若需重命名,须明确修改位置,后续将陆续提供代码。
3、 尝试用VS2013调试运行C/C++代码,体验开发环境。

4、 其次,下载所需的OpenGL相关文件(包括.h、.lib、.dll),可前往官网或相关学习网站获取。

5、 接下来是配置,相关经验已上传。
6、 OpenGl与2013英语版的配置对比
7、 请将以下代码(见图)填写到名为minimal.vert的文件中。
8、 {
9、 }

10、 请将以下代码(见图)填写到名为minimal.frag的文件中。
11、 {
12、 }

13、 请将以下代码填入文件 textfile.h 中。
14、 char *textFileRead(char *fn); // 用于读取指定文件内容
15、 将字符串写入指定文件的函数,参数为文件名和要写入的字符串内容。

16、 请在文件 textfile.cpp 中填写以下代码:
17、 {
18、 {
19、 请打开文件
20、 {
21、 {
22、 }
23、 }
24、 }
25、 }
26、 {
27、 {
28、 开启文件
29、 {
30、 }
31、 }
32、 }


33、 请在textfile.cpp文件中填写以下代码,实现图一效果,可自行修改片源着色器以调整颜色。
34、 静态浮点数变量degree初始化为0,用于表示茶壶旋转的角度值。
35、 /**
36、 处理窗口尺寸变化的情况
37、 设置窗口宽度参数,单位为像素。
38、 窗口高度参数,用于设置窗口的高。
39、 **/
40、 {
41、 视口需要重新定义
42、 重新设定投影转换参数
43、 如果高度为0,则将其设为1,避免出现除以0的错误。
44、 计算宽高比,将宽度和高度进行比较,得出比例值。
45、 将当前矩阵设置为投影矩阵,用于定义相机的投影方式和视图范围。
46、 清空投影矩阵,重新设置为单位矩阵,准备进行新的变换操作。
47、 gluPerspective(45, ratio, 1, 1000) 用于重新设置投影矩阵,定义视角为45度,宽高比为ratio,近截面为1,远截面为1000。
48、 视点变换:从模型角度出发
49、 将当前矩阵设置为模型视图矩阵,以便进行后续的变换操作。
50、 }
51、 /**
52、 用于展示内容的函数
53、 **/
54、 {
55、 清空颜色缓冲区和深度缓冲区,以准备绘制新的图像内容。这是通过位或操作实现的。
56、 清空模型视点矩阵,重新设置为单位矩阵,以便进行新的变换操作。
57、 换个角度看问题
58、 模型变换:旋转中的茶壶
59、 画一个茶壶
60、 degree增加0.1,用于调整旋转角度。
61、 交换双缓存模式下的缓冲区,以实现图像显示更新。
62、 }
63、 /**
64、 处理键盘事件,按下Esc键可退出程序。
65、 **/
66、 {
67、 }
68、 /**
69、 打印OpenGL错误信息函数简述
70、 * @param file 出现错误的文件
71、 @param line 错误出现的行号
72、 **/
73、 {
74、 glErr = glGetError(); // 检查并获取当前的OpenGL错误状态
75、 {
76、 glErr = glGetError(); // 获取下一个错误代码
77、 }
78、 }
79、 /**
80、 打印日志信息,便于调试程序使用。
81、 **/
82、 {
83、 {
84、 }
85、 }
86、 /**
87、 设置着色器程序
88、 **/
89、 {
90、 创建空白顶点着色器对象,并返回其句柄。
91、 创建顶点着色器对象,用于处理顶点相关的图形渲染任务,返回值为 v。
92、 创建片元着色器对象,用于图形渲染管线中处理片段颜色。此对象将按照指定的ARB扩展规范生成。
93、 加载着色器程序源代码文件
94、 vs = textFileRead(minimal.vert) // 读取顶点着色器源代码字符串
95、 读取片元着色器源代码字符串:fs = textFileRead(minimal.frag);
96、 添加至字符串数组中
97、 向空白着色器提交着色器源代码字符串数组。
98、 glShaderSourceARB() 函数的参数列表如下:
99、 GLhandleARB shader:着色器,用于图形渲染中处理顶点和片段的程序对象。
100、 GLuint nstrings 表示字符串数组的元素数量,此例中仅含一个字符串。
101、 /// const GLcharARB strings —— 字符串数组,表示多个字符串的集合
102、 GLint *lengths —— 指向字符串数组长度的数组,若为 NULL,则表示所有字符串均以 null 结尾。
103、 释放字符串占用的内存空间,完成资源清理。
104、 Compile the source code.
105、 重新表述为:
106、 编译源代码文件。
107、 输出日志信息
108、 创建空白程序对象并返回句柄
109、 将着色器对象链接到程序对象中。
110、 连接程序对象并打印日志信息。
111、 安装程序对象已准备就绪
112、 }
113、 /**
114、 主函数:程序的入口点。
115、 **/
116、 {
117、 负责创建窗口的函数
118、 glutInit(&argc, argv); // 用于初始化GLUT库,并解析命令行参数
119、 初始化显示模式,设置深度缓存、双缓存和RGBA颜色模式,以便实现更高效的图形渲染和颜色呈现效果。这一配置为后续绘制复杂图形提供了必要的支持与保障。
120、 设置窗口左上角位置为 (100, 100),作为初始坐标点,确定显示区域的起始位置。
121、 glutInitWindowSize(320, 320); // 设置窗口大小为320x320像素
122、 创建窗口:glutCreateWindow(GLSL的第一步);这是设置窗口标题并初始化窗口的过程。
123、 完成各类回调函数的注册
124、 注册显示回调函数 renderScene,使用 glutDisplayFunc 函数进行绑定,以便渲染场景。
125、 glutIdleFunc(renderScene); // 注册空闲函数,事件循环空闲时调用 renderScene 进行渲染
126、 注册窗口大小改变的回调函数 changeSize,使用 glutReshapeFunc 实现。
127、 glutKeyboardFunc 注册了 processNormalKeys 作为键盘输入的回调函数,用于处理正常按键事件。
128、 启动必要的功能
129、 启用OpenGL的深度测试功能,以确保图形渲染时的正确深度显示效果。
130、 启用多边形背面剔除功能,优化渲染性能,减少不必要的计算资源消耗。
131、 glClearColor(1.0, 1.0, 1.0, 1.0); // 设置背景清除颜色为白色
132、 初始化GLEW以支持OpenGL功能扩展。
133、 检测设备是否支持基础的顶点与片元着色器功能
134、 {
135、 }
136、 {
137、 }
138、 设置着色器:调用 setShaders() 方法完成配置。
139、 进入主循环,程序开始运行。
140、 }


文章标题:OpenGl着色器简单范例
文章链接://www.hpwebtech.com/jiqiao/329362.html
为给用户提供更多有价值信息,ZOL下载站整理发布,如果有侵权请联系删除,转载请保留出处。
- 上一问:VS配置OpenGL方法
- 下一问:学而思怎么开启OpenGL渲染
其他类似技巧
- 2025-04-02 13:15:01Rhino6下的OpenGL怎样关闭GPU细分
- 2025-04-02 12:26:02搜狐影音如何设置渲染模式为OpenGL
- 2025-04-02 10:57:01OpenGL或显卡驱动版本太低怎么办
- 2025-04-02 07:58:01Win8.1下的OpenGL配置
- 2025-04-02 07:36:01搜狐影音设置渲染模式为OpenGL
- 2025-04-02 07:07:01怎么把GPU渲染程序改为OpenGL(Skia)?
- 2025-04-02 06:59:01OpenGL 的安化与配置指南 1
- 2025-04-01 21:18:01怎么知道自己电脑opengl是什么版本
- 2025-04-01 18:20:02Artlantis2019怎么设置openGL状态为线框
- 2025-04-01 16:33:01OpenGL 学习资料中的常见问题
OpenGL软件简介
软件基础简介opengl2.0官方版是一款专业强大的驱动程序。opengl2.0最新版能够帮助用户有效地解决电脑显卡显示的问题,让你的电脑快速识别显卡驱动,使其可以正常的使用。opengl2.0程序的安装过程比较简单,同时也可以进行驱动的升级,支持win7、win10等多个操作系统。软件特性全写Open Graphics Library,定义了一个跨编程... 详细介绍»





