OpenGL学习总结
cesuolidec4
这个作者很懒,什么都没留下…
展开
-
一步步写水面渲染(三)
第九步:法线贴图为了使海面更加有真实感,我们还要为其添加法线贴图,使其更具质感。为了保证法线方向的正确性,我们需要引入切线空间,并对于每一个三角面片计算其切线空间中的tangent和bitangent 代码如下:void tangentandbitangent(GLint x){ int x1, x2, x3; if (x % 2 == 0)//我绘制图像的时候使用的是GL_TR原创 2017-03-05 13:28:33 · 2060 阅读 · 0 评论 -
没有使用transformfeedback的粒子系统
注意:这是一个十分基础的粒子系统,没有billboard没有几何着色器没有光照没有噪声处理,算是粒子系统的一个小基础上周通过OpenGL编程指南用TransFormFeedback技术按照书上那不完全的代码补全了粒子碰撞效果,然后我本意是想做一个火球效果。。。。。结果我觉得我还是先一步步来做一个基础的粒子系统。粒子系统的主要成分就是一个粒子发射器类,我们写好该类后,可以通过调整参数实现各种不同的效果原创 2017-03-19 16:36:06 · 445 阅读 · 0 评论 -
关于研究了两天的TransformFeedback的一些东西
一、所谓的target到底是指什么?在使用一些绑定函数的时候,例如:glBindBuffer、glBindBufferBase,这些函数的第一个参数是一般称之为target,其往往是:GL_ARRAY_BUFFER、GL_TRANSFORM_FEEDBACK_BUFFER、GL_TEXTURE_BUFFER,这些东西,那么所谓的target到底是什么呢? 如果我们查询glew.h里面的内容的话,会原创 2017-03-12 19:42:38 · 1975 阅读 · 3 评论 -
漫反射辐照——并不是很完全的翻译
注:本文原文是learnopengl网站Diffuse irradiance一文,一直没人翻译,这两天我抽出时间阅读了这部分内容,无奈本人英文渣,完整的翻译实在拿不出,只能读懂大体含义,于是想先记录下来目前能读懂的内容以及一些心得。 原文地址:https://learnopengl.com/#!PBR/IBL/Diffuse-irradiance一、一些简单介绍这一节对应于原文的第一节,该节的大体意翻译 2017-04-08 21:22:46 · 1303 阅读 · 2 评论 -
将粒子发射器与Transformfeedback相结合
先前写了一个没有用到transformfeedback的粒子发射器,这次进行补全。使用transformfeedback的好处:可以实时的对粒子进行控制,比如检测粒子与物体的碰撞。更新后的粒子发射器类:#ifndef PARTICLE_GENERATOR_H#define PARTICLE_GENERATOR_H#include <vector>#include <GL/glew.h>#in原创 2017-03-26 19:02:43 · 516 阅读 · 3 评论 -
billboard公告板技术与perlin噪声的实现
一、billboard公告板技术1.简介在游戏中经常会遇到使用一张2D贴图来代替3D物体的情况,比如我们可以绘制一个2D的太阳贴图来代替3D的太阳模型,再比如使用2D的灌木、花草贴图来代替其复杂的3D模型,那么如何使2D贴图看起来和3D模型的效果一样呢?这里我们使用billboard公告板技术,使其平面始终面对摄象机就可以了。2.billboard变换矩阵推导对于,billboard的推导,网上有很原创 2017-04-04 09:21:59 · 1106 阅读 · 0 评论 -
镜面反射辐照模型——不完全的翻译
首先给出PBR的反射方程: 上节教程主要解决的是漫反射部分,使用了辐照贴图(irradiance map),而这次解决的是镜面反射部分。我们通过类比解决漫反射辐照的方式来解决镜面反射辐照问题,但我们要注意的是,在解决漫反射辐照问题的时候,我们仅仅需要的是入射光线Wi,但是在解决镜面反射辐照的时候,因为双向反射分布函数: 我们需要的输入变量由入射光Wi和出射(观察)方向Wo两者同时决定,我翻译 2017-04-18 09:21:06 · 4518 阅读 · 4 评论 -
关于VCT(voxel cone trace——基于体素的锥形光线追踪)Renderer的代码解读
一、目标鉴于国内网络能够搜到关于SVO的文章较少,阅读国外Paper十分费心费力,我准备将最近阅读的VCTRenderer代码中所学到的东西记录下来,作为自己的知识储备。二、VCTRenderer的大体渲染流程三、阴影贴图的计算VCTRenderer中为了达到软阴影的效果,没有使用PCF,而是使用了EVSM——Exponential Variance Shadow Map,该算法结合了Expone...原创 2018-04-10 17:11:23 · 7031 阅读 · 0 评论 -
一步步写水面渲染(二)
第六步:计算纹理坐标因为,先前没有思考完善,所以导致需要修改一些代码从而更加方便的存储顶点位置数据、顶点法线数据、顶点纹理坐标数据struct DATAS{ GLfloat vertex_data[3]; GLfloat normal_data[3]; GLfloat texcoord_data[2];}VBOdata[DATA_LENGTH];//先前,我是直接用两个数原创 2017-03-04 09:14:24 · 824 阅读 · 0 评论 -
一些3D小场景
一、立方体贴图以及模型加载#include<string>#include<algorithm>using namespace std;#define GLEW_STATIC#include<GL\glew.h>#include<GLFW\glfw3.h>#include<GL\Shader.h>#include<GL\Camera.h>#include<GL\Model.h>#inclu原创 2017-02-01 18:51:59 · 586 阅读 · 0 评论 -
一步步写水面渲染(一)
第一步:了解Gerstner波 上述即为Gerstner波的方程,下面我们来说一下这个方程当中各个变量的含义: 1、x:水面静止时,某个顶点的x轴坐标。 2、y:水面静止时,某个顶点的y轴坐标。 3、Qi:用于控制波浪平滑度的变量,当Qi为0的时候,波浪就是一个正弦函数的波形。当Qi为1/(wi*Ai)时,波峰的形状最尖,波底较为平滑,若Qi继续增大则波峰会变成环状,另外要注意的是,因为最后原创 2017-03-01 14:42:50 · 1624 阅读 · 4 评论 -
OpenGL学习总结(二)
OpenGL的矩阵变换与坐标系统一、矩阵变换 在OpenGL的世界当中,我们可以用向量表示一个顶点的位置,那么当我们要改变顶点位置的时候,我们应该怎么去处理呢?答案是使用矩阵乘向量的方式进行改变,常见的改变一共有三种——缩放,平移和旋转,所以对应的矩阵也有三种,不过在介绍这些矩阵之前我们先要了解什么事齐次坐标。1、齐次坐标 简单的来讲,齐次坐标就是普通坐标(x,y,z)后面再多加w一个分量,变成翻译 2017-01-17 18:04:07 · 898 阅读 · 0 评论 -
OpenGL学习总结(三)
构造摄像机/观察矩阵1、摄像机与观察空间 在总结二中曾经提到过,局部空间要经过模型矩阵、观察矩阵、投影矩阵这三个变换矩阵后才能到达裁剪空间,而模型矩阵和投影矩阵都已经介绍过了,只有观察矩阵没有被提及,因为当我们讨论观察空间(View Space)的时候,是在讨论假设某一点存在一个摄像机并以它的视角作为场景原点,从而要改变场景中的所有顶点坐标,所以观察矩阵把所有的世界坐标变换为相对于摄像机位置与方向翻译 2017-01-18 11:51:03 · 6168 阅读 · 1 评论 -
OpenGL学习总结(四)
OpenGL光照模型总结一、 冯氏光照 所谓的冯氏光照分为三大部分:环境光照、漫反射光照以及镜面反射光照。对于同一个物体来讲,当有多个光源发出光线照亮该物体时,都可以将其划分成上述三种情况分别进行计算,最后将三部分组合即为其中一个光源照射物体后得到的最终结果,再将每个光源的照射结果进行叠加即为复杂照射环境下的最终结果。 1、 环境光照: 这是冯氏光照中最简单的光照,只需要用环境光向量乘上物翻译 2017-01-18 12:33:15 · 1005 阅读 · 0 评论 -
OpenGL学习总结(五)
OpenGL模型加载——Assimp1、Assimp模型加载库Assimp全称为Open Asset Import Library,可以导入几十种不同格式的模型文件(同样也可以导出部分模型格式)。只要Assimp加载完了模型文件,我们就可以从Assimp上获取所有我们需要的模型数据。Assimp把不同的模型文件都转换为一个统一的数据结构,所有无论我们导入何种格式的模型文件,都可以用同一个方式去访问我转载 2017-01-18 16:58:34 · 2340 阅读 · 0 评论 -
OpenGL学习总结(六)
高级OpenGL总结(一)一、深度测试OpenGL在进行投影矩阵变换之后,我们知道所有的三维点都会投影到同一个平面上,那么势必会有一个问题出现——在三维空间中的N个点会落到投影平面上的同一位置,那么OpenGL绘制图像的时候就往往会出现需要显示的顶点被不需要现实的顶点遮盖,为了解决这一问题,OpenGL使用了深度测试。OpenGL开启深度测试后,会开辟一个深度缓冲区,当要绘制一个顶点的时候,会将该顶转载 2017-01-29 10:05:47 · 1092 阅读 · 0 评论 -
OpenGL学习总结(七)
高级OpenGL总结(三)五、帧缓冲渲染过程中,图形加速器一般都有一个预先分配好的内存区域来维护显示列表内容(译者:注意,不一定是主内存)。它由显示内存和脱屏内存组成。随着OpenGL的渲染而改变内容的那一部分图形内存区域叫做帧缓存(frame buffer)。在窗口系统里,OpenGL通过帧缓存与窗口通信。窗口系统为OpenGL提供了一组工具来为窗口选择帧缓存特性,而这组工具,通常是系统相关的。一转载 2017-01-29 12:08:10 · 811 阅读 · 0 评论 -
OpenGL学习总结(八)
高级OpenGL总结(三)六、立方体贴图1、创建立方体贴图 a、立方体贴图和其他纹理一样,所以要创建一个立方体贴图,在进行任何纹理操作之前,需要生成一个纹理,激活相应纹理单元然后绑定到合适的纹理目标上。这次要绑定到 GL_TEXTURE_CUBE_MAP纹理类型:GLuint textureID;glGenTextures(1, &textureID);glBindTexture(GL_TEX转载 2017-01-29 17:59:50 · 818 阅读 · 0 评论 -
PBR——基于物理的实时渲染
简介PBR,或者用更通俗一些的称呼是指基于物理的渲染(Physically Based Rendering),它指的是一些在不同程度上都基于与现实世界的物理原理更相符的基本理论所构成的渲染技术的集合。正因为基于物理的渲染目的便是为了使用一种更符合物理学规律的方式来模拟光线,因此这种渲染方式与我们原来的Phong或者Blinn-Phong光照算法相比总体上看起来要更真实一些。除了看起来更好些以外,由于转载 2017-02-18 12:41:00 · 6512 阅读 · 3 评论 -
线性变换余弦算法( Linearly Transformed Cosines)
一、通过使用M矩阵对原始的光照分布进行线性变换1、线性变换矩阵M如上图所示,从左到右,对于一个原始的光照分布Do,可以通过将其与矩阵M相乘得到全新的光照分布D。同时要注意选择不同的Do会得到不同的结果,如下图所示: 由于是线性变换,分布D上的方向向量ω可以通过M的逆矩阵变换回Do上的方向向量ωo。 ...翻译 2018-06-19 12:39:16 · 2630 阅读 · 0 评论