OpenGL
OpenGL学习
风烟倦
这个作者很懒,什么都没留下…
展开
-
VTK/OpenGL中球坐标转直角坐标
在球坐标中,表示一个点的位置用(r, θ, φ),三个参数分别代表着半径,俯仰角和方位角。在VTK/OpenGL中,空间坐标系为右手的直角坐标系,屏幕上的左右是x轴,上下是y轴,z轴则垂直于屏幕。因此,球坐标转VTK/OpenGL中的坐标公式可以这样写(r为半径,θ为theta,φ为phi):x = r * std::sin(theta) * std::sin(phi)y =r * std::cos(theta)z =r * std::sin(theta) * ...原创 2020-06-06 00:23:29 · 3125 阅读 · 0 评论 -
obj文件和mtl文件格式说明
以一个大理石地板的3d模型为例,如下图: 其包含三个文件,模型文件marble.obj,材质文件marble.mtl,及纹理贴图文件marble.png。obj构成了模型的主体,mtl为其材质,材质中有纹理贴图,对应png的图片。obj和mtl文件本质是文本文件,由一行行文字组成,以notepad++或其他文本编辑器打开,会显示一行一行的文本信息,下面是对这些文本...原创 2020-02-04 11:46:04 · 7382 阅读 · 3 评论 -
OpenGL鼠标滑动实现视角旋转
思路:摄像机围绕着中心点,以固定的半径做圆周运动。记录鼠标在屏幕上滑动的距离,缩小到适合的比例,然后计算出移动后的摄像机的x和z坐标。从而达到摄像机旋转,即视角旋转的目的。这里最关键的地方在于LookAt矩阵,LookAt矩阵是一种特殊类型的view矩阵,通过直接赋值给view矩阵,然后把view传递到vertex shader中,从而把世界坐标系转换成用摄像机的视角所观察到的坐标系当中。下面...原创 2019-12-13 11:10:37 · 6485 阅读 · 3 评论 -
OpenGL渲染流程
顶点数据:首先,我们以数组的形式传递3个3D坐标作为图形渲染管线的输入,用来表示一个三角形,这个数组叫做顶点数据(Vertex Data);顶点数据是一系列顶点的集合。一个顶点(Vertex)是一个3D坐标的数据的集合。而顶点数据是用顶点属性(Vertex Attribute)表示的,它可以包含任何我们想用的数据,但是简单起见,我们还是假定每个顶点只由一个3D位置(译注1)和一些颜色值组...转载 2019-12-12 19:15:55 · 609 阅读 · 0 评论 -
OpenGL中绘制轨迹线
在加载进模型后,有时候需要根据模型的移动来绘制轨迹线,假设该轨迹由机器人模型的某个关节,通过机器人关节的移动绘制出,思路如下:获取机器人模型该关节在世界坐标系中的模型矩阵 根据模型矩阵及起点坐标的值,计算出模型移动时起点对应的空间坐标 去除重复坐标,存入数组中 通过glDrawArrays(GL_LINE_STRIP, 0, 数组size())绘制连续的轨迹线代码实现:定义绘...原创 2019-12-12 16:21:48 · 3695 阅读 · 2 评论 -
OpenGL画坐标系2
此项目为“OpenGL画坐标系1”的拓展,1的链接:https://blog.csdn.net/qq_37996632/article/details/103149535思路:在原有的直线坐标轴上加上一个小的四棱锥,当然圆锥也可以,不过绘制圆锥的难度要大一点。整体效果如下:项目整体目录如下:注意:对比“OpenGL画坐标系1”,修改了Coordinate.h,Coo...原创 2019-11-21 10:46:52 · 2966 阅读 · 2 评论 -
VAO, VBO, EBO的创建顺序和解绑顺序
创建顺序:VAO➡VBO➡EBO // VAO glGenVertexArrays(1, &VAO); glBindVertexArray(VAO); // VBO glGenBuffers(1, &VBO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARR...原创 2019-11-21 10:13:01 · 1745 阅读 · 0 评论 -
OpenGL画坐标系1
此项目为Qt5所写,用到的是可编程管线的现代OpenGL,通过继承Qt中的QOpenGLWidget和QOpenGLExtraFunctions实现。只是一个最简单的坐标系,三条不同颜色的直线分别代表x, y, z轴,整体效果如下:其实实现这个坐标系在老版本的OpenGL(freeglut,glut)中是很简单的,只需几行代码,但是在可编程管线中,由于要编写着色器,复杂程度就稍微高了...原创 2019-11-19 19:57:48 · 5692 阅读 · 3 评论 -
OpenGL:纹理(中文注释版)
Textures是LearnOpenGL CN教程中的经典项目,里面包含了完整的OpenGL渲染流程,着色器的编写,着色器类的应用,纹理的加载等一系列经典的应用场景,是OpenGL入门过程中必须掌握的。最近在复习之前学习的OpenGL时,发现有些基本的概念比较模糊,于是对照着重新写了一遍,把每个比较重要的地方都加上了中文注释,方便以后自己查阅。此代码基于Linux下的Clion编写,项目目录如下:...原创 2019-10-30 22:28:32 · 422 阅读 · 0 评论 -
OpenGL:三角形(中文注释版)
Triangle是LearnOpenGL CN教程中的第二个项目,里面包含了完整的OpenGL渲染流程,后续的所有程序都是基于此程序的。这个程序就像c语言中输出"Hello World"一样,很有必要每一行代码都精读。最近在复习之前学习的OpenGL时,发现有些基本的概念比较模糊,于是对照着重新写了一遍,把每个比较重要的地方都加了中文注释,方便以后自己查阅。此代码基于Linux下的Clion编写,...原创 2019-10-30 09:37:08 · 382 阅读 · 0 评论 -
GLSL3.3的代码转成GLSL1.x,2.x
在LearnOpenGL CN和其他的一些教程中,教程的内容都是以desktop版本的OpenGL为准,而不是es版本。es版本和desktop有什么不同呢,大致可以分为这么几点:es版本是桌面版的子集,功能更少,只保留了最有用最高效的函数,但大致的语法,概念都是一样的; es只支持三角形面的片元,故在加载3d模型时要把模型转成三角形片元的,而桌面版支持三角形,四边形及其他片元; es多用...原创 2019-10-15 19:10:01 · 1008 阅读 · 0 评论 -
在Qt中使用OpenGL
在Qt5.4之前,OpenGL在Qt中的实现主要是继承QGLWidget,在5.4版本之后,则改为QOpenGLWidget和QOpenGLFunctions(QOpenGLExtraFunctions),这是qt官方的推荐写法,可以在qt自带的examples中搜索opengl找到。除了这种写法,直接使用指定OpenGL版本的包装器也是可以的,在头文件中包含QOpenGLFunctio...原创 2019-10-14 17:33:45 · 31376 阅读 · 4 评论 -
在OpenGL中移动加载进去的机器人模型
在OpenGL中,可以通过Assimp库来加载设计师已经建模好的3D模型,或者通过逐行读取模型数据也能达到同样的效果。在加载模型的过程中,最通用的一种模型格式是obj,不管是maya,3dsmax,还是blender,c4d,solidworks,都可以导出obj这种格式的模型,obj模型是一种文本格式,即意味着可以用记事本或者notepad++打开并编辑它,下图为notepad++下看到的模型数...原创 2019-09-03 20:31:12 · 1371 阅读 · 2 评论 -
Linux下OpenGL环境搭建(glfw)
目前网络上最好的OpenGL教程无疑是JOEY DE VRIES 的LearnOpenGLCN,网址如下:https://learnopengl-cn.github.io/,VRIES使用的是glfw+glad,IDE(集成开发工具)为Visual Studio。Linux上并没有Visual Studio,对于Linux下的开发者来说,可以用jetbrains公司的clion来代替Visual ...原创 2019-09-03 16:17:05 · 10099 阅读 · 1 评论 -
虚拟机中使用OpenGL遇到的错误总结
由于VMware对OpenGL的支持有限,目前最新版本的VMware workstation15 Pro只支持到OpenGL3.3的core profile(核心模式),在有条件的前提下建议安装Linux真机,可以装win10+Deepin或者win10+Manjaro,win10+Ubuntu的双系统。在Linux下,可以通过sudo glxinfo | grep "OpenGL"查看当前的...原创 2019-09-02 19:35:55 · 18050 阅读 · 9 评论 -
OpenGL的介绍
介绍OpenGL是什么?它是一个图形库,用来渲染2D,3D图形。它并不是一个API(Application Programming Interface),应用程序编程接口,仅仅是一个由Khronos组织制定并维护的规范。这个规范严格规定了每个函数该如何执行,以及它们的输出值。至于内部具体每个函数是如何实现(Implement)的,将由OpenGL库的开发者自行决定。OpenGL库...原创 2019-09-02 16:56:49 · 3615 阅读 · 0 评论