1.C语言如何用OpenGL
2.用Python和OpenGL探索数据可视化(基础篇)- OpenGL简介及演化
3.用Python和OpenGL探索数据可视化(三维篇)- 创建三维坐标轴类和立方体类
4.OpenGL学习之旅(6)---imgui库使用
5.opengl-01:源码编译
6.用Python和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库就可以编译了。源码
用Python和OpenGL探索数据可视化(基础篇)- OpenGL简介及演化
在年三十,分析祝福各位知友在甲辰龙年身体健康、源码万事如意!分析
OpenGL,源码即开放图形库,是应用于图形硬件的API。它由数百个子程序和函数构成,旨在帮助程序员指定着色器程序、对象及操作,以生成高质量图形图像,特别是三维对象的彩色图像。
OpenGL成为行业标准,因其独立于窗口系统和操作系统,使软件开发者在各种设备上(如手机、平板、台式机、笔记本、工作站及超级计算机)能够开发高性能、视觉效果引人注目的二维、三维图形软件。这些应用覆盖了如CAD、CAE、科学可视化、霸王 指标源码内容创作、能源、娱乐、游戏开发、制造、医疗和虚拟现实等多个领域。
Khronos Group自年起负责OpenGL API规范的制定,截至年2月,官方已发布个版本。对于OpenGL的详细发展历史,可访问Khronos Group的官方网站。OpenGL使用的渲染管线和核心对象自4.3版本后基本稳定,如图所示。
考虑到计算机图形硬件的迅速发展,Khronos Group从年起开始开发新一代OpenGL,即Vulkan。Vulkan是一种比OpenGL更接近硬件的低级API,可直接控制GPU,从而在各种硬件上实现更高效的渲染和更好的性能。
掌握OpenGL中的渲染管线、着色器及GLSL对学习和应用Vulkan仍然有所帮助。
如需查阅更多详细信息,可参考以下链接:
registry.khronos.org/Op...
khronos.org/opengl/
khronos.org/opengl/wiki...
本系列文章的源代码已上传至Gitee。
以下为文章系列摘要:
1. 《用Python和OpenGL探索数据可视化(基础篇)- 你好,窗口!》
2. 《用Python和OpenGL探索数据可视化(基础篇)- 你好,OpenGL!》
3. 《用Python和OpenGL探索数据可视化(基础篇)- 你好,ImGui!》
4. 《用Python和OpenGL探索数据可视化(基础篇)- 你好,小不点!》
5. 《用Python和OpenGL探索数据可视化(基础篇)- 重构代码“你好,小不点!红桃棋牌源码”》
6. 《用Python和OpenGL探索数据可视化(基础篇)- “你好,线段!”》
7. 《用Python和OpenGL探索数据可视化(基础篇)- 重构代码组织OpenGL核心对象包pygl》
8. 《用Python和OpenGL探索数据可视化(基础篇)- 你好,三角形!》
9. 《用Python和OpenGL探索数据可视化(基础篇)- 改进OpenGL程序Program类》
. 《用Python和OpenGL探索数据可视化(基础篇)- 你好,矩形!》
. 《用Python和OpenGL探索数据可视化(基础篇)- 完善pygl增加索引缓存对象EBO》
. 《用Python和OpenGL探索数据可视化(基础篇)- 你好,纹理!》
. 《用Python和OpenGL探索数据可视化(基础篇)- 完善pygl增加OpenGL二维纹理对象》
. 《用Python和OpenGL探索数据可视化(基础篇)- 细说纹理环绕》
. 《用Python和OpenGL探索数据可视化(基础篇)- 细说纹理过滤》
. 《用Python和OpenGL探索数据可视化(基础篇)- 处理键盘和鼠标事件》
. 《用Python和OpenGL探索数据可视化(三维篇)- 你好,坐标轴》
. 《用Python和OpenGL探索数据可视化(三维篇)- 用立方体体验模型矩阵》
. 《用Python和OpenGL探索数据可视化(三维篇)- 创建三维坐标轴类和立方体类》
. 《用Python和OpenGL探索数据可视化(三维篇)- 与照相机“共舞”》
. 《用Python和OpenGL探索数据可视化(三维篇)- 创建照相机类》
. 《用Python和OpenGL探索数据可视化(三维篇)- 四元数和轨迹球照相机》
用Python和OpenGL探索数据可视化(三维篇)- 创建三维坐标轴类和立方体类
本系列文章讲解使用Python与OpenGL 4.5进行数据可视化开发,确保您的计算机支持OpenGL 4.5版本,建议阅读《准备工作(一)Windows下检测显卡和OpenGL信息》以确认兼容性。继续参阅《准备工作(二)配置Windows下VS Code + Python + OpenGL开发环境》以完成所需开发环境的设置。
上一节我们通过立方体学习了OpenGL的变换矩阵与模型矩阵。紧接着在《用Python和OpenGL探索数据可视化(三维篇)- 你好,坐标轴》一节中我们绘制了三维坐标轴。立方体与坐标轴是三维图形绘制中常见的元素,因此我们将在本节中通过代码重构将它们转化为专门类,以便后续的重复使用。
开始VS Code,使用File菜单下的“Open Folder”功能,打开D:\pydev\pygl并进入common文件夹,新建一个名为shaders的子文件夹。将basic文件夹下的shaders子文件夹中的axes.vs、axes.fs、cube.vs、cube.fs文件复制至common文件夹的shaders文件夹。
在common文件夹中新建axeshelper.py文件,并在其中输入相应代码。同样地,创建cube.py文件并输入对应代码。接着,在common文件夹中建立__init__.py文件,直播社群源码并在其中输入必要的代码。
在basic文件夹中新建一个名为cube_app_v1.py的文件,并在其中输入相应的代码。点击VS Code右上角的三角形图标以运行代码,此时会呈现预期的结果。
借助坐标轴的辅助,图形变换变得清晰且有趣。通过本系列文章中的源代码资源,您可以进一步探索和实践Python与OpenGL的数据可视化开发。
参考系列文章:1.《用Python和OpenGL探索数据可视化(基础篇)- 你好,窗口!》;2.《用Python和OpenGL探索数据可视化(基础篇)- 你好,OpenGL!》;3.《用Python和OpenGL探索数据可视化(基础篇)- 你好,ImGui!》;4.《用Python和OpenGL探索数据可视化(基础篇)- 你好,小不点!》;5.《用Python和OpenGL探索数据可视化(基础篇)- 重构代码“你好,小不点!”》;6.《用Python和OpenGL探索数据可视化(基础篇)- “你好,线段!”》;7.《用Python和OpenGL探索数据可视化(基础篇)- 重构代码组织OpenGL核心对象包pygl》;8.《用Python和OpenGL探索数据可视化(基础篇)- 你好,三角形!》;9.《用Python和OpenGL探索数据可视化(基础篇)- 改进OpenGL程序Program类》;.《用Python和OpenGL探索数据可视化(基础篇)- 你好,矩形!》;.《用Python和OpenGL探索数据可视化(基础篇)- 完善pygl增加索引缓存对象EBO》;.《用Python和OpenGL探索数据可视化(基础篇)- 你好,纹理!》;.《用Python和OpenGL探索数据可视化(基础篇)- 完善pygl增加OpenGL二维纹理对象》;.《用Python和OpenGL探索数据可视化(基础篇)- 细说纹理环绕》;.《用Python和OpenGL探索数据可视化(基础篇)- 细说纹理过滤》;.《用Python和OpenGL探索数据可视化(基础篇)- 处理键盘和鼠标事件》;.《用Python和OpenGL探索数据可视化(三维篇)- 你好,坐标轴》;.《用Python和OpenGL探索数据可视化(三维篇)- 用立方体体验模型矩阵》。
OpenGL学习之旅(6)---imgui库使用
在OpenGL学习之旅的第六部分,我们将探索如何将imgui库集成到我们的项目中,为OpenGL程序增添交互性。首先,htlm源码解析我们从GitHub上克隆imgui库的源码,并确保将其编译成动态库以便于链接至可执行程序。在CMakeLists.txt文件中,我们需添加编译imgui库中源文件的路径,同时确保链接到glfw库和opengl库。
在我们的main函数中,包含imgui头文件后,我们进行初始化。随后,在渲染循环中创建imgui窗口帧,并显示默认窗口。在渲染部分,我们需要更新imgui窗口,以实现动态交互。最后,在程序结束时释放imgui资源。
通过imgui窗口,我们可以动态调试3D空间变换。首先定义用于动态调试的变量,如旋转轴和旋转角度,以及平移向量,用于调整透视投影变换中的视场角。在渲染循环中,将这些变量添加至imgui窗口中,以便用户能够实时观察3D变换效果。运行程序后,用户能够通过调节参数,如帧率,动态观察3D空间变换。
本文总结了使用imgui进行动态调试参数的流程,并提供了main.cpp与CMakeLists.txt的完整源码。
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探索数据可视化(三维篇)- 与照相机“共舞”
本文深入探索使用Python和OpenGL进行三维数据可视化。首先,确保您的设备支持OpenGL 4.5版本,推荐于年之后生产的电脑。其次,配置开发环境,包括VS Code、Python和OpenGL。利用Python和OpenGL,我们能将三维世界的图形映射至二维屏幕,理解空间变换的重要性。
通过绘制三维坐标轴和立方体,我们已经学习了OpenGL如何通过一系列数学变换将三维世界映射至屏幕。本节将重点介绍视图矩阵和投影矩阵,它们是开发人员进行空间变换的关键。您可以通过代码实践更好地理解这些概念。
为了实践,打开VS Code,选择“Open Folder”,在D:\pydev\pygl的basic文件夹下新建文件camera_app.py。输入代码,运行VS Code,您将看到交互式界面,包含三个滑动条用于控制照相机的位置、目标及视野、近面和远面。通过调整滑动条,可以实时改变照相机的视角,观察三维模型。点击“使用顶点颜色”切换立方体的显示模式,或点击“重置”恢复初始设置。
本文系列提供丰富的资源和代码示例,帮助您深入学习使用Python和OpenGL进行数据可视化。从基础篇到三维篇,每篇文章都详细介绍了OpenGL的使用技巧,旨在让开发者掌握三维数据可视化的核心知识。
欲获取源代码及更多资源,请访问:gitee.com/eagletang/pyg...
OpenGL - 教程 -调试图形学
图形编程的确能带来乐趣,但错误的渲染或完全未渲染都会让人沮丧。在与像素打交道时,找到问题源头往往困难重重。与CPU调试不同,OpenGL调试没有控制台输出,不能在GLSL代码中设置断点,也无法检查GPU运行状态。下面介绍一些调试OpenGL程序的技巧,这些技巧将大大帮助你解决问题。
首先,了解OpenGL中的用户错误标记。当你使用OpenGL不当(例如在绑定之前配置缓冲)时,它会检测到错误,并在幕后生成用户错误标记。通过调用glGetError()函数,可以查询这些错误标记并返回错误值。例如,glBindTexture()函数的文档中列出了所有可能生成的用户错误代码。
值得注意的是,glGetError()在每次调用后会清除所有错误标记,因此在循环中调用该函数以检查每帧可能的错误更为合适。在分布式系统(如X)中,glGetError()只会清除一个错误代码标记,这意味着在多次调用之间可能有多个错误发生。
利用glGetError()定位错误来源非常有效,通过在代码中各处调用它,可以快速确定OpenGL错误的源头。此外,可以编写辅助函数将错误代码与错误发生的位置(使用预处理器指令__FILE__和__LINE__)结合打印出来,便于追踪错误。
对于OpenGL 4.3及以上版本,可以使用调试输出拓展,它直接将更详细的信息发送给用户,有助于使用调试器捕捉错误源头。在GLFW中请求调试输出非常简单,只需要在创建窗口之前设置提醒。调试输出上下文启用后,每次不正确的OpenGL指令都会提供大量有用的错误信息。
利用调试输出,可以很容易地找到错误发生的准确行号或调用。通过在特定错误类型或函数顶部设置断点,调试器在抛出错误时捕捉信息,帮助快速定位问题。此外,可以使用glDebugMessageInsert()函数自定义错误输出,方便与使用调试输出的程序或OpenGL代码协同开发。
对于GLSL着色器,虽然无法直接使用如glGetError()的函数,但可以利用输出变量到帧缓冲的颜色通道来快速检查着色器代码的正确性。通过观察视觉结果,可以快速识别变量是否显示了正确的值。这种方法适用于检查法向量、纹理等变量是否正确传递。
确保你的着色器代码符合GLSL规范,可以使用OpenGL GLSL参考编译器进行检查。下载可执行版本或完整源码,将着色器文件作为参数传递,编译器会报告任何规范不符合的情况。
显示帧缓冲的内容是调试的一个好方法,特别是当帧缓冲在幕后运行时。通过简单的着色器编写一个助手函数,可以在屏幕右上角快速显示任何纹理,以便检查帧缓冲输出。这种方法能让你对帧缓冲内容保持持续反馈。
在遇到上述方法无法解决问题时,可以使用第三方调试软件。这些工具通常可以注入OpenGL驱动,拦截各种OpenGL调用,提供大量有用的数据,如性能测试、缓冲内存检查、纹理和帧缓冲附件显示等。适合大规模产品代码开发。
推荐的调试工具包括gDebugger、RenderDoc、CodeXL、NVIDIA Nsight等,它们在不同方面提供强大支持。每款工具都有其优点和适用场景,选择最适合你需求的工具。
OpenGL 着色器详解
GLSL语言
GLSL(OpenGL Shading Language)专用于编写着色器,通过定义main函数的程序片段,指导渲染引擎渲染内容。
GLSL语法类似C语言,增加特定关键字修饰变量。基本结构如下:声明GLSL版本、模式、变量,主函数main处理输入输出。
输入变量in
GLSL允许有限输入变量,硬件决定数量,可通过GL_MAX_VERTEX_ATTRIBS查询上限。
输出变量out
片段着色器直接输出色值,无需与后续阶段关联。可通过一致数据类型和名称建立顶点着色器到片段着色器间联系。
全局变量
全局变量作用于整个着色器程序,可在多个着色器间共享,通过GL编码获取。
示例:片段着色器中使用全局变量。
顶点着色器与片段着色器
顶点着色器声明位置与颜色变量,片段着色器声明一致输入变量接收颜色,实现数据传递。
数据类型
向量类型定义、重组用于复杂数据结构。
glVertexAttribPointer
设置顶点变量属性,定义步长、偏移与位置,用于配置顶点数据。
顶点数据、着色器配置
顶点着色器声明输入变量,片段着色器接收传递颜色,完成数据流。
着色器程序
着色器程序作为最小绘制单元,由两个着色器决定结果。面向对象封装着色器程序。
加载着色器代码梳理
流程包括:创建着色器对象、附加源码编译、创建程序、绑定与链接。
着色器程序类封装
2024-12-24 09:56
2024-12-24 09:26
2024-12-24 09:17
2024-12-24 08:24
2024-12-24 08:11
2024-12-24 07:28