
OpenGL
键盘春秋
键盘论王侯,数据写春秋~~~
展开
-
OpenGL学习笔记2:绘制和混合
绘制OpenGL几何图元在使用OpenGL在计算机屏幕上进行绘图时不需要从一个点的绘制开始。我们关心的不是物理屏幕坐标和像素,而是视景体中的位置坐标,我们将从7个由定义的几何图元来开始绘制实心几何图形: 图元 描述 GL_POINTS 每个顶点在屏幕上都是一个单独的点 GL_LINES 每一对顶点定义了一个线段 GL_LINE_STRIP 一个从第一个顶点依次经过每个后原创 2016-06-18 19:08:06 · 3906 阅读 · 1 评论 -
LearnOpenGL学习笔记4:纹理
一、 纹理1. 基础纹理 纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节。除了图像以外,纹理也可以被用来储存大量的数据,这些数据可以发送到着色器上。 纹理坐标 纹理坐标(Texture Coordinate),用来标明该从纹理图像的哪个部分采样(译注:采集片段颜色)。纹理坐标在x和y轴上,范围为0到1之间(注意我们使用的是2D纹理图像)。纹理坐标起始于(0,原创 2016-08-13 11:54:47 · 1635 阅读 · 1 评论 -
LearnOpenGL学习笔记9:材质
一、 材质通过为每个元素指定一个颜色,我们已经对物体的颜色输出有了精密的控制。现在把一个镜面高光元素添加到这三个颜色里,这是我们需要的所有材质属性:#version 330 corestruct Material{ vec3 ambient; vec3 diffuse; vec3 specular; float shininess;};uniform Mat原创 2016-09-17 22:12:35 · 2143 阅读 · 0 评论 -
(译)LearnOpenGL实际案例Breakout(五):小球
英文原文现在我们有一个砖块的关卡和一个可移动的玩家挡板。和经典Breakout唯一缺失的是小球。目标是让小球碰撞所有的砖块直到每一个可破坏的砖块被破坏,但是这有一个条件是小球不能触碰屏幕的底部边缘。 撇开一般的游戏组件对象,一个小球有一个半径和一个标识出小球是卡在挡板上还是可以自由移动的额外的bool值。当游戏开始,小球最初被卡在玩家挡板上直到玩家按下任意键开始游戏。 因为小球是有一些额外特性的翻译 2016-10-02 07:44:41 · 1129 阅读 · 0 评论 -
(译)LearnOpenGL实际案例Breakout(六):碰撞检测
英文原文当尝试检测碰撞是否在两个对象之间发生的时候,我们通常不使用对象自己的数据除非这个对象很复杂;这反过来让碰撞检测变得复杂。出于这个原因,我们通常练习的时候更多的使用简单的形状(常常有很好的数学上的定义)覆盖在原始对象上方来碰撞检测。然后我们基于这些简单的形状来让我们的代码更简单并且省下很多性能。这样的一些例子是圆形,球星,三角形和方形;这些用起来比有上百个三角形的网格简单。 当他们给我们更加翻译 2016-10-08 21:34:20 · 3374 阅读 · 1 评论 -
(译)LearnOpenGL实际案例Breakout(四):关卡
之前一直更新的实际上是LearnOpenGL的笔记,说起来没什么价值,还不如直接去看原文 LearnOpenGL英文版最后有一个实际小游戏打砖块,中文部分只翻译了部分内容。为了更好的学习,我将剩下的部分翻译出来,英语水平一般,仅供参考。 英文链接 以下是翻译部分:不幸的是Breakout并不仅仅是一个绿色笑脸,还包含了有一大堆好玩的彩色砖块的完整关卡。我们想要这些关卡变得灵活多样这样他们就能够翻译 2016-09-25 19:24:43 · 1321 阅读 · 1 评论 -
(译)LearnOpenGL实际案例Breakout(八):粒子
英文原文一个微粒,从OpenGL的角度看就是一个总是面向摄像机方向且(通常)包含一个大部分区域是透明的纹理的小四边形.一个微粒本身主要就是一个精灵(sprite),前面我们已经早就使用过了,但是当你把成千上万个这些微粒放在一起的时候,就可以创造出令人疯狂的效果. 当处理这些微粒的时候,通常是由一个叫做粒子发射器或粒子生成器的东西完成的,从这个地方,持续不断的产生新的微粒并且旧的微粒随着时间逐渐消亡翻译 2016-10-23 08:53:04 · 1052 阅读 · 1 评论 -
(译)LearnOpenGL实际案例Breakout(十):能量块
英文原文 Breakout已经接近尾声了,但是它仍然可以通过添加一个额外的游戏内容来变得更酷,这样它就不是普通的Breakout的翻版;能量块怎么样? 这个主意就是无论何时砖块被销毁,这个砖块会有一个小概率产生一个能量块。这样一个块将会缓慢落到底部并且如果它碰撞玩家挡板,一个基于能量块类型的有趣的效果将会产生。例如,一个能量块让挡板更大,另一个能量块允许小球穿透物体。我们还有几个负面能量块来对玩翻译 2016-11-06 20:21:26 · 1089 阅读 · 0 评论 -
(译)LearnOpenGL实际案例Breakout(七):碰撞反馈
英文原文1. 碰撞反馈在教程的最后我们有一个运行的碰撞检测方案。然而,小球在碰撞检测中仍然没有任何反馈;它仅仅直接穿透了所有的砖块。我们想要小球在碰撞砖块时防水功能反弹。这个教程讨论了在AABB和圆形碰撞检测之间的碰撞反馈算法。 无论什么时候发生碰撞,我们需要发生两件事:我们需要重置小球这样它就不再进入其他对象,我们想要改变小球的方向和速度这样它看起来被对象弹开了。碰撞重定位将小球对象放置在在碰翻译 2016-10-16 16:06:49 · 2227 阅读 · 0 评论 -
(译)LearnOpenGL实际案例Breakout(九):后期处理
英文原文 如果我们能够在Breakout游戏中加一点后期图形特效会更有趣吗?我们能够创建一些模糊晃动效果,反转场景中所有的颜色,实现一些疯狂的顶点偏移和/或做一些能想到的其他的和帧缓存有关的有趣的效果。 在帧缓存教程中我们演示了如何通过后期效果仅仅使用一个简单的贴图来实现有趣的效果。在Breakout中我们准备做一些类似的事情:我们准备从多个样本渲染缓存对象中创建一个帧缓存对象来作为他的颜色附件翻译 2016-10-30 23:07:08 · 990 阅读 · 0 评论 -
(译)LearnOpenGL实际案例Breakout(十一):音频
英文原文 无论我们多么努力的打造游戏的内容我们很可能不会从游戏中听到任何声音;我们有如此多的内容来显示,但是没有音频游戏仍然感觉有一些单薄。在这个教程中我们将会改善它。 OpenGL不提供给我们任何支持音频的能力(和其他游戏开发相似)。我们必须手动加载音频文件为比特流,处理并且转换他们为音频流并且管理多个音频流方便在我们的游戏中使用。这有一些难懂并且需要一些音频工程的基础知识。 如果从几个音频翻译 2016-11-13 17:06:06 · 1008 阅读 · 0 评论 -
LearnOpenGL学习笔记5:变换
变换向量向量有一个方向(Direction)和大小(Magnitude,也叫做强度或长度)。向量可以在任意维度(Dimension)上。由于向量表示的是方向,起始于何处并不会改变它的值。我们通常设定这个方向的原点为(0,0,0),然后指向对应坐标的点,使其变为位置向量(Position Vector)来表示(你也可以把起点设置为其他的点。向量与标量运算标量(Scalar)只是一个数字(或者说是仅有一原创 2016-08-21 21:01:07 · 1075 阅读 · 0 评论 -
LearnOpenGL学习笔记8:光照基础
一、 颜色当我们把光源的颜色与物体的颜色相乘,所得到的就是这个物体所反射该光源的颜色(也就是我们感知到的颜色)。二、 光照基础光照模型都是基于我们对光的物理特性的理解。其中一个模型被称为冯氏光照模型(Phong Lighting Model)。冯氏光照模型的主要结构由3个元素组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。这些光照元素看起来像下面这样:原创 2016-09-11 20:13:33 · 842 阅读 · 1 评论 -
OpenGL学习笔记1:环境配置和基本流程
虽然游戏引擎能够满足游戏开发的绝大部分需求,但是如果仅仅会使用引擎而不懂得游戏引擎的运作原理和图形处理原理,势必会沦为引擎的奴隶。为了让自己不仅能够知其然,还要能知其所以然,决定从OpenGL开始研究图形学和游戏引擎开发技术。前面还有很长的路,慢慢来。环境配置和往常一样,还没开始研究OpenGL就开始在网上找OpenGL的库,结果找了好久都没找到最新的库,官网上也都是文档(如果谁有最新的库希望能共享原创 2016-06-12 20:27:41 · 1370 阅读 · 0 评论 -
OpenGL学习笔记3:变换,矩阵,更多对象
变换进行图形开发,3D图形数学基础是必不可少,限于其专业性,OpenGL笔记里不做详细赘述。但是对相关术语及其在OpenGL对应的内容还是需要一定的了解。基础向量点乘 两个(三分量)单位向量之间的点乘运算将得到一个标量(只有一个值),它表示两个向量之间的夹角。要进行这种运算,这两个向量必须为单位长度,而返回的结果将在-1.0到1.0之间。这个数字实际上就是这两个向量之间夹角的余弦值。 我们可以使原创 2016-06-25 20:58:50 · 8742 阅读 · 3 评论 -
OpenGL学习笔记5:着色器
初识着色器语言变量和数据类型可用的数据类型只有4种:有符号整数,无符号整数,浮点数,布尔值。 OpenGL着色语言中没有指针和字符串或字符。返回值可以为void。向量类型所有4种基本数据类型都可以存储在二维、三维或者四维向量中: OpenGL着色语言向量数据类型 类型 描述 vec2,vec3,vec4 2分量、3分量和4分量浮点向量 ivec2,ivec3,ivec4 2原创 2016-07-09 20:25:17 · 15625 阅读 · 4 评论 -
LearnOpenGL学习笔记1:创建窗口
学了一段时间的编程指南第8版,发现这工具书一般的书并不适合新手自学,于是上网找到了一套更适合学习的教程:https://learnopengl-cn.github.io/ 从现在开始先把这套教程学完,再回头看指南。一、 库1. GLFW GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文,定义窗口参数以及处理用户输入,原创 2016-07-23 15:22:55 · 2263 阅读 · 1 评论 -
OpenGL学习笔记4:纹理
原始图像数据像素包装图像数据在内存中很少以紧密包装的形式存在。在许多硬件平台上,处于性能上的考虑,一幅图像的每一行都应该从一种特定字节对齐地址开始。绝大多数编译器会自动把变量和缓冲区放置在一个针对该架构对齐优化的地址上。 例如一个包含3个分量的rgb图像,每个分量存储在一个字节中,如果图像有199个像素,那么一行需要597个像素。如果硬件本身的体系结构是4字节排列,那么图像每一行的末尾将由额外的3原创 2016-06-30 22:33:27 · 8512 阅读 · 1 评论 -
OpenGL学习笔记6:高级纹理知识
矩形纹理纹理目标为GL_TEXTURE_RECTANGLE。 首选,矩形纹理不能进行Mip贴图; 然后,矩形纹理不是标准化的(实际上是对像素寻址) 最后,纹理坐标不能重复,并且不支持纹理压缩加载矩形纹理bool LoadTGATextureRect(const char *szFileName, GLenum minFilter, GLenum magFilter, GLenum wrapMo原创 2016-07-16 20:03:43 · 4931 阅读 · 0 评论 -
LearnOpenGL学习笔记2:绘制基础图形
笔记摘自:https://learnopengl-cn.github.io/ 侵删 一、 基础 1. 渲染流程 3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线管理的。管线:Graphics Pipeline,大多译为管线,实际上指的是一堆原始图形数据途经一个输送管道,期间经过各种变化处理最终出现在屏幕的过程。它可以被划分为两个主要部分:第一部分把你的3D坐标转换为2D原创 2016-07-30 20:30:39 · 11489 阅读 · 0 评论 -
LearnOpenGL学习笔记6:坐标
一、 坐标系统将坐标转换为标准化设备坐标,接着再转化为屏幕坐标的过程通常是分步,也就是类似于流水线那样子,实现的,在流水线里面我们在将对象转换到屏幕空间之前会先将其转换到多个坐标系统(Coordinate System)。将对象的坐标转换到几个过渡坐标系(Intermediate Coordinate System)的优点在于,在这些特定的坐标系统中进行一些操作或运算更加方便和容易,这一点很快将会原创 2016-08-28 23:36:34 · 1145 阅读 · 1 评论 -
LearnOpenGL学习笔记3:着色器
一、 着色器1. GLSL一个典型的着色器有下面的结构:#version version_numberin type in_variable_name;in type in_variable_name;out type out_variable_name;uniform type uniform_name;int main(){ // 处理输入并进行一些图形操作 ...原创 2016-08-07 23:14:44 · 2996 阅读 · 4 评论 -
LearnOpenGL学习笔记7:摄像机
一、 摄像机1. 摄像机/观察空间定义一个摄像机,我们需要一个摄像机在世界空间中的位置、观察的方向、一个指向它的右测的向量以及一个指向它上方的向量。 摄像机的位置 获取摄像机位置很简单。摄像机位置简单来说就是世界空间中代表摄像机位置的向量。我们把摄像机位置设置为前面教程中的那个相同的位置:glm::vec3 cameraPos = glm::vec3(0.0f, 0.0f, 3.0f);摄像机原创 2016-09-11 20:02:29 · 1456 阅读 · 0 评论 -
(译)LearnOpenGL实际案例Breakout(十二):渲染文本
英文原文 在这篇教程的最后我们通过添加一个生命值系统来作为最后一个系统,一个胜利条件和来自文本渲染的反馈。这个教程严重依赖于之前介绍的文本渲染教程,因此如果你没准备好,非常建议你从那篇教程开始。 在Breakout中所有文本渲染脚本被封装到TextRenderer类中,它的特性基于FreeType库的渲染特性和真实的渲染代码。你能在这里找到TextRenderer类: TextRenderer翻译 2016-11-20 19:39:20 · 1343 阅读 · 2 评论