![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OpenGL
守望者2
这个作者很懒,什么都没留下…
展开
-
OpenGL学习笔记二十(延迟渲染)
延迟渲染 正向渲染和延迟渲染 正向渲染和延迟渲染原创 2020-04-01 09:52:33 · 2453 阅读 · 0 评论 -
OpenGL学习笔记十九——HDR
HDR 什么是HDRHDR在OpenGL中的应用 什么是HDR在渲染一个物体的过程中,物体最终的颜色被存入帧缓冲中时,颜色和亮度值会被限制在0-1之间,这就会有一个问题:当物体的颜色全部都超过1的时候,会被帧缓冲的颜色限制在1这个值,那么场景中的颜色都会变成一种颜色,导致场景一片混乱。如图所示:好的解决方案是暂时保存超过1部分的颜色值,获得更多的颜色细节,然后将该范围内的值映射到[0,1...原创 2020-03-31 12:31:45 · 514 阅读 · 0 评论 -
OpenGL学习笔记十八——批处理
批处理什么是Draw Call什么是批处理使用批处理使用gl_InstanceID对多个物体做偏移处理实例测试补充什么是Draw Call在渲染物体之前,物体模型顶点数据保存在内存中,CPU通过向GPU发送渲染指令后,数据会复制到显存中,然后进行渲染。在这个过程中,CPU向GPU发送渲染指令的过程,名为Draw Call。OpenGL中的渲染指令是指: glDrawArrays(GL_TRIA...原创 2020-03-30 11:56:00 · 1811 阅读 · 0 评论 -
OpenGL学习笔记十七(立方体贴图,实现天空盒)
OpenGL学习笔记十七(立方体贴图,实现天空盒)什么是立方体贴图立方体贴图原理立方体贴图应用——天空盒创建立方体贴图什么是立方体贴图简单来说,立方体贴图就是一个包含了6个2D纹理的纹理,每个2D纹理都组成了立方体的一个面,我们知道如果将一张贴图赋给一个立方体模型,那么这个立方体的六个面都显示该贴图,但是对于立方体贴图,我们就能对立方体各个面都使用不同的贴图附在立方体上,如图:每个面展示的图...原创 2020-03-29 11:06:57 · 2455 阅读 · 1 评论 -
OpenGL学习笔记十六(帧缓存)
上万字OpenGL学习笔记帧缓存的概念帧缓存的作用自定义帧缓存帧缓存的概念到目前位置,已经介绍了多种缓存(数据),用于写入颜色值的颜色缓冲用于写入深度信息的深度缓冲允许我们根据一些条件丢弃特定片段的模板缓冲这些缓冲结合起来叫做帧缓冲(Framebuffer)帧缓存的作用用于保存数据,实现深度测试,模板测试等用于实现自定义后效,可实现非常炫酷的后效自定义帧缓存创建对象...原创 2020-03-28 18:30:53 · 2317 阅读 · 0 评论 -
五分钟搞懂游戏开发中的抗锯齿算法
常见抗锯齿算法总结锯齿由来抗锯齿算法SSAAMSAACSAA锯齿由来场景的定义在三维空间中是连续的,而最终显示的像素则是一个离散的二维数组,这是计算机屏幕产生锯齿的原因。在计算机处理图形的过程中(渲染管线了解一下),有一个非常重要的阶段,就是光栅化,光栅化主要的作用是将顶点数据的不连续性通过插值计算,将两个顶点之间不存在的点进行弥补,然后实现到屏幕像素点上的一一映射。如图,现在要在屏幕上绘制一...原创 2020-03-24 18:20:49 · 9219 阅读 · 1 评论 -
OpenGL学习笔记十五(面剔除)
OpenGL学习笔记十五(面剔除)什么是面剔除环绕顺序面剔除函数示例程序什么是面剔除在绘制一个正方体时,我们能看到最多的面数是3,而看不到的面虽然被绘制计算,但却无法通过深度测试,这样就做了一倍的无意义计算,倘若能省区这些计算将大幅度提高渲染性能。环绕顺序对于一个面,要么朝向摄像机(视口),要么背向摄像机,对于背向摄像机的面就是我们想要剔除的面,如何找出背向相机的面将是解决问题的核心。...原创 2020-02-26 11:43:12 · 474 阅读 · 0 评论 -
OpenGL学习笔记十四(处理半透明物体)
OpenGL学习笔记十四(处理半透明物体) 透明物体 混合 渲染顺序 透明物体之前一直未介绍透明物体,但是在现实生活中,透明物体或者半透明物体随处可见,但是透明物体往往有很多与众不同之处,比如,在OpenGL中,透明物体不能写入深度,原因可以想一下,对于透明物体和不透明物体组合有两种形式:如果一个透明物体在一个不透明物体之前,那么理论上,如果写入深度值,那么后面的不透明物体将不可见,但实...原创 2020-02-20 14:29:58 · 6317 阅读 · 1 评论 -
OpenGL学习笔记十三(模板测试)
OpenGL学习笔记十三(模板测试)需要模板测试的原因模板测试模板缓存模板测试函数glStencilFuncglStencilOp需要模板测试的原因在上节中,讲了深度测试,即判断一个像素点是否能通过深度检测,显示到屏幕上,但是在实际开发中,我们可能遇到很多需求,希望实现不是通过深度关系进行遮挡的,比如游戏里常见的透视效果,可以看到一个物体之后的东西,这种情况下,我们就不能仅仅使用深度测试...原创 2020-02-19 11:13:08 · 1681 阅读 · 0 评论 -
OpenGL学习笔记十二(深度测试)
OpenGL学习笔记十二(深度测试)需要深度测试的原因深度测试函数比较函数清除深度缓存深度测试精确度及深度冲突需要深度测试的原因当我们渲染多个物体时,这多个物体之间存在互相遮挡的关系,被遮挡的物体的部分将不可见,也就是它离相机更远,为了告诉计算机被遮挡的物体不需要渲染,我们就需要对物体上的点做深度测试,检测它是否需要渲染。为了实现上述的检测,就需要深度缓冲,简单而言就是存储物体上点深度值的...原创 2020-02-18 17:45:00 · 980 阅读 · 0 评论 -
OpenGL学习笔记十一(Assimp的编译详细步骤)踩坑大全篇
OpenGL学习笔记十一(Assimp的编译详细步骤,踩坑大全篇) 编译步骤 下载准备问题 解决问题导入项目 编译步骤 下载准备下载内容都在之前的博客中说过了,这里直接说怎么编译:问题我下载了好几个版本的cmake,assimp,全都不行,一直报这个错误:报错内容为,在路径是:错误的内容:找了一天原因,还是没有找到,有人说是选择VS版本不对,缺少DX9啥的,但是根本不是这个...原创 2020-02-18 11:29:34 · 1991 阅读 · 1 评论 -
OpenGL学习笔记十——从建模软件导入复杂模型:Assimp的使用
OpenGL学习笔记十——从建模软件导入复杂模型,使用Assimp 常用建模软件 模型常见格式模型加载库Assimp Assimp编译步骤基础环境 下载链接使用: 常用建模软件Blender3DS MaxMayaHoudini(可程序化生成模型,非常强大,推荐学习使用) 模型常见格式.obj(通用格式).max(max建模软件).fbx(游戏引擎常用格式).maya(M...原创 2020-02-17 08:53:55 · 1135 阅读 · 0 评论 -
OpenGL学习笔记九——光照3(实现三种光照类型:平行光,点光源,聚光灯)
OpenGL学习笔记九——光照3实现三种光照类型:平行光,点光源,聚光灯 前言平行光代码表示点光衰减代码实现聚光实现代码带有渐变边缘 前言 在上一次介绍光照时曾大概介绍了三种光照图片选自LearnOpenGL平行光最简单来说,平行光可以理解为太阳光,光有固定的颜色和统一的方向,且衰减值可以忽略,即光照强度和距离没有关系。如图:代码表示#version 330 coreout v...原创 2020-02-16 11:13:54 · 2694 阅读 · 1 评论 -
OpenGL学习笔记八——使用结构体创建材质
OpenGL学习笔记八——使用结构体创建材质 前言光照基础链接:OpenGL结构体的创建示例程序: 前言光照基础链接:光照基础知识冯氏光照模型OpenGL结构体的创建OpenGL可支持自定义结构体,其形式与C/C++类似,示例代码如下:#version 330 core//创建结构体struct Material { vec3 ambient; vec3 dif...原创 2020-02-15 16:46:39 · 854 阅读 · 0 评论 -
OpenGL学习笔记七——光照2(实现冯氏光照模型)
OpenGL学习笔记七——光照2,实现冯氏光照模型冯氏光照模型构成环境光漫反射‘原理:实例程序镜面反射原理:示例程序冯氏光照模型构成环境光照(Ambient Lighting)****:即使在黑暗的情况下,世界上通常也仍然有一些光亮(月亮、远处的光),所以物体几乎永远不会是完全黑暗的。为了模拟这个,我们会使用一个环境光照常量,它永远会给物体一些颜色。漫反射光照(Diffuse Ligh...原创 2020-02-14 17:08:39 · 1036 阅读 · 0 评论 -
OpenGL学习笔记六——光照
OpenGL学习笔记六——光照 原理介绍 光的类型 逐顶点光照 逐像素光照 OpenGL中实现光照实战代码——实现逐片元光照顶点着色器片元着色器 原理介绍 我们在现实生活中看到某一物体的颜色并不是这个物体真正拥有的颜色,而是它所反射的(Reflected)颜色。换句话说,那些不能被物体所吸收(Absorb)的颜色(被拒绝的颜色)就是我们能够感知到的物体的颜色。将光运用到图形学中,实现...原创 2020-02-13 17:01:46 · 888 阅读 · 0 评论 -
OpenGL学习笔记五——摄像机与坐标变换
OpenGL学习笔记五——摄像机 五大坐标系统 各个坐标系统之间的转换关系: 投影矩阵的两种形式——摄像机的2D和3D类型 实战运行结果图片链接 五大坐标系统 局部空间(Local Space,或者称为物体空间(Object Space))局部坐标是对象中心或者轴心为原点的坐标,位置相对于对象中心或者轴心。 世界空间(World Space)世界空间坐标,在世界空间中,有一...原创 2020-02-13 13:16:50 · 3692 阅读 · 0 评论 -
OpenGL学习笔记四——使用stb_image.h加载纹理,理解Mipmap,实现纹理映射
使用stb_image.h加载纹理,实现纹理映射原理说明概念介绍UV坐标图片信息纹理映射纹理坐标映射算法OpenGL关于纹理的API创建设置图片类型为GL_TEXTURE_2D设置重复方式及纹理映射方式多级渐远纹理赋值,此过程需要使用stb_image.h库stb_image.h库简介添加至项目使用说明应用实例原理说明概念介绍UV坐标纹理坐标在x和y轴上,范围为0到1之间(注意我们使用的是...原创 2020-02-12 14:43:10 · 6362 阅读 · 1 评论 -
OpenGL学习笔记三——引入GLM库,实现transform
OpenGL开发环境配置之GLMGLM库简介开发环境GLM库配置的两种方法方法一方法二GLM库简介GLM是OpenGL Mathematics的缩写,它是一个只有头文件的库,也就是说我们只需包含对应的头文件就行了,不用链接和编译。GLM可以在它们的网站上下载。把头文件的根目录复制到你的includes文件夹,然后你就可以使用这个库了。==注意:==无法翻墙的可直接在github上的下载:地址...原创 2020-02-11 11:14:45 · 10872 阅读 · 2 评论 -
OpenGL学习笔记二——理解shader结构与参数
OpenGL的shader结构与传递参数shader基础结构关键字与结构分析变量赋值方式main函数实战分析数据顶点着色器片元着色器传值函数shader基础结构#version version_numberin type in_variable_name;in type in_variable_name;out type out_variable_name;uniform type...原创 2020-02-10 12:14:09 · 3542 阅读 · 1 评论 -
OpenGL学习笔记一——绘制两个三角形,理解VAO,VBO和EBO
#include <glad/glad.h>#include <GLFW/glfw3.h>#include <iostream>using namespace std;void framebuffer_size_callback(GLFWwindow* window, int width, int height);const char *verte...原创 2020-02-06 16:26:25 · 2797 阅读 · 1 评论 -
OpenGL 开发环境配置(Windows) - Visual Studio 2017 + GLFW + GLAD 详细教程
OpenGL环境配置一般选择Win32,因此本教程将搭载Win32平台的开发环境。OpenGL开发环境配置目录搭建环境配置步骤Step1. 下载编译好的GLFW库Step2. 下载GLAD库Step3. 配置Visual Studio工程其他问题目录搭建环境操作系统:Windows 10编译器:Visual Studio 2017GLAD库GLFW库配置步骤S...原创 2020-02-03 14:01:52 · 4522 阅读 · 5 评论