探索着色器
文章平均质量分 88
着色器是一类小程序,它被用来处理三维数据并以特定的形式呈现在输出设备上。我们所讨论的是业内被广泛应用的GLSL、HLSL和Cg这三类着色器。对于开发者来说,着色器的使用和研究是一门前沿领域,我将自己学习着色器的点滴制作成专栏,供同行们参考。
彩阳
学习DirectX还要靠大家指点指点啊。
展开
-
Qt 3D的研究(五):Gooch Shader
Qt 3D的一个很大的优势就是采用数据驱动的方式,将C++和GLSL使用QML来表示,动态语言的优势尽显。在上一次的研究中,我实现了一个非常简单的着色器,接下来,我们可以在此基础上,通过设定着色器的数据,制作出更加绚丽的着色效果。作为开始,我们先从几个非真实渲染(Non-Photorealistic Rendering,NPR)开始吧。原创 2015-03-01 22:58:45 · 5042 阅读 · 0 评论 -
Qt 3D的研究(四):指定渲染的材质以及效果
在上一篇文章中我了解到了怎样简单地显示模型。Qt3D内置了一个obj模型的解析器,这样可以将简单的obj模型载入并且显示出来。其实Qt3D对于渲染的配置还是很厉害的,通过设定材质,我们可以得到很不错的渲染效果,而且可以通过设定Effect,将自己指定的着色器载入,让Qt 3D和OpenGL进行编译,得到自己想要的渲染效果。原创 2015-02-28 11:16:29 · 9146 阅读 · 2 评论 -
Qt移动应用开发(八):实现跨平台的QML和OpenGL混合渲染
上一篇文章讲到了利用C++这个桥梁,我们实现了QML和Java的交互。Qt 5大力推崇的QML/JS开发,让轻量、快速开发的QML/JS打头阵,让重量的C++撑腰,几乎什么技术都能够实现。接下来的这篇文章讲的是我们使用QML,借助Qt库和OpenGL,实现了使用着色器定义OpenGL的渲染方式,为大家呈现混合渲染的效果。原创 2014-07-21 22:53:24 · 19832 阅读 · 20 评论 -
使用GLSL实现对光照的模拟(二)
OpenGL固定渲染管线主要实现的是高洛德着色模型,这是一种简单的光照效果,主要应用在实时渲染领域。我这次实践主要将全局光照、漫反射效果以及镜面反射效果实现了,漫反射使用了兰伯特(Lambert)公式、镜面反射使用可比林 – 冯(Blinn - Phong)公式。原创 2014-04-20 22:02:51 · 5424 阅读 · 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 · 4747 阅读 · 2 评论 -
利用着色器实现游戏的公告板特效
利用着色器实现游戏的公告板特效 这几日进展比较缓慢,主要是对自己搭建的基于Qt和OpenGL(ES)2.0的框架进行整合。同时利用现有的技术,制作一个基于OpenGL的公告板效果,同时提升一下自己书写着色器的能力。原创文章,反对未声明的引用。原博客地址:http://blog.csdn.net/gamesdev/article/details/22205357原创 2014-03-26 19:56:34 · 4267 阅读 · 1 评论 -
使用着色器实现蒙皮动画和形变动画
和以往我提供的演示程序不同,这一次我换了一个新的框架,再也不采用OpenGL的固定渲染管线进行渲染了,而是采用兼容OpenGL(ES)2.0的着色器方式进行渲染。当然,为了利用着色器提供的并行计算功能,我用顶点着色器写了硬件蒙皮动画,以尽可能地利用GPU多做一些事情。可惜骨骼动画由于比较复杂,暂时无法用顶点着色器实现,同时表示面部表情的形变动画(Metamorphic Animation)也是在CPU上完成的。原创 2014-03-16 10:56:14 · 4190 阅读 · 8 评论 -
利用GPGPU方法将大量数据通过纹理传输至GPU进行计算
在显卡并行计算起源的领域,比如说游戏开发领域,GPU的发展使得其迈向了新的纪元,画面愈加精致,效果愈加震撼,同时并行计算框架CUDA和OpenCL的兴起,则将显卡的计算潜能充分地释放了出来。最后令人高兴的是,以前就受惠于显卡发展的游戏开发领域,将显卡的功能做了新的扩展,以前只用来渲染用的显卡,目前可以做更多逻辑领域相关的事儿了。原创 2014-02-19 22:26:34 · 6720 阅读 · 10 评论 -
OpenGL4.x学习之使用绘制三角形
OpenGL很多人都有所了解,也有很多人使用OpenGL开发过工业级的应用和游戏应用,不过它的最新版本OpenGL4.x了解的人就不是太多了。目前OpenGL的最新版本是4.4,并且NVIDIA和AMD厂商发布了支持OpenGL最新版本的驱动程序,我想基于OpenGL4.x讲解的书籍也会逐渐增多。原创 2014-02-19 22:08:47 · 3357 阅读 · 0 评论 -
OpenGL4.x学习之使用着色器、绑定VAO以及绘制最简单的图元——点
OpenGL4.x是OpenGL系列最新的规范,它为此制定了很多的概念,包括6种着色器、以及诸多内存对象,让简单的三维显示变得不简单。我也是刚刚了解这些新的特性,所以有的地方阐述不正确还请高手们指出来。原创 2014-02-19 22:02:27 · 4056 阅读 · 9 评论 -
Irrlicht学习之使用着色器
Irrlicht是从2002年开始发布的,那时我想应该还没有成熟的着色器,我记得那时候Direct3D8的着色器是汇编代码,非常难用,而Direct3D9的HLSL还不太为人所知,而OpenGL的着色器GLSL还没有出世。没有着色器,渲染可能非常单调,而且固定渲染模式非常臃肿。但是现在已经大不相同了,Irrlicht也支持非常多的着色器,它们能够为用户呈现出非常满意的效果。于是我也开始尝试使用Irrlicht的着色器渲染模型。原创 2013-11-29 21:41:18 · 3001 阅读 · 0 评论 -
OpenGL4.x学习之开发环境的选择
从OpenGL3.2开始,固定渲染的功能逐渐地被废弃,可编程渲染成为了主角,为此我们也必须跟上来,学习OpenGL可编程渲染部分。不过虽然说固定渲染功能被废弃了,有些内容还真的必须是固定渲染流程,没法走可编程渲染。比如说栅格化(Rasterization)和帧缓存(一说帧缓冲区)的操作(Framebuffer operations),在现阶段无法做到可编程。直到OpenGL4.4,着色器的种类增加到了6个。它们分别是顶点着色器、分格化控制着色器(Tessellation control shader)、分格原创 2014-02-08 15:15:42 · 4472 阅读 · 6 评论 -
探究OpenGL光照模型的着色器实现
OpenGL的着色器是新的显卡提供给开发者一个小程序,为的是让开发者对光照、坐标转换以及像素进行一些个性化的处理。OpenGL的着色器有一种专门的语言:GLSL,现在的GLSL应该全面转向Shader Model5,像我这样的初学者还需要花费更长的时间来学习才能基本了解OpenGL的着色器方面的知识。 下面两图展示了OpenGL从固定渲染管线到可编程渲染管线的变化 从图中我们可以很容易地看出,OpenGL的顶点着色器取代了固定渲染管线的转换、光照、纹理坐标生成和转换;片断着色器取代了纹理、颜色求和和雾的原创 2013-09-27 23:08:07 · 5076 阅读 · 1 评论 -
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 · 19627 阅读 · 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 · 8426 阅读 · 10 评论 -
基于Qt和GLSL的着色器例子
基于Qt和GLSL的着色器例子 我的计算机换成新的了,可以支持OpenGL2.0以及以上的规范,这样我开始正式涉足OpenGL高级的内容了。目前我的OpenGL基础库是Qt,它有完备的功能,以及对OpenGL一层好的封装,所以用它来开发基于OpenGL的应用程序非常合适。下面是我就来介绍一下如何开发基于Qt和GLSL的程序。 GLSL是在OpenGL2.原创 2013-08-25 10:38:36 · 8849 阅读 · 5 评论 -
编写基于Qt的GLSL程序需要注意的几点
最近尝试着编写基于Qt和GLSL的小例子,遇到了一些小问题,在这里给大家分享一下,希望大家不要重蹈覆辙。原创 2013-08-25 10:00:29 · 13668 阅读 · 5 评论