![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
OpenGL
文章平均质量分 73
OpenGL 学习笔记
东北砍王
做游戏,是种梦想!
展开
-
软渲染系列——绘制三角形
6.从 Ex ----> Fx 依次遍历,y是一样的,指定颜色缓冲区的对应像素位置的颜色。a)等价于平底梯形,这样不用分别处理底边在上或者在下了(如果是下底,那 lt=rt)以三角形为基础图元的选择是为了在图形学中实现和处理的方面提供简单性、灵活性和高性能。三角形,无论是用OpenGL或者Vulkan,学会的第一件事一般都是绘制三角形。b)每个点就是一个坐标位置,用来找和线的交点(Vector2 就是存了x和y)4.找到E点的x值,这里x是浮点数,可以向下取整变成整数,用来当做像素的坐标。原创 2023-12-05 18:23:49 · 135 阅读 · 0 评论 -
软渲染系列——颜色缓冲区
渲染管线的最后阶段(片段着色器)会为每个屏幕上的像素计算颜色,并将这些颜色值写入颜色缓冲区。b)构造函数根据图像的宽高复制(注意:不一定就是你窗口像素,最后会走视口变化自由缩放)我们用OpenGL的Texture当作Buffer,那Texture 数据存储的是。c)把cpu渲染器的颜色缓冲区数据传到OpenGL创建的Texture里面,用来绘制。是图形渲染中的一个概念,也就是最终渲染到屏幕上的图像的颜色信息。颜色缓冲区可以包含红、绿、蓝和透明度(RGBA)等颜色分量。a)包含颜色缓冲数组。原创 2023-12-05 00:09:48 · 255 阅读 · 0 评论 -
软渲染系列——创建工程
下面这段代码的意思就是创建一个由两个三角形组成的Quad,和一个Texture,通过ShaderProgram进行贴图采样。软渲染的速度远远比不上利用了硬件加速的渲染器,但是软渲染有很好的兼容性,可以用软渲染器实现一些显卡不支持的功能。指在CPU上用软件模拟本该由GPU承担的工作,即用软件方式模拟在GPU上运行的渲染流水线。OpenGL不是本文的重点,可以看之前的OpenGL系列,此处建议直接复制即可。lib:是库目录(!注意自己对应的库的编译环境!(里面的cpp是我工程内加的,最后显示成功就行)原创 2023-12-04 23:42:47 · 132 阅读 · 0 评论 -
OpenGL实现三种光源
衰减:随着光线传播距离的增长逐渐削减光的强度通常叫做衰减(Attenuation)用一个世界空间位置、一个方向和一个切光角(Cutoff Angle)来表示的。衰减公式:1 / (常数项 + 一次项*距离 + 二次项 + 距离的平方)位于环境中某个位置的光源,它只朝一个特定方向而不是所有方向照射光线。当一个光源处于很远的地方时,来自光源的每条光线就会近似于互相平行。因为所有的光线都是平行的,所以物体与光源的相对位置是不重要的。分散在场景中的点,会朝着所有方向发光,会随着距离逐渐衰减。原创 2023-11-09 12:50:40 · 498 阅读 · 0 评论 -
OpenGL光照
即使在黑暗的情况下,世界上通常也仍然有一些光亮(月亮、远处的光),所以物体几乎永远不会是完全黑暗的。对于受光物体的着色器要复杂一些,需要计算根据光照模型计算输出颜色。1.计算光照信息需要模型空间坐标+模型法线方向,先填充顶点信息。a)顶点着色器:负责对模型空间的坐标和法线进行世界空间的转换。我们会使用一个环境光照常量,它永远会给物体一些颜色。镜面光照的颜色相比于物体的颜色会更倾向于光的颜色。b)着色器中使用光照模型计算每个片段的光照颜色。光源和受光照物体适用不同的VAO。原创 2023-11-08 22:29:32 · 101 阅读 · 0 评论 -
OpenGL相机控制
产生一种我们在移动的感觉,而不是场景在移动(其实就是场景在移动)但是现在相机的位置和方向数据都是写死的,游戏里一般都是玩家控制的。可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机。b)获取相机z方向(注意:是指向屏幕外面的反方向)b)修改相机的cameraPos,根据输入方向变化。当相机位置变化的时候,重新求出观察矩阵就是关键。之前已经实现了3D显示,也就是相机的功能。相机移动实现,就是根据移动方向改变Pos。负责移动旋转,查看游戏世界的内容。使用鼠标位置,负责控制相机旋转。原创 2023-11-08 15:37:31 · 189 阅读 · 0 评论 -
OpenGL空间坐标变换
OpenGL存储它的所有深度信息于一个Z缓冲(Z-buffer)中,也被称为深度缓冲(Depth Buffer)如果一个向量的齐次坐标是0,这个坐标就是方向向量(Direction Vector)1.局部空间(Local Space,或者称为物体空间(Object Space))包含了位移、缩放与旋转操作,它们会被应用到所有物体的顶点上,以变换到全局的世界空间。3.观察空间(View Space,或者称为视觉空间(Eye Space))当片段想要输出它的颜色时,OpenGL会将它的深度值和z缓冲进行比较。原创 2023-11-08 01:11:49 · 163 阅读 · 0 评论 -
OpenGL纹理
2)GL_LINEAR(也叫线性过滤,(Bi)linear Filtering)它会基于纹理坐标附近的纹理像素,计算出一个插值,近似出这些纹理像素之间的颜色。3)GL_CLAMP_TO_EDGE 纹理坐标会被约束在0到1之间,超出的部分会重复纹理坐标的边缘,产生一种边缘被拉伸的效果。需要对XY分别设置,也就是:GL_TEXTURE_WRAP_S(X)和 GL_TEXTURE_WRAP_T(Y)4)GL_CLAMP_TO_BORDER 超出的坐标为用户指定的边缘颜色。b)绑定当前纹理给着色器的采样器。原创 2023-11-07 19:46:17 · 31 阅读 · 0 评论 -
OpenGL自定义着色器
一般项目的方式都是自定义shader文件,然后读取文本内容。本文的意图在于如何使用OpenGL自定义Shader。之前 Shader是直接写在代码里面了,用起来很不方便。命名:顶点着色器 xx.vs 片段着色器 xx.fs。d)设置自定义参数(uniform)a)通过ifsteam读取文件内容。b)编译shader链接着色器程序。test.vs,定点着色器代码。test.fs,片段着色器代码。b)读取文本并构建编译着色器。c)对于Uniform的设置。功能详解都在代码里有注释。原创 2023-11-07 15:46:08 · 280 阅读 · 0 评论 -
OpenGL绘制三角形
3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线(Graphics Pipeline,大多译为管线,实际上指的是一堆原始图形数据途经一个输送管道,期间经过各种变化处理最终出现在屏幕的过程)管理的。在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。计算一个像素的最终颜色,片段着色器包含3D场景的数据(比如光照、阴影、光的颜色等等),这些数据可以被用来计算最终像素的颜色。原创 2023-11-06 20:59:45 · 456 阅读 · 0 评论 -
OpenGL介绍与环境配置
一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)原创 2023-11-06 12:04:36 · 682 阅读 · 0 评论