皮皮网
皮皮网

【源码eboo】【答题源码】【超源码】opengl程序源码_opengl源代码

时间:2024-12-23 22:42:39 来源:微信点餐小程序源码前后端

1.CMake搭建OpenGL开发环境
2.opengl-01:源码编译
3.用Python和OpenGL探索数据可视化(基础篇)- 重构代码组织OpenGL核心对象包pygl
4.第一个OpenGL程序
5.C语言如何用OpenGL
6.OpenGL学习之旅(6)---imgui库使用

opengl程序源码_opengl源代码

CMake搭建OpenGL开发环境

       在Ubuntu.环境中搭建OpenGL开发环境,程序主要采用GLFW和GLAD。源码源代

       首先,程序编译GLFW,源码源代遵循GLFW官网提供的程序编译指南,利用CMake进行编译。源码源代源码eboo

       Ubuntu用户可以直接安装libglfw3-dev依赖。程序

       确认所使用的源码源代环境为X系统,并安装相应依赖。程序

       访问GLAD官网,源码源代下载zip压缩包,程序解压后将include文件夹移动到/usr/local/include目录,源码源代并将glad.c文件放置在工程目录中。程序

       创建测试工程,源码源代包含CMakeLists.txt文件和main.cpp。程序

       欲深入了解OpenGL,可参考LearnOpenGL CN主页。

       加入glm库,获取链接:github.com/g-truc/glm。

       步骤如下:直接将glm源码下载到thirdparty目录;

       修改CMakeLists.txt文件,加入相关配置。

       调整顶点着色器,添加模型常量句柄,以便与shader program链接。

       使用glm库旋转度,答题源码实现特定效果。

       最终结果如下所示。

opengl-:源码编译

       1 源码编译 + cmake + vscode

       系统环境:ubuntu ..6

       编译环境: g++9.4 cmake3..3

       编译工具:vscode

       1.1 glfw源码编译

        Release 3.3. · glfw/glfw 下载 glfw-3.3..zip

       安装依赖

       解压源码文件

       cmake配置

       编译工程 edgelee / vscode-opengl-tutorial -1-glfw

       1.2 glad源码编译

        glad.dav1d.de/ 选择配置内容(如图)

       生成源文件 glad.zip

       解压zip

       cmake配置

       一级CmakeList

       二级CmakeList

       编译工程 edgelee / vscode-opengl-tutorial -2-glad

       1.3 imgui源码编译(依赖系统OpenGL)

       imgui源码下载

       github.com/ocornut/imgu...

       ubuntu安装opengl

       解压zip

       cmake配置

       一级CmakeList

       二级CmakeList

       根据makefile内容配置CmakeList(imgui-1..4/examples/example_glfw_opengl3/Makefile)

       编译输出 edgelee / vscode-opengl-tutorial -3-imgui-(system-gl)

       1.4 imgui源码编译(不依赖系统OpenGL)

       imgui源码下载:同1.3

       ubuntu安装opengl:不需要(即使安装,不使用)

       解压zip:同1.3

       cmake配置

       一级CmakeList:同1.3

       二级CmakeList:去掉OpenGL依赖

       编译错误

       根据错误提示,修正

       imgui-1..4/backends/imgui_impl_glfw.cpp文件的添加

       编译结果 edgelee / vscode-opengl-tutorial -3-imgui-(no-system-gl)

       2 实例2.1 旋转三角形 glfw +glad

       源码文件:glfw-3.3./examples/simple.c(不采用glfw自带glad,修改到自编译glad)

       一级CmakeList

       二级CmakeList

       生成效果 edgelee / vscode-opengl-tutorial -sample-glfw-glad

       2.2 gui界面 glfw +imgui

       源码文件:imgui-1..4/examples/example_glfw_opengl3/main.cpp

       一级CmakeList

       二级CmakeList

       生成效果 edgelee / vscode-opengl-tutorial -sample-glfw-imgui

       2.3 gui界面 glfw +glda +imgui(建议方式)

       注:建议采用此方式,openGL api 统一使用 gdal api

       源码文件:imgui-1..4/examples/example_glfw_opengl3/main.cpp(修改到 gdal api)

       一级CmakeList

       二级CmakeList

       生成效果 edgelee / vscode-opengl-tutorial -sample-glfw-glad-imgui

用Python和OpenGL探索数据可视化(基础篇)- 重构代码组织OpenGL核心对象包pygl

       使用Python和OpenGL进行数据可视化的开发时,需要确保电脑支持OpenGL 4.5版本,可以通过检测显卡和OpenGL信息来确认。配置Windows下VS Code + Python + OpenGL开发环境的步骤也在文中有所提及。

       在上一节中,我们深入学习了OpenGL的核心对象顶点数组对象(VAO)和顶点缓存对象(VBO)之间的绑定,以及如何使用OpenGL绘制“线”。然而,在对比point_app.py和line_app.py后,可以发现一些明显的重复代码,如创建“着色器”、“程序”、VAO、VBO的过程。为遵循DRY(Don't Repeat Yourself)原则,有必要重构代码。

       首先,在"D:\pydev\pygl"目录下新建一个"pygl"子文件夹,超源码并在其中创建"shader.py"文件。在该文件中,定义了一个OpenGL着色器类,构造函数包含着色器类型和源代码文件名参数。类中定义了创建和删除着色器对象的方法,以及加载、编译着色器源代码的逻辑。

       接下来,在"pygl"文件夹下新建"program.py"文件,定义了OpenGL程序类,构造函数接收一个着色器对象列表作为参数。该类包含创建、使用、删除程序对象的方法,以及加载和链接着色器对象以形成最终程序的逻辑。

       进一步,创建了从"program.py"派生的"ProgramVF"类,专门用于创建只使用顶点着色器和片段着色器的OpenGL程序类。构造函数接收顶点和片段着色器源代码文件名作为参数,并自动创建、链接着色器对象,最后删除不再使用的对象。

       在"pygl"目录下,还创建了"vertexbufferobject.py"和"vertexarrayobject.py"文件,小程序 商城源码分别定义了顶点缓存对象(VBO)和顶点数组对象(VAO)类。这些类分别提供了创建、绑定、删除对象的方法,以及处理顶点数据和属性的逻辑。

       在"__init__.py"文件中,通过导入这些类,将"pygl"目录组织成一个Python包,使得用户可以轻松导入和使用其中的类。

       在"basic"文件夹中,新建"shaders"子文件夹,并在其中创建"line.vs"和"line.fs"文件,分别包含顶点和片段着色器代码。在"line_app_v1.py"文件中,导入重构后的"pygl"包,并使用新类创建OpenGL程序、顶点缓存和顶点数组对象,实现了"你好,线段!"功能,重构后代码精简明显,逻辑更清晰。

       对比"line_app_v1.py"和原始代码"line_app.py",重构后的朔源码源代码减少了重复代码,提高了代码的可读性和可维护性。重构工作不仅简化了代码结构,还通过使用面向对象方法提高了代码的模块化程度,使得后续扩展和修改变得更加容易。

第一个OpenGL程序

       初次接触游戏开发,近十个月的积累却首次编写OpenGL程序,即刻便陷入了一片混乱。然而,这个过程对初学者而言,却是不可或缺的宝贵经验。

       开发环境:VS Community Edition,一个兼容Windows开发的集成环境。

       依赖库:glew,即The OpenGL Extension Wrangler Library,作为API兼容层,为OpenGL提供了更广泛的访问和操作。glfw,GLFW库,是用于提供OpenGL环境的便利工具。

       配置准备:通过下载glew的binary版本来获得glew.dll、glew.h、glew.lib文件,使用glfw只需下载源代码,利用CMake进行编译,生成glfw3.lib、glfw3.h文件。

       设置环境:需配置头文件目录、库目录和链接库名。运行程序后会在x目录下生成文件,确保将glew.dll放入其中,否则在使用glew头文件时,程序会因找不到glew.dll而报错。

       开始编程:若未遵循特定顺序,会遭遇错误信息。为此,我们着手建立并运行两个简单的着色器,分别为顶点着色器和片元着色器,分别输出位置和固定颜色。

       流程步骤:1、创建着色器对象、关联代码、编译着色器源码。接着创建着色器程序、关联着色器对象、链接程序和使用程序。值得注意的是,确保程序链接状态,便于追踪并调试可能的错误。

       假设问题出现:如不正确地在代码中省略分号,将遇到特定的错误信息。正确执行以下步骤:定义顶点,创建缓冲对象,初始化缓冲对象,生成VAO,绑定VAO和缓存,并设置顶点数据值。最后,启用顶点数组。

       初始化窗口环境:遵循模板代码编写,特别强调在代码中加入glfwMakeContextCurrent(window)行,确保设置当前环境为窗口所关联的OpenGL环境。避免忽略此步骤导致gl调用无法执行。

       程序执行效果:成功运行,实现了第一个OpenGL程序,尽管过程繁复且可能遇到各种困难。对于有图形学基础和C++背景的开发者来说,这无疑为今后更深入的OpenGL学习打下了坚实基础。

       展望未来:此过程既是一个挑战,也是一个新的起点。对于希望探索并深入OpenGL开发领域的开发者来说,这是不断积累经验、优化环境和提高编程技能的良好开端。尽管时间投入和挑战并存,但持之以恒的学习和探索,定将逐步开启通往更高级图形编程世界的大门。

C语言如何用OpenGL

       OpenGL就是基于C语言的,只需要下载OpenGL的SDK库安装即可,在编写源码时:

       1、添加头文件glut.h。

       注意glut.h文件中已经包含gl.h,glu.h在实际编译中可以只加入头文件glut.h,很多相关的例子都是这样的,但是在mingwstudio上编译发现,在glut.h前还是需要加入glu.h, gl.h.如:

       #include <gl/gl.h>

       #include <gl/glu.h>

       #include <gl/glut.h>

       2、在工程中添加OpenGL的库,有关命令行加入,glu opengl glut库就可以编译了。

OpenGL学习之旅(6)---imgui库使用

       在OpenGL学习之旅的第六部分,我们将探索如何将imgui库集成到我们的项目中,为OpenGL程序增添交互性。首先,我们从GitHub上克隆imgui库的源码,并确保将其编译成动态库以便于链接至可执行程序。在CMakeLists.txt文件中,我们需添加编译imgui库中源文件的路径,同时确保链接到glfw库和opengl库。

       在我们的main函数中,包含imgui头文件后,我们进行初始化。随后,在渲染循环中创建imgui窗口帧,并显示默认窗口。在渲染部分,我们需要更新imgui窗口,以实现动态交互。最后,在程序结束时释放imgui资源。

       通过imgui窗口,我们可以动态调试3D空间变换。首先定义用于动态调试的变量,如旋转轴和旋转角度,以及平移向量,用于调整透视投影变换中的视场角。在渲染循环中,将这些变量添加至imgui窗口中,以便用户能够实时观察3D变换效果。运行程序后,用户能够通过调节参数,如帧率,动态观察3D空间变换。

       本文总结了使用imgui进行动态调试参数的流程,并提供了main.cpp与CMakeLists.txt的完整源码。

OpenGL中gltranslate()的函数代码,我会用这个函数,我要的是这个函数的实现代码

           是这样的,你电脑上OpenGL的实现代码其实是不可能看到的,它是跟着显卡走的,应该在显卡驱动程序里(或许是用汇编实现的),这是我的认识。

           但并不是没有办法了,Mesa一直以开源的形式实现了OpenGL的一些接口,我们可以拿来学习和参考,比如你说的这个translate接口,其实就是一个模型矩阵运算问题,我摘抄了Mesa的m_matrix.c文件里的实现:

void _math_matrix_translate( GLmatrix *mat, GLfloat x, GLfloat y, GLfloat z )

       {

          GLfloat *m = mat->m;

          m[] = m[0] * x + m[4] * y + m[8]  * z + m[];

          m[] = m[1] * x + m[5] * y + m[9]  * z + m[];

          m[] = m[2] * x + m[6] * y + m[] * z + m[];

          m[] = m[3] * x + m[7] * y + m[] * z + m[];

          mat->flags |= (MAT_FLAG_TRANSLATION |

        MAT_DIRTY_TYPE |

        MAT_DIRTY_INVERSE);

       }

       Mesa的网址是www.mesa3d.org,你可以去down代码。

更多内容请点击【百科】专栏