
OpenGL
aganlengzi
无无
展开
-
glPushMatrix 和glPopMatrix图解 ----求别笑
猜想:openGL在绘制场景时的一般用法是:首先在函数的开始处用glLoadIdentity()设置当前的矩阵为单位矩阵。然后在函数中用glPushMatrix()和glPopMatrix()函数进行操作: 根据实践判断:即这两者是分开的,并不是当前矩阵就是栈中的最上端的矩阵。当一开始进行glLoadIdentity时,在栈中并没有保存任何矩阵,只是将当前矩阵设置为原创 2013-07-29 22:34:43 · 1229 阅读 · 0 评论 -
【Modern OpenGL】光照映射 LightingMaps
说明:跟着learnopengl的内容学习,不是纯翻译,只是自己整理记录。 强烈推荐原文,无论是内容还是排版。 原文链接 本文地址:http://blog.csdn.net/aganlengzi/article/details/50542414光照映射 Lighting maps在前面的教程中,我们讨论了使每个对象都使用一种独有的材质以便光照对它们产生不同的作用。这能够达到在相同的光照翻译 2016-01-19 14:40:34 · 1083 阅读 · 0 评论 -
【Modern OpenGL】OpenGL简介
在早些时候,使用OpenGL意味着使用立即渲染模式(immediate mode,也被叫做固定功能流水线),这是一种简单易用的图形绘制模式。在这种模式中,大多数OpenGL的功能都被隐藏在库中,而(使用这些库的)开发者在控制OpenGL如何完成计算上并没有什么自由。他们十分渴求更大的灵活性,并最终使得规格定义变得更加灵活,开发者获得了对他们图形更多的控制权。立即渲染模式虽然十分容易理解和使用,但是它也十分的低效。因此翻译 2015-12-18 20:51:45 · 2870 阅读 · 1 评论 -
【Modern OpenGL】前言
网络上实际有很多的关于OpenGL的教程(像经典的NeHe),但是大多数的只是集中于OpenGL的立即渲染模式(通常被称作老OpenGL)或者并不完整,缺少合适的文档。而作者想要提供现代OpenGL的学习网站,首先是完整的,其次是易于理解的。翻译 2015-12-18 20:45:51 · 954 阅读 · 0 评论 -
【Modern OpenGL】环境搭建
就本人了解到的内容来看,国内使用GLFW的还是比较少的,至少不像GLUT那么多。那么这个教程的作者为什么要选择这个库呢?通过调研我发现了如下的解释: 首先glut太老,已经“死掉了”——最后一个版本好像还是90年代的。其次,现在出现的freeglut虽然完全兼容glut,但是好像bug太多,稳定性不太好。好像还可以使用Qt做类似的功能,但是太庞大,所以选择GLFW可能是一个非常好的选择。GLFW是开源的,另一个比肩翻译 2015-12-18 20:55:58 · 1448 阅读 · 0 评论 -
【Modern OpenGL】创建窗口
说明:跟着learnopengl的内容学习,不是纯翻译,只是自己整理记录。 强烈推荐原文,无论是内容还是排版。 原文链接 本文地址: http://blog.csdn.net/aganlengzi/article/details/50354192## Hello Window在这一次中让我们首先测试上次配置的GLFW和GLEW是否能够正常的运行。上次已经新建了一个空工程,但是其中并没有翻译 2015-12-18 20:58:17 · 1893 阅读 · 0 评论 -
【Modern OpenGL】光照类型 Light casters
目前我们用到的光照都是由一个单一的光源发出的——一个在空间中的点。它的确产生了比较好的光照效果,但是在现实世界中我们有可以按照其特点分类的不同种类光源。把光投射到物体上的光源叫做光源投射器(A light source that casts light upon objects is called a light caster)。在本次教程中,我们将要讨论几种不同的光源投射器,学习它们可以让我们绘制的场景更加丰富多彩翻译 2016-01-25 11:54:28 · 1802 阅读 · 0 评论 -
【Modern OpenGL】多种光源 Multiple lights
在前面的教程中,我们学习了很多关于OpenGL中光照的只是——Phong光照模型,材质,光照映射和不同的光照效果。在本次的教程中,我们将会学到如何将前面学到的各种光源组合到一起——将六种光源放置在同一个场景中。它们分别是一个类似于太阳的平行光源,四个分散在场景中的点光源,还有一个聚光灯(上一个教程中讲的聚光灯)。翻译 2016-01-25 12:03:41 · 1335 阅读 · 0 评论 -
【Modern OpenGL】复习 Review
到了初识阶段(Getting started)的最后。我们不妨来回顾一下在这个阶段都学习到了什么。创建一个窗口(还记的GLFW吗),创建一个shader(我们主要使用到的是vertex shader和fragment shader),学会了通过缓冲区或者uniform变量把数据传输到shader程序中,学会了绘制对象,使用纹理,理解了向量和矩阵的基本操作和它们之间的操作。还学会了将上面的所有组合起来绘制一个三维场景并翻译 2016-01-07 22:35:27 · 734 阅读 · 0 评论 -
【Modern OpenGL】颜色 Colors
我们在前面的教程中简单说过一些过于颜色设置的内容,还记得那个三角形吗?就是那个三个点是三原色,三角形的其它点是三个顶点按照位置插值结果的那个三角形。之后我们就再也没有提过关于颜色设置的事情了(实际上是因为我们有了纹理...)。本次教程中,我们将首先介绍颜色相关的内容,一方面是补充一下,另一方面是为了后面具体讲光照做准备。(还记得吗,我们已经完成了初识阶段,现在我们在光照阶段啦)。翻译 2016-01-07 22:39:53 · 1609 阅读 · 1 评论 -
【Modern OpenGL】光照基础 Basic Lighting
真实世界中的光照是十分复杂的,需要依赖太多的因素,有时候甚至我们有限的处理器资源都无法完成计算。因此,OpenGL中的光照模型是真实世界中的一种简化的模拟和近似。但是其基本的原理是一致的。其中一种是phong光照模型。它包含三个主要的部分:环境光、漫反射光和镜面反射光。从下面的图中我们可以先直观地感受一下这三种光和它们的作用效果:翻译 2016-01-07 22:44:49 · 1551 阅读 · 0 评论 -
【Modern OpenGL】摄像机系统 Camera
在前面的教程中,我们讨论了视口矩阵和我们可以怎样利用视口矩阵让绘制的场景移动(我们在上次教程中成功将那个二维平面稍稍向后移动了一点)。OpenGL本身对摄像机这个概念并不熟悉,但是我们可以通过移动场景中所有的对象(就好像反方向移动一个摄像机一样)来模拟一个。在本次教程中,我们将会讨论我们怎样在OpenGL中建立摄像机。我们将会创建一个帧率摄像机,允许你在三维场景中自由移动。在这个教程中,我们还会讨论一些关于键盘和翻译 2016-01-02 15:23:10 · 5664 阅读 · 2 评论 -
【Modern OpenGL】坐标系统 Coordinate Systems
上面说的转换过程:坐标-->标准换坐标系-->屏幕坐标系的转换过程是一步一步完成的。其中,在最终将对象上的点转换到屏幕坐标系之前,我们需要将它们逐步转换到一些中间的坐标系。之所以要进行这样的转换,是因为在特定的坐标系中,相应的操作或者计算能够得到简化。在整个过程中,主要有5种不同的坐标系需要我们着重理解:* 局部坐标系或者叫做对象坐标系* 世界坐标系 * 视口坐标系 * 裁剪坐标系 * 屏幕坐标系翻译 2016-01-02 15:16:35 · 2452 阅读 · 0 评论 -
VSync Count 垂直同步
出处:http://blog.csdn.net/yesy10/article/details/7794556 YeSy10的专栏 韩小冬Unity3D中新建一个场景空的时候,帧速率(FPS总是很低),大概在60~70之间。我们可以关闭VSync(垂直同步)来提高帧速率。要知道什么是垂直同步,必须要先明白显示器的工作原理。显示器上的所有图像都是一线一线的扫描上去的,无论是隔行扫转载 2014-03-12 09:04:46 · 1174 阅读 · 0 评论 -
VAOs, VBOs, Vertex and Fragment Shaders
关于Vertex Array Objects(VAOs), Vertex Buffer Objects(VBOs), Vertex and Fragment Shaders的概念还是看官方说明理解的好!The OpenGL 3.2 core specification removes the majority of the fixed function pipeline previou原创 2014-07-19 21:42:12 · 1582 阅读 · 0 评论 -
OpenGL数据类型及对应C数据类型
原创 2014-07-21 21:07:43 · 1304 阅读 · 0 评论 -
OpenGL glFlush and glFinish
Similar to computer IO buffer, OpenGL commands are not executed immediately. All commands are stored in buffers first, including network buffers and the graphics accelerator itself, and are awaiting e翻译 2014-07-23 09:20:36 · 1136 阅读 · 0 评论 -
FBO
概要在OpenGL的渲染管线中,几何数据和纹理通过一系列变换和测试,最终被渲染成屏幕上的二维像素。那些用于存储颜色值和测试结果的二维数组的集合被称为帧缓冲区(frame buffer)。这些二维数组按用途划分,可分为颜色缓冲区(color buffer),深度缓冲区(depth buffer),模版缓冲区(stencil buffer)和累加缓冲区(accumulation buffer)转载 2014-07-23 11:07:00 · 1128 阅读 · 0 评论 -
OpenGL Rendering Pipeline
OpenGL Rendering Pipeline Vertex Operation顶点操作(平移、旋转、伸缩、光照)Each vertex and normal coordinates are transformed by GL_MODELVIEW matrix (from object coordinates to eye coordinates). Also, if lighti转载 2014-07-23 10:56:54 · 1382 阅读 · 0 评论 -
opengl 使用 vc6.0中win32控制台工程去掉控制台窗口
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")原创 2014-12-14 19:35:12 · 1033 阅读 · 0 评论 -
【Modern OpenGL】Shader
正如在上一篇教程中提到的,shader是在GPU中运行的小程序。如上一个教程中实现的最简单的vertex shader和fragment shader,一个shader基本上负责图形渲染流水线中的一个阶段的功能。从根本上来说,shader就是将输入转化成输出的操作。而且,它们之间是独立的,除了以输入和输出方式外,他们之间不允许进行通信。翻译 2015-12-28 19:36:44 · 2027 阅读 · 2 评论 -
【Modern OpenGL】转换 Transformations
我们已经学会了怎样创建对象,并且学会利用着色或者纹理使他们呈现出表面细节,但是它们还并不是十分有趣,因为它们只是静止的对象。我们虽然可以通过在每帧中改变它们的顶点坐标值挥着通过重新配置他们的缓存区使它们动起来,但是这样做是十分繁杂并且消耗更多能量。实际上,有更好的办法可以转换一个对象:使用一个矩阵对象。 矩阵是一种十分强大的数学概念,一开始看上去是令人生畏的。但是当你习惯它们的时候,你会觉得它们非常有用。翻译 2015-12-28 20:09:04 · 2448 阅读 · 0 评论 -
【Modern OpenGL】纹理 Textures
为了使我们创建的对象(比如说三角形)更加生动,我们已经学习了为对象的每个像素点设置不同的颜色来使它变得更加有趣。但是,在实际应用中,这种方式需要我们为模型创建太多的颜色,还要完成颜色与点的映射,工作量巨大,这不现实。一种普遍为人们所接受的方式是使用纹理。纹理是二维图像(虽然也有一维或者三维纹理的存在),用于描述对象的细节。比如用一张印有砖头的图像贴到一个三维的房子对象的表面上,这个三维的房子变得逼真。因为图像上能翻译 2015-12-28 19:44:58 · 1656 阅读 · 0 评论 -
【Modern OpenGL】第一个三角形
如果你按照上面的过程成功绘制了三角形或者矩形。你已经挺过了学习现代OpenGL几乎是最艰难的一段:绘制一个简单的三角形。万事开头难嘛。实际上,这其中包含了很多相关的知识,如果没有学过图形学相关的内容,看起来还是比较吃力的。如果有相关的图形学基础,可以发现,本次教程是对理论知识的一次小小实践。充分地理解这个过程是十分必要的,也是后面继续学习的基础。一旦对这些概念和过程有了充分的了解,后面的内容应该就相对简单一些了。翻译 2015-12-18 21:06:28 · 3876 阅读 · 4 评论