随笔分类 -  3D技术

摘要:Per-Vertex 与 Per-Pixel 两种光照的异同:两者都是基于相同的光照原理来进行光照计算的,Per-Vertex 光照计算是在顶点着色阶段进行,然后在光栅化阶段进行线性插值;而 Per-Pixel 光照计算是在片元着色阶段针对每一个像素进行。因此后者要比前者效果更好,看上去更加细致逼真,当然计算量自然也要多一些。 卡通效果是将漫反射因子分级,从而形成不连续的跳跃的漫反射效果。在本文中,是在片元着色阶段进行卡通效果处理的,它也可以在顶点着色阶段进行。 在这个系列的介绍中,只提及了一些简单的光照效果,还有很多更加逼真的光照算法或技巧没有涉及,比如菲涅尔效果或使用光照贴图。 阅读全文
posted @ 2013-01-11 20:52 飘飘白云 阅读(2553) 评论(6) 推荐(0) 编辑
摘要:在前文《[OpenGL ES 07-1]光照原理》中已经介绍 Opengl 中的光照原理,接下来将演示如何将这些原理用 OpenGL ES 2.0 来实现。今天的这篇文章将介绍 Per-Vertex Light 以及深度缓存,下一篇文章将介绍 Per-Pixel Light 以及卡通效果。还记得在第六篇文章的末尾留了一个小作业,用顶点缓存描绘一个立方体么 Cube?在这篇文章就会用到它。Per-Vertex Light 示例效果如下: 阅读全文
posted @ 2012-12-31 21:12 飘飘白云 阅读(2871) 评论(1) 推荐(0) 编辑
摘要:在前文《[OpenGL ES 05]相对空间变换及颜色》中讲到人的眼睛捕捉色彩的过程:在光照的作用下,物体表面反射不同频率的光子到人的眼睛中刺激感光细胞从而形成视觉。在那一篇文章中,演示了如何使用颜色,但没有提及光照,在接下来的文章中,我将来详细介绍光的特性,物体的材质属性,光照原理以及在 OpenGL ES 2.0中的应用示例。 阅读全文
posted @ 2012-12-29 21:15 飘飘白云 阅读(4997) 评论(6) 推荐(1) 编辑
摘要:在前面几篇文章里,顶点数据都是在主存中分配的内存空间,当需要进行渲染时,这些数据便通过 glDrawElements 或 glDrawArrays 从 CPU 主存中拷贝到 GPU 中去进行运算与渲染。这种做法需要频繁地在 CPU 与 GPU 之间传递数据,效率低下,因此出现了 VBO (Vertex Buffer object),即顶点缓存,它直接在 GPU 中开辟一个缓存区域来存储顶点数据,因为它是用来缓存储顶点数据,因此被称之为顶点缓存。我们只会在初始化缓冲区,以及在顶点数据有变化时才需要对该缓冲区进行写操作。使用顶点缓存能够大大较少了CPU-GPU 之间的数据拷贝开销,因此显著地提升了程序运行的效率。 阅读全文
posted @ 2012-12-20 22:32 飘飘白云 阅读(11117) 评论(2) 推荐(1) 编辑
摘要:前面已经花了两篇文章来讲 3D 变换,可 3D 变换实在不是区区两篇文章能讲的透的,为了尽量将这个话题讲得全面点,在这篇本来讲颜色的文章里再顺带讲讲相对空间变换这个还没有提及的话题。相对空间变换类似于为“本地”坐标到“世界”坐标的变换,就是坐标空间之间的变换。你可以想象下这样一个动作,抬起胳膊同时弯曲手臂,手臂相当于在胳膊的坐标空间中旋转,而胳膊所在空间又相当于在身体或胳膊的坐标空间中旋转。就好像空间是嵌套的,一层套一层,外层会影响里层,里层的变换是相对于外层进行的。此外,还将介绍如何在 OpenGL ES 中使用颜色以及背面剔除。 今天将演示这样一个相对运动与颜色的示例,示例运行效果如下图所示,源码在这里:点此查看 阅读全文
posted @ 2012-12-11 10:42 飘飘白云 阅读(3993) 评论(0) 推荐(3) 编辑
摘要:在这一篇文章中,介绍了如何通过 3D 变换来实现平移,旋转和缩放,以更好地理解前文中介绍的理论知识;同时也实现了如何通过 UIControl 来控制 OpenGL View 中的物体;此外还详细介绍了描绘图元的模式以及顶点索引模式。在文章的最后,介绍了如何使用 CADisplayLink 来实现动画效果。 阅读全文
posted @ 2012-12-07 22:10 飘飘白云 阅读(9523) 评论(0) 推荐(1) 编辑
摘要:本文详细介绍 3D 相关的一些数学知识,如矩阵变换,以及 3D 空间的物体是如何映射到屏幕上去这一整个过程:模型变换,视图变换,投影变换,视口变换。 阅读全文
posted @ 2012-12-06 19:57 飘飘白云 阅读(19081) 评论(7) 推荐(7) 编辑
摘要:在前文《[OpenGL ES 01]iOS上OpenGL ES之初体验》中我们学习了如何在 iOS 平台上设置OpenGL ES 环境,主要是设置 CAEAGLLayer 属性,创建 EAGLContext,已经创建 renderbuffer 和 framebuffer,并知道如何清屏。但实际上并没有真正描绘点什么。在本文中,我们将学习OpenGL ES 渲染管线,顶点着色器和片元着色器相关知识,然后使用可编程管线在屏幕上描绘一个简单三角形。 在 OpenGL ES 1.0 版本中,支持固定管线,而 OpenGL ES 2.0 版本不再支持固定管线,只支持可编程管线。什么是管线?什么又是固定管线和可编程管线?管线(pipeline)也称渲染管线,因为 OpenGL ES在进行渲染处理过程中会顺序执行一列操作,这一系列相关的处理阶段就被称为OpenGL ES 渲染管线。pipeline 来源于福特汽车生产车间的流水线作业,在OpenGL ES 渲染过程中也是一样,一个操作接着一个操作进行,就如流水线作业一样,这样的实现极大地提供了渲染的效率。整个渲染管线如下图所示: 阅读全文
posted @ 2012-11-25 22:35 飘飘白云 阅读(8081) 评论(0) 推荐(2) 编辑
摘要:OpenGL ES 是专门为手持设备指定的 3D 规范,它是 OpenGL 的简化版,该规范由khronos.org制定,目前最新规范版本为 3.0。 OpenGL ES 可以在不同手机系统上实现,也可以在浏览器上实现(Web GL)。在这里,我将介绍如何在 iOS 上使用 OpenGL ES,我是OpenGL ES 的初学者,错误之处难免,欢迎各位指出,共同提高。 阅读全文
posted @ 2012-11-24 23:24 飘飘白云 阅读(6638) 评论(0) 推荐(0) 编辑
摘要:glut使用示例 阅读全文
posted @ 2009-09-11 16:55 飘飘白云 阅读(2958) 评论(0) 推荐(0) 编辑
摘要:在欧几里得(或称笛卡尔)空间里描述2D/3D 几何物体是很理想的,但在投影空间里面却并不见得。 我们用 (x, y) 表示笛卡尔空间中的一个 2D 点,而处于无限远处的点 (∞,∞) 在笛卡尔空间里是没有意义的。投影空间里的两条平行线会在无限远处相交于一点,但笛卡尔空间里面无法搞定这个问题(因为无限远处的点在笛卡尔空间里是没有意义的),因此数学家想出齐次坐标这个点子来了。 阅读全文
posted @ 2009-09-09 17:28 飘飘白云 阅读(7186) 评论(3) 推荐(3) 编辑
摘要:平面方程以及点到平面的距离公式的推导。 阅读全文
posted @ 2009-09-09 15:38 飘飘白云 阅读(16192) 评论(1) 推荐(4) 编辑
摘要:OpenGL 下有一些重用的辅助库,比如glut,glee,glew等等,在windows平台下需要自己安装,因为微软为了推广自己的DX,在windows下只支持openGL 1.1版本。现在openGL已经发展到3.0了,因此我们需要自己下载配置这些库,在这里我们来安装glut, glee, glew这三个库。 阅读全文
posted @ 2009-09-08 13:46 飘飘白云 阅读(12520) 评论(4) 推荐(0) 编辑
摘要:这个教程用到了向量数学知识,如果你对向量数学还不是很了解,请先阅读向量教程:read the tutorial。 光照与物体表面的相互作用可以通过将一些数学公式应用于基于per pixel(区别于基于顶点)的着色,从而模拟出真实生活中的各种材质效果。比如浮雕效果,波浪效果,油漆效果等。 阅读全文
posted @ 2008-03-30 16:02 飘飘白云 阅读(896) 评论(0) 推荐(0) 编辑
摘要:本文列举了Direct3D中各种纹理应用实现:黑暗贴图,发光贴图,漫反射映射贴图,细节纹理,纹理混合,有较详尽的注解。其中黑暗贴图,发光贴图,细节纹理都是采用多重纹理的方法实现(也可以采用多次渲染混合实现)。 示例代码使用Beginning direct3D game programming中的框架,省去不少事情,可以专注纹理话题。代码:点此下载 阅读全文
posted @ 2008-03-23 14:18 飘飘白云 阅读(684) 评论(0) 推荐(0) 编辑
摘要:游戏中的资源一般都是由资源管理器来处理的,资源管理器负责载入,释放,以及根据资源ID返回相关资源供游戏程序使用。下面改写spheregames的纹理管理示例,使用dx9的common框架简单地实现了一个纹理资源管理器,权且贴出来一下。 阅读全文
posted @ 2008-03-22 22:18 飘飘白云 阅读(280) 评论(0) 推荐(0) 编辑
摘要:1843年,William Rowan Hamilton发明了四元数,但直到1985年才有一个叫Ken Shoemake的人将四元数引入计算机图形学处理领域。四元数在3D图形学中主要用于旋转,骨骼动画等。简单地来说,四元数描述了一次旋转:绕任意一个轴旋转一个角度。 四元数的定义形式:(w, x, y, z)。假如,绕轴向量v(_x,_y,_z)正向(右手旋转法则)旋转角度p,则对应得四元数q为: q = (cos(p/2), sin(p/2) * _x, sin(p/2) * _y, sin(p/2) * _z) 阅读全文
posted @ 2008-03-16 13:51 飘飘白云 阅读(1189) 评论(0) 推荐(0) 编辑

本博客遵循 Creative Commons License “署名-非商业用途-保持一致”创作共用协议。 与我联系