皮皮网
皮皮网

【全景制作源码】【aacenc源码下载】【源码包搭建】三维图的绘制源码_三维图的绘制源码是什么

来源:长沙到成都源码 发表时间:2024-11-27 05:03:24

1.用Python和OpenGL探索数据可视化(三维篇)- 创建三维坐标轴类和立方体类
2.三维力导向图绘制(1)—假·三维力导向图
3.科学可视化软件介绍 – Polyscope
4.诚心求助朋友教我用VB绘画 三维立体图形

三维图的绘制源码_三维图的绘制源码是什么

用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、aacenc源码下载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探索数据可视化(三维篇)- 用立方体体验模型矩阵》。

三维力导向图绘制(1)—假·三维力导向图

       本周实现了一个三维的力导向图。总结绘制方法如下。

       力导向图对数据可视化人员并不陌生,例如在echarts示例中:

       echarts.baidu.com/examp...

       力导向图有以下特点:

       echarts示例中仅配置了“斥力”参数,而d3示例则可自定义画面中心位置和力量衰减系数。然而,随着关系复杂度的增加,节点间的连线易交叉,观感不佳。为了改善这一情况,我构想了三维力导向图。尽管echarts新版本提供了三维关系图,源码交付标准但不支持拖拽或旋转,渲染效果欠佳,因此决定自造一个轮子。

       接下来,让我们回顾二维力导向图的实现。以d3为例:

       创建模拟并绑定数据后,数据发生了变化:

       console.log(nodes[0])

       console.log(edges[0])

       原始数据新增了几个属性,其意义清晰。这些属性值实时更新,在数据绑定后开始模拟。tick事件绑定的回调函数会在每次属性更新时被调用,此时可根据属性值调整图形位置,类比于模型与视图的关系。

       了解d3的力导向图原理后,我们发现它提供了一个力学模拟器用于计算位置,而画面渲染可使用其他方式。因此,我们修改渲染方式为three.js。

       此修改后,已能显示三维画面。当前功能仅支持展示,暂无拖拽功能。

       为支持拖拽,需研究二维拖拽实现方法。图形节点的fx、fy属性表示固定位置,在计算布局时优先于普通坐标,模拟器仅更新x/y坐标,故可利用fx/fy坐标强制定位。

       三维视图中,需让节点球体支持拖拽。一个方法是引入DragControls插件,THREE的拖拽插件,用于节点操作。此外,还需引入TrackballControls用于三维视角查看。创建控件,处理DragControls的拖拽事件,更新TrackballControls。至此,实现可正常拖拽的假·三维力导向图。

       至此,二维力导向图改造为三维完成。可任意变换相机视角,支持拖拽,但所有节点和边实质上仍在一个平面内。后续文章将讲解制作真·三维力导向图的方法。

       源码链接:

       运行示例:

科学可视化软件介绍 – Polyscope

       Polyscope

       Polyscope是一个轻量级通用三维可视化库、数据查看器和用户交互界面。它适用于三维数据,如网格和点云等。通过编程方式首先注册数据,然后即可通过编程或动态图形用户界面快速生成信息丰富、美观的可视化图形。

       Polyscope官网地址:polyscope.run

       GitHub源代码地址:github.com/nmwsharp/pol...

       Polyscope于年3月首次发布到开源社区,最新的版本是年1月发布的v2.1.0。

       使用Python语言时,可通过pip命令安装Polyscope:pip install Polyscope

       以下是一些Polyscope提供的可视化截图和案例,供参考:polyscope.run

       观看两小段体绘制切面的视频:此处省略链接

       了解更多科学可视化软件,可参考以下系列文章:《科学可视化软件介绍 – VisIt》、《科学可视化软件介绍 – Inviwo》等。

       Polyscope官网提供详细的文档和教程,可帮助用户快速上手。更多关于Polyscope的信息和案例,请访问官网:polyscope.run

诚心求助朋友教我用VB绘画 三维立体图形

       vb里绘制线框的立体图形很简单,用到投影算法即可。

       所谓投影算法就是把三维空间里的xyz映射成xy的一种方法,网上查一下“投影算法”关键字就能找到公式。

       比如场景里有八个点,它们都各自有xyz坐标,在投影成xy以后,再按照一定顺序用Line连接线即可。再结合上Sin和Cos还能让图形旋转。但一般来说我们习惯的三维图像还涉及光、颜色、纹理填充,这就比较麻烦了。还得有消隐算法……

       总之如果打算自己弄得化很复杂,想提高运算效率建议学习一下 DirectX SDK,有VB版的。

       3D投影2D计算公式是这样的

        P( f ):(x, y, z)==>( f*x / z + XOrigin, f*y / z + YOrigin )

       其中f是“焦点距离”,它表示从观察者到屏幕的距离,一般在到之间。XOrigin和YOrigin是屏幕中心的坐标。

       再给你些对与3D旋转和缩放的矩阵,矩阵转化成公式即可。

       二维坐标系公式。

       二维笛卡儿坐标系的平移等式。

        t( tx, ty ): ( x, y ) ==> ( x + tx, y + ty )

       二维笛卡儿坐标系的缩放等式。

        s( k ): ( x, y ) ==> ( kx, ky )

       旋转等式:

        r( q ): ( x, y ) ==> ( x cos(q) - y sin(q), x sin(q) + y cos(q) )

       三维坐标系公式。

       平移公式:

        t( tx, ty, tz ): ( x, y, z ) ==> ( x + tx, y + ty, z + tz )

       平移(tx, ty, tz)的矩阵

        | 1 0 0 0 |

        | 0 1 0 0 |

        | 0 0 1 0 |

        | tx ty tz 1 |

       缩放公式:

        s( k ): ( x, y, z ) ==> ( kx, ky, kz )

       缩放(sx, sy, sz)的矩阵

        | sx 0 0 0 |

        | 0 sy 0 0 |

        | 0 0 sz 0 |

        | 0 0 0 1 |

       旋转公式(围绕Z轴):

        r( q ): ( x, y, z ) ==> ( x cos(q) - y sin(q), x sin(q) + y cos(q), z )

       绕X轴旋转角q的矩阵

        | 1 0 0 0 |

        | 0 cos(q) sin(q) 0 |

        | 0 -sin(q) cos(q) 0 |

        | 0 0 0 1 |

       绕Y轴旋转角q的矩阵:

        | cos(q) 0 -sin(q) 0 |

        | 0 1 0 0 |

        | sin(q) 0 cos(q) 0 |

        | 0 0 0 1 |

       绕Z轴旋转角q的矩阵:

        | cos(q) sin(q) 0 0 |

        |-sin(q) cos(q) 0 0 |

        | 0 0 1 0 |

        | 0 0 0 1 |

相关栏目:百科