OpenGL进阶
文章平均质量分 92
如果你已经有了一些OpenGL的基础,这里就是你要去的地方。
拳四郎
拳四郎
展开
-
OpenGL进阶(十九) - 多光源
从光说起先看一段wiki中对光的定义光是一种人类眼睛可以见的电磁波(可见光谱),视知觉就是对于光的知觉[1]。光只是电磁波谱上的某一段频谱,一般是定义为波长介于400至700纳米(nm)之间的电磁波,也就是波长比紫外线长,比红外线短的电磁波。有些资料来源定义的可见光的波长范围也有不同,较窄的有介于420至680纳米,较宽的有介于380至800纳米。光既是一种高频的电磁波,又是一种由称为光子的基本粒原创 2015-01-16 11:22:56 · 5283 阅读 · 1 评论 -
OpenGL进阶(十八) - 从零搭建基于SDL2的GLSL编辑框架
环境:Ubuntu 12.04 64bit编译assimp 版本3.0.1270Assimp(Open Asset Import Library)是一个支持读取多种模型资源的开源库,当前最新的版本是3.0版,支持读取多种类型的3D模型。下载地址:http://sourceforge.net/projects/assimp/files/assimp-3.0/下载的是这个完整的源码包:assimp--原创 2014-03-16 16:33:18 · 8979 阅读 · 7 评论 -
OpenGL进阶(十七) - 深入理解OpenGL
翻译自《 OpenGL Programming Guide》(8th) 第一章,标题为 Introduction to OpenGL。红宝书第八版和第七版的最大的区别就是OpenGL的版本从OpenGL2.X变成了OpenGL4.X,渲染流水线也从固定流水变化为可编程流水线,shader满天飞...好,进入正文。此文主要内容如下:1.介绍OpenGL的作用,告诉你OpenGL在计算机图形学中能做原创 2014-03-03 00:36:57 · 9155 阅读 · 7 评论 -
OpenGL进阶(十六) - GLSL纹理(Texture)
提要 纹理是实时渲染中的非常基础且非常重要的一个主题,它一直作为增强渲染效果的一个强有力手段。在固定渲染管线的opengl中,纹理的使用灵活度非常有限,有了shader之后,我们可以在shader中操作纹理,这时就可以用一些额外的渲染参数来渲染纹理,比如位移图(displacement maps),法向量(normal vectors)等等。 实际上在OpenGL原创 2013-11-24 11:02:46 · 14101 阅读 · 1 评论 -
OpenGL进阶(十五) - 弹簧质点系统(Mass Spring Systems)
简介 一个模拟变形物体最简单额方法就是将其表示为弹簧质点系统(Mass Spring Systems),因为方法简单,这个框架对于学习物理模拟和时间积分的各种技术都比较理想。一个弹簧质点包含了一系列由多个弹簧连接起来的质点,这样的系统的物理属性非常直接,模拟程序也很容易编写。 但是简单是有代价了:1.物体的行为依赖于弹簧系统的设置方法;2.很难通过调整弹簧系数来得到想要的结果;原创 2013-11-13 20:36:29 · 18572 阅读 · 14 评论 -
OpenGL进阶(十四) - UVN Camera实现
提要 3D游戏中最基本的一个功能就是3D漫游了,玩家可以通过键盘或者鼠标控制自己的视角。 之前我们也学习过一个相关的函数,glLookAt,用来制定摄像机的位置,摄像机观察目标位置,还有摄像机的放置方式,我们可以通过不断地调用这个函数来实现3D漫游,但更方便的是抽象出一个摄像机类,实现一些摄像机的方法。UVN相机UVN使用三个相互垂直的向量来表示相机的朝原创 2013-10-30 15:18:44 · 7213 阅读 · 6 评论 -
OpenGL进阶(十三) - GLSL光照(Lighting)
提要 在上一篇文章中,我们介绍了简单的Shading,同时提出了一个光照模型,模拟了一个点光源,但是,关于光的故事还没有结束... 今天要学习的是方向光源(Directional Light),聚光源(),多光源,影子,面光源。 关于光源的原理及数学描述,请参考:光线追踪(RayTracing)算法理论与实践(三)光照方向光源原创 2013-08-23 21:09:06 · 8115 阅读 · 0 评论 -
OpenGL进阶(十二) - 基础着色(Shading)
提要经过前面的关于GLSL基础学习,包括:OpenGL进阶(八) - GLSL入门Real-Rime Rendering (2) - 变换和矩阵(Translation and Matrics)...接下来的内容将会非常的有意思,比如全局光照,环境贴图,法线贴图,景深....是不是听着就很棒!想要学习的话,当然需要付出更多的努力!不过一切都是值得的。今天的内容主要是原创 2013-08-17 11:25:06 · 9875 阅读 · 1 评论 -
OpenGL进阶(十一) - GLSL4.x中的数据传递
Shader中的数据传递1、Vertext shader 和 fragment shader利用内建的 uniform 变量来获取有限的OpenGL状态;2、Vertext shader通过特殊的内建的 output 变量和自定义的out 变量来将数据传递给后面的阶段;3、Fregment shader通过特殊的内建 input 变量和用户定义的 in 变量来获取上一阶段的结果;4原创 2013-08-07 16:39:50 · 4286 阅读 · 1 评论 -
OpenGL进阶(十) - obj文件的导入
Obj文件简介 OBJ文件是Alias|Wavefront公司为它的一套基于工作站的3D建模和动画软件"Advanced Visualizer"开发的一种标准3D模型文件格式,很适合用于3D软件模型之间的互导,也可以通过Maya读写。比如你在3dsMax或LightWave中建了一个模型,想把它调到Maya里面渲染或动画,导出OBJ文件就是一种很好的选择。目前几乎所有知名的3D软原创 2013-08-02 11:06:23 · 19140 阅读 · 5 评论 -
OpenGL进阶(九) - GLSL中VAO和VBO的使用
回顾Vertex Shader : 基于GLSL的语法写的一种类C的代码,可以用来控制顶点的特性,比如位置,颜色还有纹理坐标等。Fragment Shader:用于计算每个片段的颜色,可用于实现光照还有真实感的贴图。还有一种Shader 叫做Geometry Shader,用于添加顶点。使用结合了GLSL的OpenGL程序的渲染管线就变成了这样:原创 2013-08-01 10:15:20 · 13237 阅读 · 12 评论 -
OpenGL进阶(八) - GLSL入门
简介 随着图形硬件的发展,渲染管线由固定不可更改想着可编程和更平滑的方向不断发展。越来越多的基于GPU的编程语言开始出现,cg,cuda,各种着色语言等等。 今天要介绍的就是和OpenGL结合非常紧密的GLSL(OpenGL Shading Language). 通过OpenGL的API我们可以绘制图元,变换图形等等,当并不能改变基础的渲染管线。在OpenGL中原创 2013-07-31 11:08:34 · 7443 阅读 · 1 评论 -
OpenGL进阶(七)-康托尔集 谢尔宾斯基地毯 Koch雪花
这一篇关于分形图像,当然只是入门。分形通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。分形有几种类型,可以分别依据表现出的精确自相似性、半自相似性和统计自相似性来定义。虽然分形是一个数学构造,它们同样可以在自然界中被找到,这使得它们被划入艺术作品的范畴。之前有做过一个镂垫的程序,今天要做的是康托集,谢尔宾斯基原创 2012-12-29 12:10:43 · 7137 阅读 · 0 评论 -
OpenGL进阶(六)-粒子系统
一、提要 有一款例子特效软件叫做particle illution,在影视后期和游戏制作领域都可以用到,相信很多人都接触过,今天我们用SDL+OpenGL来实现例子效果。确保你搞定了物理模拟的代码! 代码下载二、原理简介 所谓的例子系统,就是同时控制一大堆类似的对象,这些对象可能是形体,可能是图片,有着不同的特征(寿命,速度,位置)。有了之前的基础,我们原创 2012-12-22 20:55:25 · 10198 阅读 · 1 评论 -
OpenGL进阶(五) - 物理模拟
今天要实现的是利用OpenGL模拟三个物理学中常见的运动:自由落体,匀速之间,弹簧振子。首先要实现一个空间三维向量类,看这篇文章:向量类的实现然后主要要实现的是质点类,/*Copyright: 2012, ustc All rights reserved.contact:k283228391@126.comFile name: mass.hDescription:Parti原创 2012-12-21 11:49:54 · 8566 阅读 · 16 评论 -
OpenGL进阶(四)-用参数方程绘制椭球体
首先参考这篇文章绘制一个球体:OpenGL 用参数方程绘制球我们知道球体的参数方程是这样的:x=r·sin(α)·cos(β)y=r·sin(α)·sin(β)z=r·cos(α)椭圆的参数方程是:x=rx·sin(α)·cos(β)y=ry·sin(α)·sin(β)z=rz·cos(α)在这个基础上进行一些修改就可以实现椭圆的绘制了!代码实现如下原创 2012-12-20 18:21:52 · 12193 阅读 · 3 评论 -
OpenGL进阶(三) - 样条曲线的绘制
Cardinal样条曲线这个比较简单,一个终点,一个起点,两个控制点。终点和起点中间的点靠插值实现,插值函数:P(u)=Pk-1(-s*u*u*u+2s*u*u)+Pk[(2-s)u*u*u+(s-3)u*u+1]+Pk+1[(s-2)*u*u*u+(3-2s)*u*u+s*u]+Pk+2(s*u*u*u-s*u*u)代码实现:void getInterpolation(p原创 2012-12-15 14:29:41 · 9137 阅读 · 0 评论 -
OpenGL进阶(二) - 自定义矩阵加载
opengl里面的平移,旋转,缩放都是基于矩阵的运算,我们可以很方便地通过设定参数的方式调用一些接口函数来实现,同时我们也可以通过自定义的矩阵来实现上述的基本变换。首先来看一个渲染程序。GLfloat rtri; GLfloat posX;GLfloat posY;GLfloat scale=0.5f;void render原创 2012-12-12 01:19:03 · 4984 阅读 · 1 评论 -
OpenGL进阶(一) - 多视口
提要OpenGL视口(Viewport)可以看作是窗口中OpenGL的绘制输出区域,可以通过一条简单的glViewport命令设置。一般的OpenGL教程都是单视口,即整个窗口为惟一的一个视口,Nehe的OpenGL教程是我最早见到涉及多视口的。与单视口程序相比,多视口程序的变化主要是:(一)多视口程序不能在窗口resize/reshape时直接调用glViewport,而应该在此时记原创 2012-12-07 20:25:33 · 13625 阅读 · 7 评论