boxmoe_header_banner_img

Hello! 欢迎来到盒子萌!

加载中

文章导读

OpenGL实现3D仿真


avatar
whaledream 2026年 3月 30日 22

最近在做一个3D模型仿真的软件,通过urdf文件显示各个机器人的3D模型。于是仔细学习了下OpenGL技术。曾经有一段时间比较痴迷于unity引擎,因此听说过OpenGL。

OpenGL是什么呢?

官方的定义是:OpenGL(Open Graphics Library)是一个跨平台、跨语言的图形编程接口(API)规范,通过调用一系列函数,来指挥GPU(图形处理器)绘制2D和3D图形。

每个OpenGL的函数接口都是由Khronos Group(科纳斯组织)进行定义,不同GPU厂商负责实现。

OpenGL的工作流程

OpenGL的工作核心就是图像渲染管线。在330版本之前,工作模式属于固定管线;从330版本之后,工作模式属于可编程管线。

渲染管线其实只做一件事,将3D模型投影到2D屏幕上。

它的工作流程如下:

  1. 准备数据。这个数据也就是加载3D模型文件,一般有obj、stl、dae、3ds等。对于我来说一般接触到的3D模型文件都是stl文件,它一般搭配urdf文件一起使用。加载文件后会将模型数据中的顶点坐标、颜色、纹理等信息上传到GPU中,然后OpenGL创建顶点缓冲对象(VBO) 等来管理这些数据。
  2. 顶点数据处理。进行可编程阶段,创建顶点着色器。顶点着色器会对每个顶点数据进行运算,然后将3D坐标转化为屏幕上的2D坐标。这个坐标通常受相机的位置影响。
  3. 图元装配。经过前面的处理后,需要显示物体的形状,那么就需要将顶点连接成线和三角形(大部分物体都可由三角形组成),经过一定的规则就变成了图元。
  4. 光栅化。光栅化就是将组成的图元变成片段,也就是屏幕上的候选方块,也就是图像所占的像素点。
  5. 片段处理。创建片段着色器,负责每个片段的最终颜色。因为不同的光照会影响最终物体显示的颜色,不同物体的交叉也会影响等。
  6. 最后输出图像。

OpenGL本身是一个巨大的状态机。整个流程的命令都会受到当前状态的影响,不能乱序执行。

上面提到了着色器(shader)。着色器是GPU上运行的小程序,一般渲染必定包含顶点着色器和片段着色器两个阶段,它使用一种叫GLSL(OpenGL Shading Language)的语言编写,语法非常接近于C语言。

 对于图形相关的我喜欢用Qt去实现,并且Qt封装了丰富的OpenGL都接口库。

在Qt中如何调用OpenGL接口?

在Qt的qmake里添加openglwidgets模块。

QT += core gui openglwidgets 

设计思路就是读取urdf配置文件,创建一个QMap进行stl模型文件的映射。urdf文件本质就是一个xml文件,可以读取xml文件方式读取,也可以使用第三方库进行直接读取,比如urdfdom、Pinocchio等。

感谢您的支持
微信赞赏

微信扫一扫



评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字

插入代码