1.用Python和OpenGL探索数据可视化(基础篇)- 细说纹理环绕
2.OpenGL学习之旅(6)---imgui库使用
3.用Python和OpenGL探索数据可视化(实践篇)- Mesh网格模型查看器(中)
4.用Python和OpenGL探索数据可视化(三维篇)- 与照相机“共舞”
5.用Python和OpenGL探索数据可视化(基础篇)- 你好,渲染渲染纹理!源码
6.CMake搭建OpenGL开发环境
用Python和OpenGL探索数据可视化(基础篇)- 细说纹理环绕
本系列文章将指导如何使用Python与OpenGL 4.5进行数据可视化开发。代码首先,渲染渲染请参考《准备工作(一)Windows下检测显卡和OpenGL信息》以确认您的源码电脑支持OpenGL 4.5版本。接着,代码扫描web源码《准备工作(二)配置Windows下VS Code + Python + OpenGL开发环境》将帮助您设置开发环境。渲染渲染
在《用Python和OpenGL探索数据可视化(基础篇)- 你好,源码纹理!代码》一文后,渲染渲染您已学习如何在物体的源码“面”上贴上复杂色彩,通过《用Python和OpenGL探索数据可视化(基础篇)- 完善pygl增加OpenGL二维纹理对象》形成了单独的代码OpenGL二维纹理类ImageTexture2D。本节我们探讨如何利用ImageTexture2D详细解释纹理环绕的渲染渲染概念。
在“画图”工具中打开D:\pydev\pygl\textures\cratetex.png,源码并将其另存为cratetex_text.png。代码在原有基础上添加“GL”文字。在VS Code中创建texture_wrap_app.py文件,输入特定代码并运行。
改变垂直环绕方式为GL_CLAMP_TO_EDGE,分别调整水平环绕方式,您将看到不同的输出效果。接着,将垂直环绕更改为GL_REPEAT,再次调整水平环绕,观察结果变化。类似地,当垂直环绕为GL_MIRRORED_REPEAT时,改变水平环绕会得到新的输出。最后,保持垂直环绕为GL_CLAMP_TO_BORDER,改变水平环绕,您将看到更多样化的输出。
通过对比这些截图,结合ImageTexture2D类的setWrapMode方法的使用,您可以更深入地理解纹理环绕的机制。例如,当纹理坐标不在0到1之间时,OpenGL会重复绘制纹理。
在代码第-行,素材cms源码定义了矩形的顶点属性,需要注意纹理坐标的范围。在《用Python和OpenGL探索数据可视化(基础篇)- 你好,纹理!》一文中提到,纹理坐标的范围是0到1,但这里的坐标范围超出这一范围,导致重复绘制纹理。结合setWrapMode方法,当使用GL_REPEAT、GL_MIRRORED_REPEAT、GL_CLAMP_TO_EDGE或GL_CLAMP_TO_BORDER时,OpenGL会根据不同的设置重复、镜像重复或使用边缘或指定边界颜色绘制纹理。
代码第、行定义了类属性wrap_s_mode和wrap_t_mode,用于保存纹理环绕的具体设置值。第行设置了边界颜色为蓝色,第、行定义了ImGui窗口的宽度和高度。第行设置纹理过滤参数。第-行使用ImGui的单选按钮为wrap_s_mode和wrap_t_mode设置不同的环绕数值。第行调用setWrapMode方法更新纹理环绕参数,影响绘制结果。最后,第-行展示了设置纹理对象tex的边界颜色的效果。
本文系列源代码已上传至gitee.com/eagletang/pygl...(链接省略)。相关文章包括但不限于《用Python和OpenGL探索数据可视化(基础篇)- 你好,窗口!》、《用Python和OpenGL探索数据可视化(基础篇)- 重构代码“你好,小不点!”》等,为您的学习提供全面指导。
OpenGL学习之旅(6)---imgui库使用
在OpenGL学习之旅的第六部分,我们将探索如何将imgui库集成到我们的项目中,为OpenGL程序增添交互性。首先,app变成源码我们从GitHub上克隆imgui库的源码,并确保将其编译成动态库以便于链接至可执行程序。在CMakeLists.txt文件中,我们需添加编译imgui库中源文件的路径,同时确保链接到glfw库和opengl库。
在我们的main函数中,包含imgui头文件后,我们进行初始化。随后,在渲染循环中创建imgui窗口帧,并显示默认窗口。在渲染部分,我们需要更新imgui窗口,以实现动态交互。最后,在程序结束时释放imgui资源。
通过imgui窗口,我们可以动态调试3D空间变换。首先定义用于动态调试的变量,如旋转轴和旋转角度,以及平移向量,用于调整透视投影变换中的视场角。在渲染循环中,将这些变量添加至imgui窗口中,以便用户能够实时观察3D变换效果。运行程序后,用户能够通过调节参数,如帧率,动态观察3D空间变换。
本文总结了使用imgui进行动态调试参数的流程,并提供了main.cpp与CMakeLists.txt的完整源码。
用Python和OpenGL探索数据可视化(实践篇)- Mesh网格模型查看器(中)
在本系列文章中,我们探讨了如何使用Python和OpenGL 4.5进行数据可视化开发。首先,请确保您的电脑支持OpenGL 4.5版本(大多数年之后销售的电脑均支持)。接下来,请配置您的开发环境,包括Windows下的话题论坛源码VS Code、Python和OpenGL。
上一节中,我们学习了如何以三维点云的方式查看不同的Mesh网格模型。本节,我们将继续深入,利用之前所学的知识,以实体线框方式展示数据。在common子文件夹中,创建一个名为solid_wireframe.py的文件,用于以实体线框方式显示数据。
在solid_wireframe.py中,输入以下代码:
在common子文件夹下的__init__.py文件中进行相应的修改。
在mesh_viewer.py文件的基础上,继续完善usecase子文件夹下的代码。默认情况下,打开文件后以实体线框方式查看Mesh网格模型。点击VS Code右上角的三角形图标,运行代码,选择文件菜单下的打开命令,打开bun_zipper.ply文件。默认为实体线框显示,通过鼠标操作调整模型视角,修改曲面和线框颜色等。点击“查看方式”菜单,可以选择以点云方式显示。再次开dragon_vrip.ply文件,选择实体线框方式,可调整缩放比例。再次选择Utah_VW_Bug.stl文件,调整缩放比例和线框粗细。最后,打开teapot.obj文件,实体线框模式提供了更多模型细节。
下一节,我们将尝试添加光照功能,以实现更丰富的可视化效果。
本系列文章的源代码已上传至gitee.com/eagletang/pyg...。
在探索数据可视化的跳远250源码旅程中,请参考以下系列文章:
1. 用Python和OpenGL探索数据可视化(基础篇)- OpenGL简介及演化
2. 计算机图形显示的基础知识
3. OpenGL 渲染管线简介
4. OpenGL 4.5核心对象简介
在基础篇中,我们从“你好,窗口!”开始,逐渐深入到“你好,三角形!”、“处理键盘和鼠标事件”等主题,构建了Python和OpenGL的可视化基础。
在三维篇中,我们探讨了如何创建坐标轴、使用立方体体验模型矩阵、创建三维坐标轴类和立方体类、与照相机“共舞”、创建照相机类、使用帧缓存对象FBO、CT扫描体数据可视化等高级主题。
实践篇中,我们尝试了三维点云数据可视化、数学之美之三维曲面、使用几何着色器绘制实体线框、使用细分着色器、绘制二维贝塞尔曲线(含动画)等实际应用。
在本节中,我们专注于以实体线框方式查看Mesh网格模型,通过实践加深对OpenGL和数据可视化技术的理解。
用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...
用Python和OpenGL探索数据可视化(基础篇)- 你好,纹理!
本系列文章旨在教授如何运用Python和OpenGL 4.5进行数据可视化开发,前提读者电脑需支持OpenGL 4.5版本。请参考《准备工作(一)Windows下检测显卡和OpenGL信息》进行检测,以及《准备工作(二)配置Windows下VS Code + Python + OpenGL开发环境》进行环境配置。源代码已上传至gitee.com/eagletang/pyg...
在探索数据可视化的旅程中,我们已经学会了如何通过顶点属性和统一变量赋予矩形不同的颜色。然而,现实世界中许多物体拥有复杂多变的颜色,如何在OpenGL中处理这些问题?答案在于纹理(Texture)的使用。纹理通过捕捉并转为数字化图像,再将图像“贴”在物体的三角形上,实现丰富色彩的显示。这一过程称为纹理贴图(Texture mapping)。
纹理贴图的基础元素是纹素(Texture element,简称texel)。接下来,我们通过代码实践来感受纹理贴图的魅力。首先,在VS Code中打开D:\pydev\pygl下的basic文件夹,并新建texture_app.py文件。在shaders文件夹下分别新建texture.vs、texture.fs文件,并输入相应的代码。在pygl文件夹下新建textures文件夹,下载木箱并将其复制至其中。运行VS Code,点击右上角三角形图标运行代码,屏幕将显示一个蓝色矩形,可切换至线框、实体加线框或纹理模式。切换至纹理模式,矩形将贴上木箱图案。
在GLSL部分,我们引入了纹理坐标tex_coord,并在顶点着色器中使用它。片段着色器中则引入了采样器sampler2D rect_texture,使用GLSL内置的函数texture从纹理中采集颜色信息。Python + OpenGL部分中,通过PIL库读取,定义纹理坐标、顶点属性、索引列表等,创建OpenGL程序对象、顶点缓存对象、元素缓存对象等,并与纹理对象绑定。通过代码实现,我们成功将纹理贴在了矩形上。
本文通过代码实践和解释,详细介绍了如何使用Python和OpenGL进行纹理贴图,使矩形能够展示出纹理的丰富色彩。通过本系列文章的学习,您将逐步掌握数据可视化开发的技能,探索更多可能。
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 着色器详解
GLSL语言
GLSL(OpenGL Shading Language)专用于编写着色器,通过定义main函数的程序片段,指导渲染引擎渲染内容。
GLSL语法类似C语言,增加特定关键字修饰变量。基本结构如下:声明GLSL版本、模式、变量,主函数main处理输入输出。
输入变量in
GLSL允许有限输入变量,硬件决定数量,可通过GL_MAX_VERTEX_ATTRIBS查询上限。
输出变量out
片段着色器直接输出色值,无需与后续阶段关联。可通过一致数据类型和名称建立顶点着色器到片段着色器间联系。
全局变量
全局变量作用于整个着色器程序,可在多个着色器间共享,通过GL编码获取。
示例:片段着色器中使用全局变量。
顶点着色器与片段着色器
顶点着色器声明位置与颜色变量,片段着色器声明一致输入变量接收颜色,实现数据传递。
数据类型
向量类型定义、重组用于复杂数据结构。
glVertexAttribPointer
设置顶点变量属性,定义步长、偏移与位置,用于配置顶点数据。
顶点数据、着色器配置
顶点着色器声明输入变量,片段着色器接收传递颜色,完成数据流。
着色器程序
着色器程序作为最小绘制单元,由两个着色器决定结果。面向对象封装着色器程序。
加载着色器代码梳理
流程包括:创建着色器对象、附加源码编译、创建程序、绑定与链接。
着色器程序类封装
用Python和OpenGL探索数据可视化(实践篇)-使用几何着色器绘制实体线框(Solid Wireframe)模型
在Python和OpenGL的框架下,通过几何着色器可以更高效地实现三维模型的实体线框(Solid Wireframe)绘制,避免了传统双绘制方法的繁琐。本文将指导你如何在VS Code环境中,通过一步步的代码修改,来创建一个可以自由旋转、缩放和变换视图的实体线框模型示例。
下面是具体步骤的概述:
1. 确保你的电脑支持OpenGL 4.5,参考《准备工作(一)》和《准备工作(二)》设置开发环境。
2. 在上一节中,我们学习了计算着色器;现在,我们将转向几何着色器,它能一次性生成线框,提升效率。
3. 在`pygl`文件夹中,你需要添加ProgramVFG类,以及solid_wireframe.vs、geom和fs文件,编写几何着色器代码。
4. 在`solid_wireframe_app.py`中,编写主程序,通过鼠标交互控制模型显示和参数调整。
5. 运行代码,你可以直观地观察到实体线框模式下的模型,如克莱因曲面或Breather曲面,颜色和线框颜色都可以自由定制。
完整的教程源代码已上传至Gitee,系列文章的参考内容从基础篇到实践篇,涵盖了OpenGL的各个方面,如光照、纹理、事件处理和高级渲染技术。
通过本节的学习,你将更深入理解如何利用几何着色器提升数据可视化的性能,为你的三维建模和数据分析项目增添实用技巧。