1.用Python和OpenGL探索数据可视化(三维篇)- 与照相机“共舞”
2.用Python和OpenGL探索数据可视化(三维篇)- 创建三维坐标轴类和立方体类
3.用Python和OpenGL探索数据可视化(基础篇)- OpenGL简介及演化
4.用Python和OpenGL探索数据可视化(基础篇)- 重构代码组织OpenGL核心对象包pygl
5.CMake搭建OpenGL开发环境
6.opengl-01:源码编译
用Python和OpenGL探索数据可视化(三维篇)- 与照相机“共舞”
本文深入探索使用Python和OpenGL进行三维数据可视化。大型首先,源码源码确保您的下载设备支持OpenGL 4.5版本,推荐于年之后生产的大型电脑。其次,源码源码配置开发环境,下载书法字典app源码包括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...
用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文件夹的影视聚合vipapp源码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探索数据可视化(基础篇)- “你好,线段!ps房源展示源码”》;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探索数据可视化(基础篇)- 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探索数据可视化(基础篇)- 重构代码组织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",重构后的源代码减少了重复代码,提高了代码的可读性和可维护性。重构工作不仅简化了代码结构,还通过使用面向对象方法提高了代码的模块化程度,使得后续扩展和修改变得更加容易。
CMake搭建OpenGL开发环境
要为Ubuntu .系统搭建OpenGL开发环境,首先确保安装必要的依赖。通过`apt-get`安装`libglfw3-dev`,这将为GLFW库提供基础支持。针对X或Wayland系统,记得安装相应的图形库。接下来,从GitHub克隆GLFW的源码,以便进行本地构建:
```bash
git clone /glfw/glfw.git
```
使用CMake构建GLFW,配置CMakeLists.txt文件,将GLFW的源代码目录指定为构建目标:
```cmake
cmake -S path/to/glfw -B build
cmake --build build
```
安装GLAD库时,访问官网下载包含头文件的include文件夹,将其移动到`/usr/local/include`,并将`glad.c`文件放置在你的项目目录中。在CMakeLists.txt中添加GLAD的链接,以确保其在编译时可用:
```cmake
find_package(GLFW REQUIRED)
find_package(GLAD REQUIRED)
include_directories(${ GLAD_INCLUDE_DIRS})
add_executable(main main.cpp)
target_link_libraries(main glfw glad)
```
在`main.cpp`中,编写核心代码来初始化窗口、加载GLAD函数指针、创建和编译shader程序、设置顶点数组对象(VAO)和缓冲区(VBO),并进行基本的OpenGL渲染:
```cpp
// GLFW初始化
if (!glfwInit()) {
std::cerr << "Failed to initialize GLFW" << std::endl;
return -1;
}
// GLAD加载
if (!gladLoadGLLoader(glfwGetProcAddress)) {
std::cerr << "Failed to initialize GLAD" << std::endl;
glfwTerminate();
return -1;
}
// 创建顶点着色器和顶点数组对象
std::vector vertices = { ...};
unsigned int VBO, VAO;
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glBindVertexArray(VAO);
// 着色器程序和顶点数据
std::string vertexShaderSource = /*...*/;
std::string fragmentShaderSource = /*...*/;
// (编译、链接、设置顶点数据)
// 渲染循环
while (!glfwWindowShouldClose(window)) {
// 清空颜色缓冲,绘制三角形,交换双缓冲
// 处理用户输入和窗口回调
}
// 释放资源
glfwTerminate();
```
在这个过程中,我们引入了glm库,用于进行三维数学计算,如旋转度。在CMakeLists.txt中添加对glm的依赖和链接:
```cmake
find_package(glm REQUIRED)
target_link_libraries(main ${ GLM_INCLUDE_DIRS})
```
通过这些步骤,你将在Ubuntu .上成功搭建一个基于GLFW和GLAD的OpenGL开发环境,实现窗口创建、基本渲染功能以及使用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