OpenGL探索
文章平均质量分 70
本专栏聚焦OpenGL相关知识,专栏作者Jiangcaiyang123探索开源图形库在游戏领域当中的应用。
彩阳
学习DirectX还要靠大家指点指点啊。
展开
-
Qt移动应用开发(八):实现跨平台的QML和OpenGL混合渲染
上一篇文章讲到了利用C++这个桥梁,我们实现了QML和Java的交互。Qt 5大力推崇的QML/JS开发,让轻量、快速开发的QML/JS打头阵,让重量的C++撑腰,几乎什么技术都能够实现。接下来的这篇文章讲的是我们使用QML,借助Qt库和OpenGL,实现了使用着色器定义OpenGL的渲染方式,为大家呈现混合渲染的效果。原创 2014-07-21 22:53:24 · 19874 阅读 · 20 评论 -
在Windows下使用MinGW静态编译Assimp
Assimp是目前比较全的3D格式解析库了,熟悉3D游戏开发的同行都知道,3D的格式非常混乱,各种3D格式在不同场合都有他们特定的应用,游戏引擎只能够解析少部分3D格式,更多实用的格式来自游戏公司自定义的格式。而在开源领域,Assimp算是比较全的3D格式导入库了。它对3D格式理解深入,很适合整合至3D图形引擎中,让你们的程序支持更多3D的格式。原创 2014-05-25 17:38:50 · 22248 阅读 · 21 评论 -
使用GLSL实现对光照的模拟(二)
OpenGL固定渲染管线主要实现的是高洛德着色模型,这是一种简单的光照效果,主要应用在实时渲染领域。我这次实践主要将全局光照、漫反射效果以及镜面反射效果实现了,漫反射使用了兰伯特(Lambert)公式、镜面反射使用可比林 – 冯(Blinn - Phong)公式。原创 2014-04-20 22:02:51 · 5447 阅读 · 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 · 4767 阅读 · 2 评论 -
使用着色器实现蒙皮动画和形变动画
和以往我提供的演示程序不同,这一次我换了一个新的框架,再也不采用OpenGL的固定渲染管线进行渲染了,而是采用兼容OpenGL(ES)2.0的着色器方式进行渲染。当然,为了利用着色器提供的并行计算功能,我用顶点着色器写了硬件蒙皮动画,以尽可能地利用GPU多做一些事情。可惜骨骼动画由于比较复杂,暂时无法用顶点着色器实现,同时表示面部表情的形变动画(Metamorphic Animation)也是在CPU上完成的。原创 2014-03-16 10:56:14 · 4204 阅读 · 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 · 9677 阅读 · 10 评论 -
蒙皮动画初步完成
蒙皮动画和骨骼动画结合比较紧密,骨骼动画完成了之后,蒙皮动画也比较好做,可是那时我没有掌握透向量、矩阵以及四元数的基本计算,走了一些弯路,也搁置了原来的目标。在学习完一些新的技术后,再回来学习蒙皮动画,觉得到了实现它的时候了,于是制作了这样一个演示程序。原创 2014-03-07 22:32:41 · 3623 阅读 · 4 评论 -
利用GPGPU方法将大量数据通过纹理传输至GPU进行计算
在显卡并行计算起源的领域,比如说游戏开发领域,GPU的发展使得其迈向了新的纪元,画面愈加精致,效果愈加震撼,同时并行计算框架CUDA和OpenCL的兴起,则将显卡的计算潜能充分地释放了出来。最后令人高兴的是,以前就受惠于显卡发展的游戏开发领域,将显卡的功能做了新的扩展,以前只用来渲染用的显卡,目前可以做更多逻辑领域相关的事儿了。原创 2014-02-19 22:26:34 · 6745 阅读 · 10 评论 -
OpenGL4.x学习之使用绘制三角形
OpenGL很多人都有所了解,也有很多人使用OpenGL开发过工业级的应用和游戏应用,不过它的最新版本OpenGL4.x了解的人就不是太多了。目前OpenGL的最新版本是4.4,并且NVIDIA和AMD厂商发布了支持OpenGL最新版本的驱动程序,我想基于OpenGL4.x讲解的书籍也会逐渐增多。原创 2014-02-19 22:08:47 · 3375 阅读 · 0 评论 -
OpenGL4.x学习之使用着色器、绑定VAO以及绘制最简单的图元——点
OpenGL4.x是OpenGL系列最新的规范,它为此制定了很多的概念,包括6种着色器、以及诸多内存对象,让简单的三维显示变得不简单。我也是刚刚了解这些新的特性,所以有的地方阐述不正确还请高手们指出来。原创 2014-02-19 22:02:27 · 4075 阅读 · 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 · 7560 阅读 · 5 评论 -
OpenGL4.x学习之开发环境的选择
从OpenGL3.2开始,固定渲染的功能逐渐地被废弃,可编程渲染成为了主角,为此我们也必须跟上来,学习OpenGL可编程渲染部分。不过虽然说固定渲染功能被废弃了,有些内容还真的必须是固定渲染流程,没法走可编程渲染。比如说栅格化(Rasterization)和帧缓存(一说帧缓冲区)的操作(Framebuffer operations),在现阶段无法做到可编程。直到OpenGL4.4,着色器的种类增加到了6个。它们分别是顶点着色器、分格化控制着色器(Tessellation control shader)、分格原创 2014-02-08 15:15:42 · 4492 阅读 · 6 评论 -
循环坐标下降(CCD)算法中对骨骼动画中膝盖等关节的特殊处理
最近研究循环坐标下降(cyclic coordinate decent,CCD)算法,发现它在处理人物的某些关节上不起作用。CCD算法的原始算法针对的是多个骨骼、多个关节的IK解算处理,但是对于人体骨骼有着特殊的构造,使用CCD算法不能正确地反映这些构造,所以我们必须对这些构造进行特殊处理。 那么人体骨骼的构造特殊性在哪儿呢?这里我们暂且不探讨骨骼扭转的情况,仅仅探讨骨骼旋转的情况。我们发现人体的一些部位有三个自由度(3 Dimensions of Freedom,3DoF),而另一些部位只有原创 2013-11-03 22:54:47 · 17536 阅读 · 4 评论 -
使用循环坐标下降(CCD)算法解算反向运动学(IK)
周五的时间总是美好的,今天也将自己制作的演示程序收官了。这篇文章是上一篇文章的继续,向大家介绍一下如何使用循环坐标下降(cyclic coordinatedecent,CCD)算法来求解反向运动学问题。 注意到了没有?我们要解决的问题属于刚体运动学范畴,所以一切涉及到形变的因素都不用考虑,因此我们既可以使用四元数和一个向量表示骨骼的位置和平移,也可以将两者结合起来使用一个矩阵表示骨骼的所有变换。学过计算机图形学的同学都知道,旋转分量和平移分量是互不影响的,所以可以简单地分别将旋转和平移叠加来表原创 2013-11-02 00:20:05 · 11775 阅读 · 5 评论 -
正向运动学和反向运动学
上次制作的骨骼动画例子程序并不完美,我在程序里面也说了,因为没有牵涉到反向运动学的知识,所以人物运动起来感觉脚无法收缩、头发无法飘逸的感觉。其实在现实中这样的情况是要避免的,但是由于在动画设计的时候要指定每一个关节,显得非常费事。所以引入了反向运动学这个概念。在介绍反向运动学之前,首先让我们看一下正向运动学。 正向运动学,通俗来说是给定父骨骼位置以及它的变换来得出子骨骼的位置以及变换,打一个比方,就像运动手臂,可以带动手肘,进而带动手掌运动。正向运动学的概念是非常容易理解的,实现起来也比原创 2013-11-01 00:24:33 · 16095 阅读 · 3 评论 -
骨骼动画初步完成
骨骼动画是角色动画的重要组成部分,因为只有把骨骼的位置摆准确了才能正确反映角色地姿势,后面的蒙皮动画就好做了。花了我十多天的时间,一直在琢磨着如何顺利地进行骨骼位置的变换,以达到MikuMikuDance中的样子。我做了很多实验,这回也算是有一定的成果吧,虽然关于反向运动学(Inverse Kinematics,IK)的部分我还没有吃透,不过做出一个东西,想分享分享。 关于骨骼的实现,一开始使用的是多叉树,后面发现使用多叉树进行遍历并不是那么好,因为要求的是层序遍历,我写过二叉树,发现层序原创 2013-10-24 21:19:23 · 3951 阅读 · 0 评论 -
四元数学习之用四元数旋转向量
最近对四元数的学习又深入了一些,既然可以用四元数来表示三维物体的旋转,那么如何由一个向量和四元数作用得到一个旋转后的向量呢? 上篇博客讲到了如何将四元数转化为矩阵,这次其实是上一次的延伸,我们知道矩阵可以和向量进行相乘的,方法是将向量填充为四维齐次向量,然后4×4的矩阵左乘4×1的列向量,得到的是4×1的列向量,就是经过转换后的向量,再去掉齐次即可。原创 2013-10-24 20:11:10 · 7198 阅读 · 0 评论 -
一种让程序支持多渲染器的方法
在实际开发中,我们往往倾向于使用新的渲染器API进行图形的绘制,但是担心当部署到目标机器上时,由于硬件和显卡配置的限制而无法使用新的渲染器API。这可真让开发者们头疼。由于不同模型的格式不一样,渲染的方法也不尽相同,再加上渲染器的千变万化,让我们的工作量加大了很多! 一种解决方案是使用游戏引擎来解决问题。本文并不是介绍究竟如何使用这些引擎,而是提出了一种自己的方案,通过为每一个渲染器写一个渲染处理器(render handler)来化解这性能和兼容性的矛盾。原创 2013-10-17 21:19:03 · 3071 阅读 · 3 评论 -
骨骼动画的研究
10月份排上日程的研究首当其冲的就是骨骼动画了。骨骼动画是三维动画常见的方式,而二维动画则是帧动画,所以需要提高动画的帧率,二维动画需要做的工作比三维动画要多得多,这需要更多插画师多日的辛勤工作,而三维动画中每一帧是计算机自动生成的,所以增加的工作量不是特别的多。 有关骨骼动画的相关知识,可以参见网上的这一篇文章。网络上也有很多国内国外的前辈对骨骼动画研究的成果,这之中既有二维的,也有三维的。我在参考这些研究成果的同时,也开始了自己的研究。原创 2013-10-07 09:22:38 · 3607 阅读 · 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 · 19671 阅读 · 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 · 8452 阅读 · 10 评论 -
基于Qt和GLSL的着色器例子
基于Qt和GLSL的着色器例子 我的计算机换成新的了,可以支持OpenGL2.0以及以上的规范,这样我开始正式涉足OpenGL高级的内容了。目前我的OpenGL基础库是Qt,它有完备的功能,以及对OpenGL一层好的封装,所以用它来开发基于OpenGL的应用程序非常合适。下面是我就来介绍一下如何开发基于Qt和GLSL的程序。 GLSL是在OpenGL2.原创 2013-08-25 10:38:36 · 8877 阅读 · 5 评论 -
编写基于Qt的GLSL程序需要注意的几点
最近尝试着编写基于Qt和GLSL的小例子,遇到了一些小问题,在这里给大家分享一下,希望大家不要重蹈覆辙。原创 2013-08-25 10:00:29 · 13722 阅读 · 5 评论 -
OpenGL中glRotatef()函数究竟对矩阵做了什么
我们知道OpenGL中维持着两套矩阵,一个是模型视图矩阵(model view matrix),另一个是投影矩阵(projection matrix)。而Direct3D维持着三个矩阵,其实它们的本质是一样的,因为Model(World)矩阵×View矩阵 = ModelView矩阵,也就是OpenGL的模型视图矩阵。通过对OpenGL这两套矩阵的变换,我们可以得到各种投影效果。这回我就来研究OpenGL中一个常见的函数glRotatef(d)。 看参数,glRotatef( angle,原创 2013-08-12 17:40:37 · 19109 阅读 · 4 评论 -
使用向量点积来实现将模型绕着中心点旋转
使用向量点积来实现将模型绕着中心点旋转 如何在三维空间中实现模型绕着中心点旋转?这个问题听起来容易,但是经过我的实践,发现其实还是挺困难的。在研究OpenGL和DirectX的初级阶段,我相信这个问题还是挺伤大家的脑筋的。究竟该如何实现这样的功能呢?我想大家可能需要回过头,复习一下我们高中的知识,通过平面解析几何的类比,大家会找到好方法的。原创 2013-08-08 20:12:52 · 4716 阅读 · 0 评论 -
浅析OpenGL光照
浅谈OpenGL的光照 之前从来都没有涉及光照的内容,心想只要能通过常规的方法渲染出几何体甚至是模型就可以了,然而没有光照的日子注定是苦涩的,因为仅凭几何体和模型的颜色无法达到真是渲染的效果,在实际中有各种各样的光影响着我们的视觉效果,而OpenGL能够为我们还原现实生活中的光照现象。所以,我还是下决心研究OpenGL的光照了! 为了研究固定管线渲染原创 2013-08-07 13:21:28 · 7086 阅读 · 6 评论 -
OpenGL光照测试
花了大概半个月,研究了OpenGL的光照。请注意是固定管线渲染的光照,如果使用着色器的高手们请飘过。这个程序是通过光照对模型的照射,来研究OpenGL光照的性质。以后可以通过这个程序来构建更加复杂的场景。原创 2013-08-05 14:11:00 · 3120 阅读 · 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 · 10760 阅读 · 0 评论 -
使用OpenGL的glBindTexture()函数需要注意
使用OpenGL的glBindTexture()函数需要注意由于不了解OpenGL中的glBindTexture()函数的用法,多耽误了我几个小时的宝贵时间!glBindTexture()函数在渲染的时候调用,需要注意,一定不能放在glBegin()和glEnd()函数对中,否则函数的调用无效。下面就总结一下怎样在OpenGL中载入和显示纹理。1、在初始化阶段,调用glGenTextu原创 2013-04-29 23:39:23 · 19705 阅读 · 0 评论 -
OpenGL中glFrustum()和gluPerspective()的相互转换
OpenGL中glFrustum()和gluPerspective()的相互转换OpenGL中在窗口的大小发生变化的时候会触发resize()函数,这里会传入一个新的宽和高,在resize()函数中我们会设置投影矩阵,在可以使用OpenGL基础函数glFrustum()函数和glu函数gluPerspective()函数。网上介绍两个函数联系比较少,所以自己研究呗。OpenGL函数glFr原创 2013-04-28 00:47:14 · 7156 阅读 · 0 评论 -
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 · 9747 阅读 · 4 评论 -
Qt下实现3DS文件的读入和显示
Qt下实现3DS文件的读入和显示 在实现了glut框架下读入和显示3DS文件成功后,我开始了在Qt这个成熟又有活力的框架下读入和显示3DS文件。(原文出自http://blog.csdn.net/jiangcaiyang123,请转载时注明出处,谢谢。)演示程序下载地址:这里源代码下载地址:这里 在这次移植中,我没有使用自己的三维数学库,而是使用了Qt内置的原创 2013-03-06 10:39:31 · 7619 阅读 · 6 评论 -
3DS文件在OpenGL的读入和显示
<!--p {margin-bottom:0.21cm}-->3DS文件在OpenGL的读入和显示学习了Blender之后,很想将自己设计的模型载入自己编写的程序中,因此考虑了比较常见的3DS文件格式。这回尝试着将3DS文件载入自己写的OpenGL程序并且显示出来。演示程序下载地址:这里源代码下载地址:这里首先查找了许多现成载入3DS格式的例原创 2013-02-26 15:56:32 · 9228 阅读 · 6 评论 -
用OpenGL制作三维迷宫(二)
<!--@page {margin:2cm}pre {font-family:"DejaVu Sans Mono",monospace}p.我的格式-western {font-family:"DejaVu Sans",sans-serif; font-size:10pt; page-break-before:auto}p.我的格式-cjk {font-si原创 2012-12-22 22:28:40 · 7434 阅读 · 8 评论 -
用OpenGL制作三维迷宫(一)
<!--@page {margin:2cm}p.我的格式-western {font-family:"DejaVu Sans",sans-serif; font-size:10pt; page-break-before:auto}p.我的格式-cjk {font-size:10pt; page-break-before:auto}p.我的格式-ctl {原创 2012-12-22 14:37:31 · 9641 阅读 · 0 评论 -
用OpenGL制作摄像机系统
<!--@page {margin:2cm}pre {font-family:"DejaVu Sans Mono",monospace}p.我的格式-western {font-family:"DejaVu Sans",sans-serif; font-size:10pt}p.我的格式-cjk {font-size:10pt}p.我的格式-ctl {fo原创 2012-12-22 14:35:38 · 5350 阅读 · 2 评论 -
一些OpenGL的笔记
<!--@page {margin:2cm}pre {font-family:"DejaVu Sans Mono",monospace}p.我的格式-western {font-family:"DejaVu Sans",sans-serif; font-size:10pt}p.我的格式-cjk {font-size:10pt}p.我的格式-ctl {fo原创 2012-12-17 20:12:21 · 2316 阅读 · 0 评论 -
OpenGL下实现Alpha混合
<!--@page {margin:2cm}pre.cjk {font-family:"DejaVu Sans Condensed",monospace}p {margin-bottom:0.21cm}-->OpenGL下实现Alpha混合有很久都没有使用OpenGL了。一直都只是看书,一旦实践起来就会发现比想象起来困难得多。不过我还是实现了Open原创 2012-12-09 09:44:32 · 4174 阅读 · 6 评论 -
自己编写一个读取TGA文件的类
<!--@page {margin:2cm}pre.cjk {font-family:"DejaVu Sans Condensed",monospace}p {margin-bottom:0.21cm}-->自己编写一个读取TGA文件的类TGA文件,也就是Targa文件,是一种图片的格式,在游戏和绘图领域中用得比较广泛。TGA文件是位图文件,存储着各原创 2012-11-28 22:24:10 · 6468 阅读 · 4 评论 -
基于glut的OpenGL框架(二)
<!--@page {margin:2cm}pre.cjk {font-family:"DejaVu Sans Condensed",monospace}p {margin-bottom:0.21cm}-->基于glut的OpenGL框架(二)——加入键盘控制前面一篇文章我向大家介绍了我自己制作的基于glut的OpenGL框架。接下来我们要加入交原创 2012-10-28 09:57:55 · 3381 阅读 · 2 评论