![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OpenGL
文章平均质量分 75
彩阳
学习DirectX还要靠大家指点指点啊。
展开
-
Qt在线技术交流之OpenGL、Quick以及所经历项目开发心得分享
时间:3月25日晚上7:30 主题:Qt在线技术交流之OpenGL、Quick以及所经历项目开发心得分享 直播:http://qtdream.com 主页、全民TV,可能会加上其它的直播平台进行转播 录播:http://qtdream.com/category/16 处,使用B站或者优酷资源上传 参与对象:对Qt跨平台开发框架感兴趣的朋友们。当然了,如果你是大牛,也可以旁听一下,在这儿我们相原创 2016-03-23 23:50:32 · 4217 阅读 · 1 评论 -
Qt新渲染底层Scene Graph研究(一)
Qt 5提出了一个新的渲染底层,以替代Qt4时期的Graphics View,这个渲染底层就是Scene Graph。其实这个底层的作用和Open Scene Graph是差不多的,但是由于是不同的团队进行开发的,所以两者没有必然的联系。Scene Graph主要利用OpenGL ( ES )2的渲染优势,在2D和3D以非常流畅的速度进行渲染,满足日益增长的界面效果需求,同时Scene Graph预留了各种各样的接口,满足大家定义显示和渲染效果的需要。原创 2015-01-23 21:31:54 · 11354 阅读 · 2 评论 -
实现Qt和OpenGL混合渲染
<!--@page {margin:2cm}pre {font-family:"DejaVu Sans Mono",monospace}p {margin-bottom:0.21cm}-->实现Qt和OpenGL混合渲染Qt自有一个混图的引擎,这个引擎的核心就是QPainter,我们知道QPainter在渲染二维图形和文字有很大的优势,而OpenGL原创 2013-01-12 14:21:17 · 13068 阅读 · 11 评论 -
Qt移动应用开发(八):实现跨平台的QML和OpenGL混合渲染
上一篇文章讲到了利用C++这个桥梁,我们实现了QML和Java的交互。Qt 5大力推崇的QML/JS开发,让轻量、快速开发的QML/JS打头阵,让重量的C++撑腰,几乎什么技术都能够实现。接下来的这篇文章讲的是我们使用QML,借助Qt库和OpenGL,实现了使用着色器定义OpenGL的渲染方式,为大家呈现混合渲染的效果。原创 2014-07-21 22:53:24 · 19804 阅读 · 20 评论 -
使用GLSL实现对光照的模拟(一)
OpenGL1.1是很老的OpenGL标准了,即使这样,对于光照也是提供了很好的支持。OpenGL默认的光照着色模型是高洛德(Gouraud)着色模型,虽然着色的精度上不是很好,但却非常好理解,对于该光照模型的例子也非常多,在《OpenGL ES 2.0 Programming Guide》中使用OpenGLES2.0实现了OpenGL1.1的高洛德着色模型。互联网上搜索GLSL+光照,相应的文章也是非常的多。有些直接成了我参考的蓝本。不管怎么样,花了大概一周的时间在以前的基础上使用Qt + OpenGL(原创 2014-04-12 09:27:25 · 4714 阅读 · 2 评论 -
利用着色器实现游戏的公告板特效
利用着色器实现游戏的公告板特效 这几日进展比较缓慢,主要是对自己搭建的基于Qt和OpenGL(ES)2.0的框架进行整合。同时利用现有的技术,制作一个基于OpenGL的公告板效果,同时提升一下自己书写着色器的能力。原创文章,反对未声明的引用。原博客地址:http://blog.csdn.net/gamesdev/article/details/22205357原创 2014-03-26 19:56:34 · 4247 阅读 · 1 评论 -
使用GLSL实现对光照的模拟(二)
OpenGL固定渲染管线主要实现的是高洛德着色模型,这是一种简单的光照效果,主要应用在实时渲染领域。我这次实践主要将全局光照、漫反射效果以及镜面反射效果实现了,漫反射使用了兰伯特(Lambert)公式、镜面反射使用可比林 – 冯(Blinn - Phong)公式。原创 2014-04-20 22:02:51 · 5389 阅读 · 0 评论 -
使用着色器实现蒙皮动画和形变动画
和以往我提供的演示程序不同,这一次我换了一个新的框架,再也不采用OpenGL的固定渲染管线进行渲染了,而是采用兼容OpenGL(ES)2.0的着色器方式进行渲染。当然,为了利用着色器提供的并行计算功能,我用顶点着色器写了硬件蒙皮动画,以尽可能地利用GPU多做一些事情。可惜骨骼动画由于比较复杂,暂时无法用顶点着色器实现,同时表示面部表情的形变动画(Metamorphic Animation)也是在CPU上完成的。原创 2014-03-16 10:56:14 · 4175 阅读 · 8 评论 -
蒙皮动画初步完成
蒙皮动画和骨骼动画结合比较紧密,骨骼动画完成了之后,蒙皮动画也比较好做,可是那时我没有掌握透向量、矩阵以及四元数的基本计算,走了一些弯路,也搁置了原来的目标。在学习完一些新的技术后,再回来学习蒙皮动画,觉得到了实现它的时候了,于是制作了这样一个演示程序。原创 2014-03-07 22:32:41 · 3594 阅读 · 4 评论 -
矩阵的平移(translate)没有想象的那么简单
矩阵在计算机图形学中的地位是举足轻重的,几乎所有的变换都需要通过矩阵来完成。比如我接触的DirectX9就用IDirect3DDevice9::SetTransform()的第二个参数就要求传入矩阵的指针,而OpenGL也有直接载入矩阵的方法:glLoadMatrixf(),足以见矩阵在相关领域的作用是多么大。 对三维物体的变换(transform)包括基本的平移(translation)、旋转(rotation)、缩放(scaling)\错切(shearing)以及它们的组合变换。它们都作用原创 2014-03-06 23:30:35 · 13143 阅读 · 5 评论 -
矩阵求逆计算的实现
学习计算机图形学,那么就应该了解计算机图形学的一些基础知识,比如说向量、矩阵、欧拉角以及四元数。其中矩阵尤其是4×4的矩阵在其中是比较重要的一部分了。因为它包含的信息多,一个4×4的矩阵可以表示平移(translation)、旋转(rotation)、缩放(scaling)以及错切(shearing)以及它们组合后的变换(transform)。其中平移、旋转是刚体转换、在三维程序中较常使用,而缩放以及错切由于改变了三维模型的形状,在实际开发中较少使用。为了表示三维图形的逆变换,引入了逆矩阵的概念。逆矩阵使得原创 2014-03-06 21:42:45 · 4949 阅读 · 2 评论 -
OpenGL4.x学习之使用着色器、绑定VAO以及绘制最简单的图元——点
OpenGL4.x是OpenGL系列最新的规范,它为此制定了很多的概念,包括6种着色器、以及诸多内存对象,让简单的三维显示变得不简单。我也是刚刚了解这些新的特性,所以有的地方阐述不正确还请高手们指出来。原创 2014-02-19 22:02:27 · 4018 阅读 · 9 评论 -
OpenGL4.x学习之使用绘制三角形
OpenGL很多人都有所了解,也有很多人使用OpenGL开发过工业级的应用和游戏应用,不过它的最新版本OpenGL4.x了解的人就不是太多了。目前OpenGL的最新版本是4.4,并且NVIDIA和AMD厂商发布了支持OpenGL最新版本的驱动程序,我想基于OpenGL4.x讲解的书籍也会逐渐增多。原创 2014-02-19 22:08:47 · 3324 阅读 · 0 评论 -
利用GPGPU方法将大量数据通过纹理传输至GPU进行计算
在显卡并行计算起源的领域,比如说游戏开发领域,GPU的发展使得其迈向了新的纪元,画面愈加精致,效果愈加震撼,同时并行计算框架CUDA和OpenCL的兴起,则将显卡的计算潜能充分地释放了出来。最后令人高兴的是,以前就受惠于显卡发展的游戏开发领域,将显卡的功能做了新的扩展,以前只用来渲染用的显卡,目前可以做更多逻辑领域相关的事儿了。原创 2014-02-19 22:26:34 · 6713 阅读 · 10 评论 -
OpenGL4.x学习之搭建基于Qt和OpenGL4.x的框架
OpenGL是一套充满活力的跨平台的渲染API。在2004年前,其不过是刚迈入了2.0版本,那时候Direct3D成为游戏开发者们最青睐的开发框架,HLSL已经被一些游戏所使用,而OpenGL才刚刚支持顶点着色器和片断着色器,人们都为此而感到担心——究竟OpenGL还有没有希望?OpenGL的出路到底在哪里?幸运的是随后的几年,OpenGL在khronos组织和其它巨头的推动下取得了长足的发展,版本很快迈向了3.0甚至是4.0。2012年OpenGL4.3发布,NVIDIA等厂商随机发布了支持它的驱动程序,原创 2014-02-08 22:26:35 · 7507 阅读 · 5 评论 -
OpenGL4.x学习之开发环境的选择
从OpenGL3.2开始,固定渲染的功能逐渐地被废弃,可编程渲染成为了主角,为此我们也必须跟上来,学习OpenGL可编程渲染部分。不过虽然说固定渲染功能被废弃了,有些内容还真的必须是固定渲染流程,没法走可编程渲染。比如说栅格化(Rasterization)和帧缓存(一说帧缓冲区)的操作(Framebuffer operations),在现阶段无法做到可编程。直到OpenGL4.4,着色器的种类增加到了6个。它们分别是顶点着色器、分格化控制着色器(Tessellation control shader)、分格原创 2014-02-08 15:15:42 · 4444 阅读 · 6 评论 -
循环坐标下降(CCD)算法中对骨骼动画中膝盖等关节的特殊处理
最近研究循环坐标下降(cyclic coordinate decent,CCD)算法,发现它在处理人物的某些关节上不起作用。CCD算法的原始算法针对的是多个骨骼、多个关节的IK解算处理,但是对于人体骨骼有着特殊的构造,使用CCD算法不能正确地反映这些构造,所以我们必须对这些构造进行特殊处理。 那么人体骨骼的构造特殊性在哪儿呢?这里我们暂且不探讨骨骼扭转的情况,仅仅探讨骨骼旋转的情况。我们发现人体的一些部位有三个自由度(3 Dimensions of Freedom,3DoF),而另一些部位只有原创 2013-11-03 22:54:47 · 17466 阅读 · 4 评论 -
Qt新渲染底层Scene Graph研究(三)
上一篇文章介绍了Qt Quick和Scene Graph的一些理论上的内容。这也是我最新的研究成果。接下来我要介绍一下如何使用Scene Graph来制作一些好玩的效果。这也是我进行一次Scene Graph的尝试。我的目标是希望在Scene Graph这一套渲染框架下实现一个带有纹理的立方体,并且旋转。花了几天,虽然不是那么满意,但是已经告一段落了。原创 2015-01-27 16:54:04 · 6782 阅读 · 2 评论 -
Qt新渲染底层Scene Graph研究(二)
上一篇文章初步介绍了Qt新渲染底层Scene Graph,我们该如何利用这个框架为应用程序增添绚丽的效果呢?首先,我们要明确利用Scene Graph开发的目的是什么。如果是简单的,纯粹的显示2D图形界面,那么直接利用构建在Scene Graph之上的Qt Quick和Qt Quick Widget即可。如果觉得Qt Quick为我们提供的功能不够,在QML这一层无法很好地实现,那么我们或许需要考虑更低一层的Scene Graph了。一个使用Scene Graph的常见需求就是实现3D模型的渲染以及2D图元原创 2015-01-23 23:08:22 · 7571 阅读 · 1 评论 -
跨平台显示MMD模型
过年了,祝大家喜气洋洋,心想事成!然后呢,过年后,依然进行Qt以及3D的研究。最近翻出以前的技术研究成果,并且花了将近一个月,成功地在移动平台上显示MMD模型了。原创 2015-02-23 00:18:55 · 4774 阅读 · 5 评论 -
glTF格式初步了解
最近看到Qt 3D的进展,偶然了解到了一种新的格式:glTF格式。这种格式据说比现有的3D格式更加符合OpenGL应用的需要,这引起了我的好奇,于是我在Qt 3D的外部链接中找到了有关glTF的相关链接。原创 2016-01-11 09:35:28 · 26644 阅读 · 3 评论 -
Qt Scene Graph渲染方式在不同系统的差异
Qt Scene Graph是Qt 5提出的新渲染底层,它是Qt Quick在绝大多数平台上渲染的基础(Qt 4的是依赖Qt Graphics View)。了解和学习Qt的Scene Graph,怎么也不为过。最近我发现一个现象,那就是Qt Scene Graph在不同平台上的渲染流程是不一样的。通常情况下这没什么,可是它会影响Qt Quick的一些特定的类,比如说Animator。原创 2015-09-08 00:31:30 · 4736 阅读 · 6 评论 -
Bullet有关六自由度弹性约束研究
这段时间打算将物理引擎整合进来,于是对Bullet这款开源的物理引擎进行了一些研究。Bullet的研究也有了一段时间了,Bullet这个引擎其实很久之前就接触了,只是一直以来,只是跑跑它的例子,也没有研究例子以及源代码,想要整合进入渲染引擎中也就井中月水中花了。今年3月,我曾经制作了一个整合Bullet最简单的一个例子。即模拟物体坠落的,并且写了博客《Qt Quick + OpenGL + Bullet初次测试》。这个例子开了一个好头。这段时间开始研究Bullet的一些其它有趣儿的特性了。原创 2015-05-25 21:19:33 · 4554 阅读 · 1 评论 -
阴影映射(Shadow Map)的研究(三)
最近为了自己制作的项目可是吃了不少苦头,这其中关键的一点就是想要实现阴影映射(Shadow Map)。为了实现目标,我参考了网络上很多相关的资料,也看了一些案例,最终花了我一个月的时间将这个效果实现了。原创 2015-05-25 13:02:43 · 3293 阅读 · 0 评论 -
阴影映射(Shadow Map)的研究(五)
我成功地将别人的例子加以改进,使用QOpenGLWidget作为渲染窗口,将阴影映射渲染了出来。目前可以确定的是,使用OpenGL ES 2.0作为渲染的接口要求,能够让目前绝大多数机器都能够顺利兼容,但是囿于渲染窗口,可能在某些平台上表现不好。如果移植到Qt Quick 2,这样能够支持的平台就更多了。现在我将这些接口统统使用Qt的方式实现了,移植到Qt Quick 2也很简单。原创 2015-05-25 15:08:19 · 2437 阅读 · 0 评论 -
阴影映射(Shadow Map)的研究(四)
上一篇文章粗略地介绍了要实现OpenGL ES 2.0的阴影映射所需的知识难点,现在简略地说明一下:1、FBO;2、着色器;3、float的分拆以及组合。上篇文章虽然说已经成功地移植了来自Java编写的Android下阴影映射的效果,但这边采用的很大程度上是OpenGL原生代码编写的内容,接下来的目标是采用自Qt 5起就逐渐采用的Qt对OpenGL的封装类,用面向对象的思维来处理OpenGL对象,这样让代码更加优雅。原创 2015-05-25 14:54:19 · 2896 阅读 · 0 评论 -
阴影映射(Shadow Map)的研究(六)
成功地将阴影映射与Qt Quick 2整合之后,接下来可以将阴影映射的效果变得更漂亮一些。如果你成功地运行过我制作的演示程序,那么就会发现,阴影映射的效果并不是那么理想,可能有噪点(粉刺)的出现。这个是和阴影的产生相关,主要还是由于阴影映射这个算法它要求产生的阴影精度是有限的。很多改进的算法都是围绕着如何让阴影更加自然进行研究的。这里我也尝试模仿了一个稍微简单的算法:PCF算法。原创 2015-05-25 15:24:41 · 2677 阅读 · 1 评论 -
对用OpenGL ES 2.0实现OpenGL ES 1.1的顶点着色器的研究
想要彻底研究OpenGL ES 2.0于前一代OpenGL的区别,还是要费很大一番精力的。最近在仔细研读《OpenGL ES 2.0 Programming Guide》,虽然这本书最早出版日期是2008年,距今已经7年了,而著作的日期或许还要早上半年到1年,但是目前OpenGL ES 2.0是主流三维开发框架,因此这本书的知识直到现在,依然受用。原创 2015-05-26 08:29:16 · 2486 阅读 · 1 评论 -
有关GLSL中的gl_FragCoord
在研究阴影映射的时候,我发现了一个很有意思的变量,它可以代替我们自己使用的varying变量,给我们带来方便。但是我们也需要了解它是如何计算的。原创 2015-04-15 17:42:32 · 7537 阅读 · 1 评论 -
阴影映射(Shadow Map)的研究(二)
上一篇文章介绍了我对Z缓存的较为详细的研究。这里之所以对Ze求导函数,是因为的我们需要寻找它的变化曲线,从而找到极值点,这样就能够确定Ze相对于zw的疏密分布情况。幸运的是,我们找到的导函数是双曲函数,并且我们关心的的右侧是单调递增的。原创 2015-04-08 21:20:22 · 2431 阅读 · 0 评论 -
深度缓存(Z缓存)的研究
最近在shadow map过程中卡住了。因为我想在OpenGLES 2.0兼容的平台上运行shadow map,而要顺利运行shadow map,通常的情况是拥有GL_OES_depth_texture扩展,而有些兼容的机器是没有这个扩展,这给我们开发人员带来了一些难度。不过办法还是有的,前提是要对计算机图形学的Z-Buffer要有一个深入的了解才行。原创 2015-04-08 14:10:29 · 6649 阅读 · 1 评论 -
透视投影矩阵的构建
投影矩阵最终建立的是一个平截头体(也可以称为台),在这种变换下呈现远小近大的效果。这里我将我学到知识记录下来,以后备忘用。原创 2015-04-07 21:46:18 · 4510 阅读 · 0 评论 -
解决三维建模软件中摄像机旋转的问题
我们看到很多3D建模软件都可以很方便地对摄像机进行旋转,比如说Blender,通过按下鼠标中键,就可以很方便地对摄像机进行旋转。在学习了几年OpenGL之后,我也想要模仿这一点做出类似的功能。但是当研究的时候,遇到了一些困难。原创 2015-04-02 10:14:22 · 5126 阅读 · 2 评论 -
阴影映射(Shadow Map)的研究(一)
这段时间在搭好自己的框架后,就开始马不停蹄地研究阴影映射的内容了,说起阴影映射,倒不如说shadow map更容易被专业人士所接受。shadow map是我进阶图形学的第一课,以后的图形学内容,会变得非常复杂,每写一个例子,都要牵涉到非常多的算法以及代码。但是我不得不这么做,因为只有这样才能成为计算机图形学的高手。原创 2015-03-25 21:56:06 · 4130 阅读 · 2 评论 -
Qt Quick + OpenGL + Bullet初次测试
目前Qt的Quick模块已经表现得非常出色,而且可以预留接口来渲染OpenGL场景。一般来说,已经能够满足大部分编程需要了。这次呢,尝试使用结合一些技术,来做一些有趣儿的事情——将Bullet整合进来,并且进行测试。原创 2015-03-15 23:40:43 · 5520 阅读 · 2 评论 -
测试Qt Quick在各个平台上的3D渲染性能
Qt是一个跨平台的GUI框架,它的QtQuick更是支持结合OpenGL原生的代码进行渲染。我想将我以前写的程序整合到QtQuick上来,看看渲染效果是否满意,于是写了一个小小的程序,来做一下渲染基准测试。运行结果出来,不容乐观呐。原创 2015-02-15 23:59:15 · 6045 阅读 · 4 评论 -
OpenGL中glFrustum()和gluPerspective()的相互转换
OpenGL中glFrustum()和gluPerspective()的相互转换OpenGL中在窗口的大小发生变化的时候会触发resize()函数,这里会传入一个新的宽和高,在resize()函数中我们会设置投影矩阵,在可以使用OpenGL基础函数glFrustum()函数和glu函数gluPerspective()函数。网上介绍两个函数联系比较少,所以自己研究呗。OpenGL函数glFr原创 2013-04-28 00:47:14 · 7123 阅读 · 0 评论 -
正向运动学和反向运动学
上次制作的骨骼动画例子程序并不完美,我在程序里面也说了,因为没有牵涉到反向运动学的知识,所以人物运动起来感觉脚无法收缩、头发无法飘逸的感觉。其实在现实中这样的情况是要避免的,但是由于在动画设计的时候要指定每一个关节,显得非常费事。所以引入了反向运动学这个概念。在介绍反向运动学之前,首先让我们看一下正向运动学。 正向运动学,通俗来说是给定父骨骼位置以及它的变换来得出子骨骼的位置以及变换,打一个比方,就像运动手臂,可以带动手肘,进而带动手掌运动。正向运动学的概念是非常容易理解的,实现起来也比原创 2013-11-01 00:24:33 · 16005 阅读 · 3 评论 -
使用循环坐标下降(CCD)算法解算反向运动学(IK)
周五的时间总是美好的,今天也将自己制作的演示程序收官了。这篇文章是上一篇文章的继续,向大家介绍一下如何使用循环坐标下降(cyclic coordinatedecent,CCD)算法来求解反向运动学问题。 注意到了没有?我们要解决的问题属于刚体运动学范畴,所以一切涉及到形变的因素都不用考虑,因此我们既可以使用四元数和一个向量表示骨骼的位置和平移,也可以将两者结合起来使用一个矩阵表示骨骼的所有变换。学过计算机图形学的同学都知道,旋转分量和平移分量是互不影响的,所以可以简单地分别将旋转和平移叠加来表原创 2013-11-02 00:20:05 · 11717 阅读 · 5 评论 -
Qt下实现3DS文件的读入和显示
Qt下实现3DS文件的读入和显示 在实现了glut框架下读入和显示3DS文件成功后,我开始了在Qt这个成熟又有活力的框架下读入和显示3DS文件。(原文出自http://blog.csdn.net/jiangcaiyang123,请转载时注明出处,谢谢。)演示程序下载地址:这里源代码下载地址:这里 在这次移植中,我没有使用自己的三维数学库,而是使用了Qt内置的原创 2013-03-06 10:39:31 · 7551 阅读 · 6 评论