OpenGL学习
arag2009
这个作者很懒,什么都没留下…
展开
-
OpenGL坐标变换 平移,缩放与旋转
OpenGL坐标变换 平移,缩放与旋转OpenGL有内建的坐标系,事实上OpenGl有两套坐标系,一个坐标系被称为眼睛坐标(eye coordinate system) 简称ECS ,上章讲的就是这个坐标系。 OpenGL还有一套坐标,被称为(object coordinate system) 简称OCS ,而这个才是更为重要的,其实我们用来绘图的正是OCS。两个坐标系中ECS转载 2017-04-13 15:35:54 · 5950 阅读 · 0 评论 -
OpenGL学习: 反走样初步(Anti-aliasing basic)
绘制的物体边缘部分出现锯齿的现象称之为走样(aliasing)。反走样(Anti-aliasing)是减轻这种现象的方法。反走样本身也是一个比较复杂的主题,深入了解需要有信号处理中的背景知识,例如信号采样、信号重构、滤波等知识,本节作为一个初步探讨,我们不深入反走样算法的细节。主要以OpenGL中实现的MSAA(Multi-Sampled Anti-Aliasing)为重点,介绍在OpenGL中反走样的处理转载 2017-10-27 14:51:54 · 989 阅读 · 0 评论 -
OpenGL学习:立方体纹理和天空包围盒(Cubemaps And Skybox)
写在前面 之前学习了2D纹理映射,实际上还有其他类型的纹理有待我们进一步学习,本节将要学习的立方体纹理(cubemaps),是一种将多个纹理图片复合到一个立方体表面的技术。在游戏中应用得较多的天空包围盒可以使用cubemap实现。本节示例程序均可以在我的github下载。本节内容整理自: 1.Tutorial 25:SkyBox 2.www.learnopengl.co转载 2017-10-20 14:15:15 · 1867 阅读 · 0 评论 -
OpenGL学习: 环境纹理映射(environment mapping)
上一节初步学习了使用cubeMap创建天空包围盒,本节继续深入Cubemap这个主题,学习环境纹理贴图。本节示例程序均可以从我的github下载。本节内容整理自: 1.www.learnopengl.com cubemaps环境纹理贴图同上一节的Cubemap创建天空包围盒有些类似,创建环境纹理贴图也是对当前待渲染物体,从包围的环境纹理上采样作为这个物体的纹转载 2017-10-23 16:34:24 · 1451 阅读 · 0 评论 -
OpenGL学习: uniform blocks(UBO)在着色器中的使用
目前,我们在着色器中要传递多个uniform变量时,总是使用多个uniform,然后在主程序中设置这些变量的值;同时如果要在多个shader之间共享变量,例如投影矩阵projection和视变换矩阵view的话,仍然需要为不同shader分别设置这些uniform变量。本节将为大家介绍interface block,以及基于此的uniform buffer object(UBO),这些技术将简化着转载 2017-10-25 17:03:56 · 4216 阅读 · 0 评论 -
OpenGL学习:坐标变换(3)-坐标变换总结
前面几节分别介绍了模型变换,视变换,本节从全局把握一遍OpenGL坐标转换的过程,从整体上认识坐标变换过程。坐标变换的全局图OpenGL中的坐标处理过程包括模型变换、视变换、投影变换、视口变换等过程,如下图所示: 在上面的图中,注意,OpenGL只定义了裁剪坐标系、规范化设备坐标系和屏幕坐标系,而局部坐标系(模型坐标系)、世界坐标系和照相机坐标系都是为了方便用户设计而自转载 2017-09-20 17:01:49 · 2635 阅读 · 0 评论 -
OpenGL学习:欧拉角实现第一人称相机(FPS camera with Euler angle)
上一节视变换(view transformation) ,介绍了相机的设置参数,并建立了圆形坐标系和球形坐标系下的相机位置随着时间改变的绘制立方体程序。程序中用户无法通过键盘和鼠标来和场景中物体交互,本节实现一个第一人称相机来更好地与场景中物体交互。本节代码可地址:https://github.com/wangdingqiao/noteForOpenGL/tree/master/FPS-Euler转载 2017-09-05 17:02:19 · 2727 阅读 · 0 评论 -
OpenGL学习:坐标变换(2)-视变换(view transformation)
OpenGL中的坐标处理过程包括模型变换、视变换、投影变换、视口变换等内容,这个主题的内容有些多,因此分节学习,主题将分为5节内容来学习。上一节模型变换,本节学习模型变换的下一阶段——视变换。到目前位置,主要在2D下编写程序,学习了视变换后,我们可以看到3D应用的效果了。本节示例程序均可在https://github.com/wangdingqiao/noteForOpenGL/tree/mast转载 2017-08-29 11:25:24 · 990 阅读 · 0 评论 -
OpenGL学习:坐标变换(1)-模型变换(model transformation)
本节开始学习OpenGL中的坐标处理。OpenGL中的坐标处理过程包括模型变换、视变换、投影变换、视口变换等内容,这个主题的内容有些多,因此分节学习,本节主要学习模型变换。本节示例代码均可在https://github.com/wangdingqiao/noteForOpenGL/tree/master/modelTransformation下载。坐标处理的全局过程OpenGL中的转载 2017-08-28 16:51:56 · 1060 阅读 · 0 评论 -
glViewport函数和glOrtho函数的理解
在OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho。glOrtho是创建一个正交平行的视景体。 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况。比如,常用的工程中的制图等。需要比较精确的显示。 而作为它的对立情况, glFrustum则产生一个透视投影。这是一种模拟真是生活中,人们视野观测物体的真实情况。例如:观察两条平行的火车到,在过了很远之后转载 2017-08-17 14:53:13 · 469 阅读 · 0 评论 -
OpenGL学习脚印:缓冲对象相关函数的使用(buffer object function)
OpenGL中还包含除了我们前面介绍的VAO,VBO,EBO等其他类型的缓冲对象。本文将通过简洁、可靠的例子说明一些重要方法的使用,以辅助学习这些方法。本文的目的不是写成详细而厚重的手册,对于文中未详细说明的部分,请参考官方文档。 学习这些内容的过程需要随着实践慢慢积累,因此本文也将随着实践进行,不断更新。本节示例代码均可以在我的github下载。buffer object的概念转载 2017-10-24 14:03:01 · 360 阅读 · 0 评论 -
OpenGL学习:使用EBO索引绘图
EBO即Element Buffer Objects,用来存储绘制物体的索引。所谓索引就是对顶点属性数组中元素的一个位置标记。使用索引绘图时,先通过顶点属性数组指定数据,然后利用指向这些数据的索引来指示OpenGL完成绘图。使用索引绘图的原理如下图所示(来自VBO Indexing): 在左边图中,没有使用索引绘制矩形转载 2017-08-21 16:32:24 · 829 阅读 · 0 评论 -
OpenGL学习:2D texture
使用纹理增加物体表面细节要使渲染的物体更加逼真,一方面我们可以使用更多的三角形来建模,通过复杂的模型来逼近物体,但是这种方法会增加绘制流水线的负荷,而且很多情况下不是很方便的。使用纹理,将物体表面的细节映射到建模好的物体表面,这样不仅能使渲染的模型表面细节更丰富,而且比较方便高效。纹理映射就是这样一种方法,在程序中通过为物体指定纹理坐标,通过纹理坐标获取纹理对象中的纹理,最终显示在屏幕区域转载 2017-08-24 15:27:46 · 3570 阅读 · 0 评论 -
OpenGL学习: 光照系列3-光源类型和使用多个光源
写在前面 上一节光照中使用材质和lighting maps介绍了使用材质属性和lighting maps使物体的光照效果能反映物体的材料特性,看起来更逼真。在前面的章节中使用的实际上都是一个点光源,本节将学习其他几种光源类型,以及在场景中使用多个光源通过本节可以了解到方向光源点光源聚光灯光源使用多个光源光源类型在前面章节中,我们通过位置和成分分量转载 2017-09-26 13:39:33 · 1692 阅读 · 0 评论 -
OpenGL学习: 光照系列1-光照基础(phong模型)
从本节开始,我们可以开始学习OpenGL中包括光照、模型加载等主题。光照是一个复杂的主题,本节学习简单的Phong reflection model.本节示例程序https://github.com/wangdingqiao/noteForOpenGL/tree/master/lighting。本节内容整理自: 1. learnopengl.com Basic Lighting转载 2017-09-25 11:05:24 · 6323 阅读 · 0 评论 -
OpenGL学习:模型加载-obj模型和AssImp模型
前面介绍了光照基础内容,以及材质和lighting maps,和光源类型,我们对使用光照增强场景真实感有了一定了解。但是到目前为止,我们通过在程序中指定的立方体数据,绘制立方体,看起来还是很乏味。本节开始介绍模型加载,通过加载丰富的模型,能够丰富我们的场景,变得好玩。本节的示例代码均可以在我的github下载。加载模型可以使用比较好的库,例如obj模型加载的库,Assimp加载库。本节转载 2017-09-26 16:16:42 · 10528 阅读 · 1 评论 -
OpenGL学习: 光照系列2-材质和lighting maps使用
上一节光照基础学习实现了Phong reflection model,但是还存在不足,本节使用材质属性,以及使用diffuse map和specular map改善上一节的实现。本节内容整理自: 1.www.learnopengl.com Materials 2.www.learnopengl.com Lighting maps通过本节可以了解到转载 2017-09-25 14:22:40 · 456 阅读 · 0 评论 -
OpenGL学习:Per-fragment operation(2)-深度测试(depth test)
通过本节可以了解到为什么需要深度缓冲区?OpenGL中怎么使用深度缓冲区 ?可视化深度值深度值的精度问题-ZFighting问题背景在绘制3D场景的时候,我们需要决定哪些部分对观察者是可见的,或者说哪些部分对观察者不可见,对于不可见的部分,我们应该及早的丢弃,例如在一个不透明的墙壁后的物体就不应该渲染。这种问题称之为隐藏面消除(Hidden surfac转载 2017-09-27 15:49:43 · 617 阅读 · 0 评论 -
OpenGL学习:Per-fragment operation(1)-模板测试(stencil test)
片元后处理(Per-fragment operation)per-fragment系列操作包括模板测试,深度测试,混合测试等一系列对每个片元进行的处理,这一系列处理过程如下: *Pixel ownership test:该测试决定像素在 framebuffer 中的位置是不是为当前 OpenGL ES 所有。也就是说测试某个像素是否对用户可见或者被重叠窗口转载 2017-09-27 11:36:34 · 1102 阅读 · 0 评论 -
OpenGL学习:Per-fragment operation(3)-混合(blending)
混色的概念所谓混色,就是将当前要绘制的物体的颜色和颜色缓冲区中已经绘制了的物体的颜色进行混合,最终决定了当前物体的转载 2017-09-29 08:57:43 · 578 阅读 · 0 评论 -
OpenGL学习: 帧缓冲对象(Frame Buffer Object)
写在前面 一直以来,我们在使用OpenGL渲染时,最终的目的地是默认的帧缓冲区,实际上OpenGL也允许我们创建自定义的帧缓冲区。使用自定义的帧缓冲区,可以实现镜面,离屏渲染,以及很酷的后处理效果。本节将学习帧缓存的使用.。本节内容整理自 1.OpenGL Frame Buffer Object (FBO) 2.www.learnopengl.com Framebu转载 2017-10-19 10:59:59 · 1142 阅读 · 0 评论 -
OpenGL学习:VAO和VBO以及几种顶点绘图方式比较
一.为什么要有opengl缓冲区对象在给shader传递顶点数据的时候,如果每次都要向GPU发送一大块数据,而这数据其实并没有修改过,那么这传输就是冗余的。所以这里添加了缓冲区对象,将顶点数组存储在服务器端的缓冲区对象中。二.如何创建和使用缓冲区对象 1.创建缓冲区对象 glGenBuffers():OpenGL分配n个当前未使用的名称(非 0),表示缓冲区对象。转载 2016-10-28 11:50:03 · 6379 阅读 · 0 评论