
OpenGl
永远的小白虾
无论什么时候,面对这计算机的浩瀚海洋,我都是小白虾
展开
-
OpenGL学习笔记(十九)uniform缓冲
对应的opengl教程:高级GLSLuniform缓冲就是申请一个uniform缓冲对象,将要使用到的重复数据储存起来,便于为多个着色器提供uniform输入变量。老样子上代码:Uniform_buffer_vertShader.vert#version 330 corelayout (location=0) in vec3 aPos;layout(std140)uniform Matrices//std140是表示该结构体使用的std140这种布局方式{mat4 projMat;mat4原创 2020-07-13 10:24:59 · 771 阅读 · 0 评论 -
OpenGL学习笔记(十八)立方体贴图
立方体贴图立方体贴图的应用之一就是做天空盒子。先是顶点着色器#version 330 corelayout (location=0) in vec3 aPos;out vec3 TexCoords;uniform mat4 projMat;uniform mat4 viewMat;void main(){TexCoords=aPos;vec4 pos=projMat*viewMat*vec4(aPos*20.0f,1.0f);gl_Position=pos.xyww;//让天空盒原创 2020-07-12 10:05:32 · 393 阅读 · 0 评论 -
OpenGL学习笔记(十七)帧缓冲
官方教程:帧缓冲我这里只放自己调通了的代码加注释。Frame_buffers_vertShader.vert#version 330 corelayout (location=0) in vec2 aPos;layout(location=1)in vec2 aTexCoords;out vec2 TexCoords;void main(){gl_Position=vec4(aPos.x,aPos.y,0.0f,1.0f);TexCoords=aTexCoords;}Frame_原创 2020-07-10 10:34:49 · 451 阅读 · 0 评论 -
OpenGL学习笔记(十六)混合和面剔除
首先要做的就是通过根据贴图的alpha值渲染一些草在地面上。老样子还是先是顶点着色器#version 330 coreout vec2 TextureCoord;out vec4 vertexColor;layout (location=0) in vec3 aPos;layout (location=1) in vec3 aColor;layout (location=2) in vec2 aTextureCoord;//纹理坐标uniform mat4 modelMat;//模型矩阵u原创 2020-07-08 20:26:36 · 403 阅读 · 0 评论 -
OpenGL学习笔记(十二)多光源的使用
首先光源分为三种,分别是平行光,点光源,聚光源。平行光有些类似于我们自然界中见到的太阳。它的角度属性,会对光照的实际渲染效果有一定的影响,但是他的位置属性则完全无法影响光照的实际渲染效果。点光源则是有点类似于我们的灯泡,就是以一个点向四周发光。与平行光相反,它的角度属性会对光照的实际渲染效果毫无影响,但是他的位置属性则会影响光照的实际渲染效果。聚光源则是类似于我们的手电筒,发射一道投射光...原创 2019-08-29 21:16:14 · 546 阅读 · 0 评论 -
OpenGl学习笔记(十一)光照贴图的使用
光照贴图就是因为所有的材质都有着不同的漫反射光和镜面反射效果,就如钢材和木头就会有区别。所有我们就要根据具体的材质给予不同的光照贴图。那么开始上代码:fragmentSource.txt#version 330 core out vec4 FragColor; in vec3 FragPos;in vec3 Normal;in vec2 Texcoord;//要上贴图就需要贴...原创 2019-08-29 11:15:40 · 351 阅读 · 0 评论 -
OpenGL学习笔记(十)Material类(材质)
在真实世界里,每个物体会对光产生不同的反应。钢看起来比陶瓷花瓶更闪闪发光,一个木头箱子不会像钢箱子一样对光产生很强的反射。每个物体对镜面高光也有不同的反应。有些物体不会散射(Scatter)很多光却会反射(Reflect)很多光,结果看起来就有一个较小的高光点(Highlight),有些物体散射了很多,它们就会产生一个半径更大的高光。如果我们想要在OpenGL中模拟多种类型的物体,我们必须为每个物...原创 2019-08-28 22:34:58 · 2181 阅读 · 0 评论 -
OpenGl学习笔记(九)基本光照的使用
基本光照一般指的是冯氏光照,冯氏光照一般由三个元素组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。如下图所展示的。环境光照(Ambient Lighting):即使在黑暗的情况下,世界上也仍然有一些光亮(月亮、一个来自远处的光),所以物体永远不会是完全黑暗的。我们使用环境光照来模拟这种情况,也就是无论如何永远都给物体一些颜色。环境光照就是说一个问物体...原创 2019-08-28 21:13:34 · 427 阅读 · 5 评论 -
OpenGL学习笔记(八)相机的控制
终于到了OpenGl入门教学的最后一章Camera,说真的,这个Camera是真的挺难的。话不多说,上代码吧!首先是先创建一个Camera类Camera.h#pragma once#include <glm/glm.hpp>#include <glm/gtc/matrix_transform.hpp>class Camera{public: Camer...原创 2019-08-27 07:50:10 · 1337 阅读 · 0 评论 -
OpenGL学习笔记(七)坐标系统的运用
对我们来说,坐标系统大致分为5个不同的坐标系统:局部空间(Local Space,或者称为物体空间(Object Space))世界空间(World Space)观察空间(View Space,或者称为视觉空间(Eye Space))裁剪空间(Clip Space)屏幕空间(Screen Space)上图有点类似于shader的流水线操作:1,局部坐标是对象相对于局部原点的坐标,也...原创 2019-08-25 15:37:22 · 344 阅读 · 0 评论 -
OpenGL学习笔记(六)变换的使用
转换矩阵主要有三种位移,旋转,缩放。其中位移矩阵公式如下:旋转矩阵公式如下:缩放矩阵公式如下:首先需要先导入glm,你可在nuget里面下载,记得下载0.9.9版本以下的。修改一下vertexSource.txt#version 330 core out vec4 vertexColor; out vec2 TextureCoord;...原创 2019-08-25 11:26:07 · 265 阅读 · 0 评论 -
OpenGL学习笔记(五)纹理的使用
纹理,又叫贴图。它的概念的我就不再这里赘述了!你可以直接去OpenGl教程官网去看,对了!分享一个中文教程:https://learnopengl-cn.github.io/01%20Getting%20started/06%20Textures/纹理的使用首先需要导入一个库文件,链接如下:https://github.com/nothings/stb/blob/master/stb_imag...原创 2019-08-24 21:04:14 · 490 阅读 · 0 评论 -
OpenGL学习笔记(四)编写自己的shader类
上面你也应该看到,将shader写成:const char* vertexShaderSource ="#version 330 core \n""out vec4 vertexColor; \n"//out 就是提示要传出参数"layout(location = 3) in vec3 aPos; \n""layout(locat...原创 2019-08-24 11:11:07 · 743 阅读 · 0 评论 -
OpenGL学习笔记(三)基本的shader使用
根据上面的代码基本不变:将verterShaderSource与fragmentShaderSource改为下面的形式。const char* vertexShaderSource ="#version 330 core \n""out vec4 vertexColor; \n"//out 就是提示要传出参数"layout(location = 0...原创 2019-08-23 20:22:59 · 983 阅读 · 0 评论 -
OpenGL学习笔记(二)第一个三角形
话不多说直接上代码!#include<iostream>#define GLEW_STATIC#include <GL/glew.h>#include<GLFW/glfw3.h>using namespace std;void glfwInput(GLFWwindow* window);const char* vertexShaderSource...原创 2019-08-22 21:09:17 · 447 阅读 · 0 评论 -
OpenGL学习笔记(一)第一个窗口
学习一下OpenGL,这是做一下记录。跟着https://learnopengl.com/Getting-started/Hello-Window里面写的第一个窗口,做一下记录。可能唯一的区别就是有注释。#include<iostream>#define GLEW_STATIC#include <GL/glew.h>#include<GLFW/glfw3...原创 2019-08-20 21:43:19 · 298 阅读 · 0 评论 -
OpenGL学习笔记(十四)深度测试
深度测试,就是unity中的层级,就是说定义他的层级,这样才不会出现多余的渲染或不需要的图形。其实就是根据Z轴上的值,来判断哪些片段被抛弃。其实前面我们已经使用过深度测试了,就是下面这句代码 glEnable(GL_DEPTH_TEST);使用这句代码就能开启深度测试。我们来复习一下:这是没有开深度测试的效果图:这是开了深度测试的效果图:然后还有一句,禁止更新深度缓存区的代码...原创 2019-09-01 16:29:17 · 364 阅读 · 0 评论 -
OpenGL学习笔记(十五)模板测试
正如上图可以看到,模板测试就是给设置一个区域,让其显示出来,其他的则不会显示出来。模板测试和深度测试真的很相似。下面是打开模板测试和是否开启掩码的代码。glEnable(GL_STENCIL_TEST);//开启模板测试glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);//清理缓冲区gl...原创 2019-09-01 18:38:25 · 421 阅读 · 0 评论 -
OpenGL学习笔记目录(实时更新)
下面是我的OpenGL学习笔记的目录,会随着时间更新的。OpenGL学习笔记(一)第一个窗口OpenGL学习笔记(二)第一个三角形OpenGL学习笔记(三)基本的shader使用OpenGL学习笔记(四)编写自己的shader类OpenGL学习笔记(五)纹理的使用OpenGL学习笔记(六)变换的使用OpenGL学习笔记(七)坐标系统的运用OpenGL学习笔记(八)相机的控制Ope...原创 2019-08-31 09:45:15 · 438 阅读 · 0 评论 -
OpenGL学习笔记(十三)模型的加载
关于openGl模型的加载需要使用到Assimp库,非常喜闻乐见的是如果你用的编译器是Vs的话,就能通过NuGet直接获取到这个库,装载即可。我这里就不演示了!直接去网上搜索一下就知道怎么安装包了。根据上图,我们可以看到模型中有一个scene场景,然后左边的是则是各种节点,我们要的做就是遍历左边的接单获取到右边的数据。我们可以看到我们目前还缺少一个网格类。Mesh.h#pragma on...原创 2019-08-31 10:45:36 · 670 阅读 · 3 评论