Qt游戏开发
文章平均质量分 73
专栏介绍了Qt这个成熟又有活力的框架在游戏中的应用,专栏作者jiangcaiyang123在其中提出了自己的架构和一些对Qt和游戏开发的思考。
彩阳
学习DirectX还要靠大家指点指点啊。
展开
-
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 评论 -
Qt移动应用开发(七):QML与Java的交互
Qt5中针对不同的平台适配并开发了不同的模块,比如说Qt Windows Extras、Qt Mac Extras、Qt X11 Extras、Qt Android Extras等。这里我们主要聚焦Qt Android Extras,教大家如何使用这个模块实现和Java的交互。原创 2014-07-20 22:29:53 · 7945 阅读 · 4 评论 -
Qt移动应用开发(六):QML与C++的交互
本文主要介绍的是如何使用QML和C++进行交互,难度稍微偏大,适合有经验的Qt开发者进行学习交流。 Qt 5吸收了Qt 4的declarative模块的优点,对底层进行了更改,新建了QPA层,隔离了不同操作系统API和上层Qt代码,同时QML/QtQuick也可以顺利在不同平台上运行。另外由于考虑到让Qt程序接入不同的库函数,因此Qt开放了接口让QML层和C++代码进行交互。之前已经有较多介绍QML与C++交互的文章了,本文仅作为一种有益的补充,更多相关的知识可以查询Qt帮助文档或向我留言。原创 2014-07-06 19:36:10 · 12039 阅读 · 7 评论 -
Qt移动应用开发(五):场景切换
这一次我将介绍我在实际应用开发的时候是如何实现场景的切换的。场景的切换问题是一个架构上的问题,有很多的实现方式,而Qt Quick也提供了很多实用的类,以便我们进行场景的切换。在QML中,场景切换实质上就是将一个界面类隐藏,而另外一个界面类显示的方法。下面的代码就是一个简单的例子:原创 2014-06-26 13:58:05 · 9477 阅读 · 12 评论 -
Qt移动应用开发(四):应用粒子特效
上一篇文章介绍了Qt Quick是怎样对帧动画进行支持的。帧动画的实现离不开状态机、而状态机、动画和状态切换(transitions)则是Qt框架的核心内容,也就是说它们可以建立在任何一个QObject对象中而不必非得依赖Qt的任何图形显示模块。拿一个例子说吧,如果你想实现背景音乐的平滑过渡,你可以不用写多余的代码,将背景音乐的音量作一下动画插值就可以达到效果了。事实上我制作的游戏《吃药了》就是这么实现效果的。而这一篇文章将要聚焦的是Qt Quick另外一个非常强大的系统——粒子系统。原创 2014-06-24 16:52:11 · 5449 阅读 · 1 评论 -
Qt移动应用开发(三):使用精灵图片实现帧动画
上一篇博文讲到了Qt Quick对于动画的一般支持,动画的形式多样,配合不同的插值函数,可以几乎实现所有想要的动画效果,而对于游戏的一些特殊的效果比如说帧动画,Qt更是有专门的类来实现。下面我们就来看看Qt Quick中究竟是对帧动画是如何实现的吧。原创 2014-06-23 18:19:59 · 9059 阅读 · 3 评论 -
Qt移动应用开发(二):使用动画框架
这篇文章主要介绍的是QtQuick的动画框架。Qt Quick动画框架自从Qt4的时代就有了,当时也有很多的demo给我们眼前一亮。脱胎于C++的动画框架,Qt Quick的动画框架绚丽并且易用,非常值得学习。原创 2014-06-20 20:55:59 · 5357 阅读 · 5 评论 -
Qt移动应用开发(一):适配不同的屏幕
到目前为止,Qt5.3已经出现很长一段时间了,并且已经有一些应用使用Qt进行构建了,我自己也完成了第一款使用Qt构建的手机游戏《吃药了》。那么接下来的几篇文章主要向大家分享我是怎样使用Qt进行移动开发的。Qt移动应用开发分为多篇博客文章,每一篇文章都力求精简不罗嗦,力求为大家提供一个快捷的参考。我在这里也主要将使用Qt制作《吃药了》的方法技巧一一分享给大家。原创 2014-06-17 22:12:53 · 8436 阅读 · 6 评论 -
用Qt制作的Android独立游戏《吃药了》发布
一个多月的努力终于有了回报,我自己研究制作的独立游戏《吃药了》,终于在360应用商店上线了。 这一款游戏呢,使用的是Qt开发的。其实开发这款简单的应用之前,我经历了端游和页游,但是对手游开发了解甚少。不过今年5月20日,Qt官方发布了Qt5.3,对Android和iOS的支持变得成熟起来了,于是我打算冒一个险,使用大家从未使用过的Qt来开发手机游戏。这一个月呢,各种心酸各种泪,我曾经感受到整天10多个小时开发的疲惫;我曾经感受到家人的种种催促;我曾经感受到同事们的好言相劝;我曾经感受到自己内心原创 2014-06-04 16:34:58 · 11418 阅读 · 31 评论 -
使用GLSL实现对光照的模拟(二)
OpenGL固定渲染管线主要实现的是高洛德着色模型,这是一种简单的光照效果,主要应用在实时渲染领域。我这次实践主要将全局光照、漫反射效果以及镜面反射效果实现了,漫反射使用了兰伯特(Lambert)公式、镜面反射使用可比林 – 冯(Blinn - Phong)公式。原创 2014-04-20 22:02:51 · 5389 阅读 · 0 评论 -
使用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 评论 -
使用着色器实现蒙皮动画和形变动画
和以往我提供的演示程序不同,这一次我换了一个新的框架,再也不采用OpenGL的固定渲染管线进行渲染了,而是采用兼容OpenGL(ES)2.0的着色器方式进行渲染。当然,为了利用着色器提供的并行计算功能,我用顶点着色器写了硬件蒙皮动画,以尽可能地利用GPU多做一些事情。可惜骨骼动画由于比较复杂,暂时无法用顶点着色器实现,同时表示面部表情的形变动画(Metamorphic Animation)也是在CPU上完成的。原创 2014-03-16 10:56:14 · 4175 阅读 · 8 评论 -
有关Assimp与Qt3D
Qt3D在Qt4时代就已经存在了,当时Qt这个项目还处于诺基亚的管理之下。到了Digia接手Qt的时候,Qt3D作为遗留项目保留了起来。这里有我以前写的有关Qt3D的文字。最初Qt5出来的时候并没有包括Qt3D,很显然,因为要对Qt4时代诸多Qt子项目进行移植谈何容易!于是我们看到Qt5.0的时候Qt库非常精简,仍然有很多的Qt4库没有被移植过来,而且还有很多Bug!我想Digia希望通过Qt5.1、Qt5.2和Qt5.3对这些Bug进行修复,这样一个健壮的Qt基础库才能够支撑诸多Qt4时代的子项目。原创 2014-03-13 12:12:16 · 9616 阅读 · 10 评论 -
蒙皮动画初步完成
蒙皮动画和骨骼动画结合比较紧密,骨骼动画完成了之后,蒙皮动画也比较好做,可是那时我没有掌握透向量、矩阵以及四元数的基本计算,走了一些弯路,也搁置了原来的目标。在学习完一些新的技术后,再回来学习蒙皮动画,觉得到了实现它的时候了,于是制作了这样一个演示程序。原创 2014-03-07 22:32:41 · 3594 阅读 · 4 评论 -
利用GPGPU方法将大量数据通过纹理传输至GPU进行计算
在显卡并行计算起源的领域,比如说游戏开发领域,GPU的发展使得其迈向了新的纪元,画面愈加精致,效果愈加震撼,同时并行计算框架CUDA和OpenCL的兴起,则将显卡的计算潜能充分地释放了出来。最后令人高兴的是,以前就受惠于显卡发展的游戏开发领域,将显卡的功能做了新的扩展,以前只用来渲染用的显卡,目前可以做更多逻辑领域相关的事儿了。原创 2014-02-19 22:26:34 · 6713 阅读 · 10 评论 -
OpenGL4.x学习之使用绘制三角形
OpenGL很多人都有所了解,也有很多人使用OpenGL开发过工业级的应用和游戏应用,不过它的最新版本OpenGL4.x了解的人就不是太多了。目前OpenGL的最新版本是4.4,并且NVIDIA和AMD厂商发布了支持OpenGL最新版本的驱动程序,我想基于OpenGL4.x讲解的书籍也会逐渐增多。原创 2014-02-19 22:08:47 · 3324 阅读 · 0 评论 -
OpenGL4.x学习之使用着色器、绑定VAO以及绘制最简单的图元——点
OpenGL4.x是OpenGL系列最新的规范,它为此制定了很多的概念,包括6种着色器、以及诸多内存对象,让简单的三维显示变得不简单。我也是刚刚了解这些新的特性,所以有的地方阐述不正确还请高手们指出来。原创 2014-02-19 22:02:27 · 4018 阅读 · 9 评论 -
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 评论 -
自己动手静态编译和构建Qt5.2,包含Qt3D、Enginio和QtOpenCL
这个月初,Qt5.2正式发布,其中正式支持Android和初步支持iOS构建目标成为最大的亮点。而在它发布之前,我从它的源码镜像库gitorious中获取了最新的源码,并且甄选了两个自己需要研究的组件进行静态编译。两天的时间过去了,我克服了诸多困难,终于成功地在Ubuntu13.10和Windows8上静态编译构建Qt,以后发布Qt的演示程序不用担心客户机运行不了了。原创 2013-12-26 21:29:42 · 8696 阅读 · 11 评论 -
循环坐标下降(CCD)算法中对骨骼动画中膝盖等关节的特殊处理
最近研究循环坐标下降(cyclic coordinate decent,CCD)算法,发现它在处理人物的某些关节上不起作用。CCD算法的原始算法针对的是多个骨骼、多个关节的IK解算处理,但是对于人体骨骼有着特殊的构造,使用CCD算法不能正确地反映这些构造,所以我们必须对这些构造进行特殊处理。 那么人体骨骼的构造特殊性在哪儿呢?这里我们暂且不探讨骨骼扭转的情况,仅仅探讨骨骼旋转的情况。我们发现人体的一些部位有三个自由度(3 Dimensions of Freedom,3DoF),而另一些部位只有原创 2013-11-03 22:54:47 · 17466 阅读 · 4 评论 -
使用循环坐标下降(CCD)算法解算反向运动学(IK)
周五的时间总是美好的,今天也将自己制作的演示程序收官了。这篇文章是上一篇文章的继续,向大家介绍一下如何使用循环坐标下降(cyclic coordinatedecent,CCD)算法来求解反向运动学问题。 注意到了没有?我们要解决的问题属于刚体运动学范畴,所以一切涉及到形变的因素都不用考虑,因此我们既可以使用四元数和一个向量表示骨骼的位置和平移,也可以将两者结合起来使用一个矩阵表示骨骼的所有变换。学过计算机图形学的同学都知道,旋转分量和平移分量是互不影响的,所以可以简单地分别将旋转和平移叠加来表原创 2013-11-02 00:20:05 · 11717 阅读 · 5 评论 -
正向运动学和反向运动学
上次制作的骨骼动画例子程序并不完美,我在程序里面也说了,因为没有牵涉到反向运动学的知识,所以人物运动起来感觉脚无法收缩、头发无法飘逸的感觉。其实在现实中这样的情况是要避免的,但是由于在动画设计的时候要指定每一个关节,显得非常费事。所以引入了反向运动学这个概念。在介绍反向运动学之前,首先让我们看一下正向运动学。 正向运动学,通俗来说是给定父骨骼位置以及它的变换来得出子骨骼的位置以及变换,打一个比方,就像运动手臂,可以带动手肘,进而带动手掌运动。正向运动学的概念是非常容易理解的,实现起来也比原创 2013-11-01 00:24:33 · 16005 阅读 · 3 评论 -
骨骼动画初步完成
骨骼动画是角色动画的重要组成部分,因为只有把骨骼的位置摆准确了才能正确反映角色地姿势,后面的蒙皮动画就好做了。花了我十多天的时间,一直在琢磨着如何顺利地进行骨骼位置的变换,以达到MikuMikuDance中的样子。我做了很多实验,这回也算是有一定的成果吧,虽然关于反向运动学(Inverse Kinematics,IK)的部分我还没有吃透,不过做出一个东西,想分享分享。 关于骨骼的实现,一开始使用的是多叉树,后面发现使用多叉树进行遍历并不是那么好,因为要求的是层序遍历,我写过二叉树,发现层序原创 2013-10-24 21:19:23 · 3905 阅读 · 0 评论 -
一种让程序支持多渲染器的方法
在实际开发中,我们往往倾向于使用新的渲染器API进行图形的绘制,但是担心当部署到目标机器上时,由于硬件和显卡配置的限制而无法使用新的渲染器API。这可真让开发者们头疼。由于不同模型的格式不一样,渲染的方法也不尽相同,再加上渲染器的千变万化,让我们的工作量加大了很多! 一种解决方案是使用游戏引擎来解决问题。本文并不是介绍究竟如何使用这些引擎,而是提出了一种自己的方案,通过为每一个渲染器写一个渲染处理器(render handler)来化解这性能和兼容性的矛盾。原创 2013-10-17 21:19:03 · 3026 阅读 · 3 评论 -
使用Qt的QObject类实现多叉树
最近研究骨骼动画,需要显示人物模型的骨骼结构,说到骨骼结构,在计算机图形学中通常用树状结构来描述,在一篇介绍骨骼动画的文章中也谈到了树状结构。树是一种数据结构,它通常通过链式结构的形式来存储,能够直观地表达自然界的层次关系。正是因为树的这些特点,它非常适合渲染骨骼。 接下来就是如何实现树状结构了,虽然我以前实现过二叉树,但是这次要做的是多叉树,它具有多个孩子,还是有些不同的。一位高手自己通过std::vector和链式结构实现了多叉树,而强大的Qt开发框架似乎没有这样的数据结构?难道我也要原创 2013-10-10 23:17:35 · 3721 阅读 · 0 评论 -
骨骼动画的研究
10月份排上日程的研究首当其冲的就是骨骼动画了。骨骼动画是三维动画常见的方式,而二维动画则是帧动画,所以需要提高动画的帧率,二维动画需要做的工作比三维动画要多得多,这需要更多插画师多日的辛勤工作,而三维动画中每一帧是计算机自动生成的,所以增加的工作量不是特别的多。 有关骨骼动画的相关知识,可以参见网上的这一篇文章。网络上也有很多国内国外的前辈对骨骼动画研究的成果,这之中既有二维的,也有三维的。我在参考这些研究成果的同时,也开始了自己的研究。原创 2013-10-07 09:22:38 · 3577 阅读 · 3 评论 -
Qt的Graphics-View框架和OpenGL结合详解
这是一篇纯技术文,介绍了这一个月来我抽时间研究的成果。 Qt中有一个非常炫的例子:Boxes,它展示了Qt能够让其Graphics – View框架和Qt的OpenGL模块结合起来,渲染出非常出色的效果。其实我私自认为凭这个程序,已经有很多游戏开发者关注Qt了,因为游戏开发一个非常常见的模块就是UI,一般情况下游戏引擎提供的UI模块比较弱,基本上都是游戏引擎 + 第三方GUI库进行结合的。但是Qt以其Graphics – View框架能够非常轻松地将UI控件嵌入场景中,而且能够和OpenGL底层共存,更重原创 2013-09-27 00:08:01 · 19569 阅读 · 23 评论 -
将Qt、OpenGL、GLSL以及Qt的Graphics-View框架结合
Qt的QWidget大家族已经成熟,不会得到太大的发展了,而随着Qt5的发展,新的界面类会崭露头角,比如QWindow、QSurface、QScreen这些类。但现在的状况(Qt5.2即将出了),这些类和模块并不会对现有的GUI模块造成威胁,更不用说取代Qt4的GUI(在Qt5是QtGui和QtWidgets)模块了。自Qt4.4起,Qt拥有了Graphics-View框架,使用这个框架可以更加轻松地在窗口中嵌入任意你想要绘制的元素。但是据我所知,Qt5的那些类无法和Graphics-View框架进行整合,原创 2013-09-25 00:34:57 · 8387 阅读 · 10 评论 -
基于Qt和GLSL的着色器例子
基于Qt和GLSL的着色器例子 我的计算机换成新的了,可以支持OpenGL2.0以及以上的规范,这样我开始正式涉足OpenGL高级的内容了。目前我的OpenGL基础库是Qt,它有完备的功能,以及对OpenGL一层好的封装,所以用它来开发基于OpenGL的应用程序非常合适。下面是我就来介绍一下如何开发基于Qt和GLSL的程序。 GLSL是在OpenGL2.原创 2013-08-25 10:38:36 · 8833 阅读 · 5 评论 -
编写基于Qt的GLSL程序需要注意的几点
最近尝试着编写基于Qt和GLSL的小例子,遇到了一些小问题,在这里给大家分享一下,希望大家不要重蹈覆辙。原创 2013-08-25 10:00:29 · 13629 阅读 · 5 评论 -
使用向量点积来实现将模型绕着中心点旋转
使用向量点积来实现将模型绕着中心点旋转 如何在三维空间中实现模型绕着中心点旋转?这个问题听起来容易,但是经过我的实践,发现其实还是挺困难的。在研究OpenGL和DirectX的初级阶段,我相信这个问题还是挺伤大家的脑筋的。究竟该如何实现这样的功能呢?我想大家可能需要回过头,复习一下我们高中的知识,通过平面解析几何的类比,大家会找到好方法的。原创 2013-08-08 20:12:52 · 4693 阅读 · 0 评论 -
浅析OpenGL光照
浅谈OpenGL的光照 之前从来都没有涉及光照的内容,心想只要能通过常规的方法渲染出几何体甚至是模型就可以了,然而没有光照的日子注定是苦涩的,因为仅凭几何体和模型的颜色无法达到真是渲染的效果,在实际中有各种各样的光影响着我们的视觉效果,而OpenGL能够为我们还原现实生活中的光照现象。所以,我还是下决心研究OpenGL的光照了! 为了研究固定管线渲染原创 2013-08-07 13:21:28 · 7029 阅读 · 6 评论 -
OpenGL光照测试
花了大概半个月,研究了OpenGL的光照。请注意是固定管线渲染的光照,如果使用着色器的高手们请飘过。这个程序是通过光照对模型的照射,来研究OpenGL光照的性质。以后可以通过这个程序来构建更加复杂的场景。原创 2013-08-05 14:11:00 · 3096 阅读 · 0 评论 -
浅谈Qt对OpenGL(ES)2.0以及高级OpenGL_API的支持
Qt5相比Qt4有了很大的改变,对OpenGL这一部分支持的力度加大了。如果说Qt5.0对OpenGL这部分的改变还是试验性的,那么Qt5.1中与OpenGL相关的函数和封装则是优化和一些小小的微调。早在Qt5.1还没有发布的时候,国外就有高手发布了Qt5.1对OpenGL支持的相关特性(链接在这里)。原创 2013-07-13 23:30:52 · 10710 阅读 · 0 评论 -
用Qt动画框架设计飞入-消失特效
用Qt动画框架设计飞入-消失特效Qt动画框架很强大,只要你想得到,它就有可能帮你实现。这一次我将抽取上一个演示程序的部分来进行介绍。这一部分我命名为“飞入 - 消失”特效,主要用在文字的显示方面,从这点上说很像PowerPoint上面特效的一种。还是首先看看我的demo吧。下载地址:这里原创博客,反对未经允许的转载。原博客地址:http://blog.csdn.net/jiangc原创 2013-05-08 11:12:38 · 5439 阅读 · 7 评论 -
PMD格式模型的读取和显示
PMD格式模型的读取和显示已经五月了,花了超过十天的时间研究终于出成果了,写一篇日志纪念一下。PMD,全称Polygon Model Document,是一种三维模型格式,主要在MikuMikuDance和PMDEditor等中使用。而关于格式的说明就更少了,所以我的研究主要参考itsuhane的mmd库。PMD格式文件也是一种简单二进制文件,由于文件格式规范较为严格,因而文件内的原创 2013-05-08 10:18:47 · 13041 阅读 · 12 评论 -
Qt5中关于OpenGL部分的学习
一个阶段性的任务完成了,我开始继续学习游戏开发和Qt。因为Qt5的迅猛发展,我开始将自己精力逐渐从Qt4发展到Qt5。在我计算机中已经有很多个Qt版本了:Qt4.8.1、Qt4.8.3、Qt4.8.4、Qt5.0.1、Qt5.0.2。可见Qt5系列的版本正在增多,以后可能会淘汰若干个Qt4.x版本,而只留下一个。Qt5的最大变化之一就是Qt的OpenGL模块。按照Qt的文档中的说法,Qt5原创 2013-04-24 22:53:13 · 9677 阅读 · 4 评论 -
人工智能算法在游戏中演示
人工智能算法在游戏中演示人工智能是一个非常具有潜力的分支,顾名思义,它可以通过计算机指令模拟人的行为,在游戏中的人工智能就非常地多样了。对于FPS、TAB、RPG、STG、ADV等游戏,有着不同的人工智能,但都基于几种理论:有限状态机、遗传算法、神经网络等。下面我就采用游戏中最基础也是最常用的人工智能算法来进行演示。我的开发环境是:Windows: WindowsXP(SP3) + M原创 2013-04-06 13:36:06 · 10702 阅读 · 2 评论 -
使用Qt动画框架设计角色的二维动画(二)
使用Qt动画框架设计角色的二维动画(二)接上次的日志。上次发布demo虽然使用了大量的动画框架、有限状态机框架,但是仍有瑕疵。比如说在用户一直按下按键的时候角色会被“冻”住,但是角色的位置是移动的,这可能是使用QKeyEventTransition的一个副作用吧。在觉察到使用QKeyEventTransition不好使时,我开始着眼研究怎样将Qt按键的状态保存起来并且封装成让其余编码变原创 2013-04-05 20:39:00 · 5345 阅读 · 4 评论