![](https://img-blog.csdnimg.cn/direct/41807c6d42534812a9599f8ae833d117.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
OpenGL 开发之路
文章平均质量分 95
OpenGL 开发 记录 ,主要是参考https://learnopengl-cn.github.io/官网文档学习的。
iukam
3D开发工程师
展开
-
OpenGL 入门(十)— 光照系统
介绍三种光源类型:平行光(Directional Light)、点光源(Point Light)、聚光灯(Spot Light)。平行光,也叫定向光,当一个光源处于很远的地方时,来自光源的每条光线就会近似于互相平行。不论物体和/或者观察者的位置,看起来好像所有的光都来自于同一个方向。因为它的所有光线都有着相同的方向,它与光源的位置是没有关系的。平行光可以照亮的范围是没有限制的,它通常是作为太阳这样的角色在场景中出现的。我们可以定义一个光线方向向量模拟一个定向光:注意,我们对向量取反。我们目前使用的光照计原创 2024-02-06 16:36:38 · 975 阅读 · 0 评论 -
OpenGL 入门(九)—Material(材质)和 光照贴图
从实际角度来说,木头其实也有镜面高光,尽管它的反光度(Shininess)很小(更多的光被散射),影响也比较小,但是为了教学目的,我们可以假设木头不会对镜面光有任何反应。只是在光照场景中,它通常叫做一个漫反射贴图(Diffuse Map)(3D艺术家通常都这么叫它),它是一个表现了物体所有的漫反射颜色的纹理图像。然后,我们将在片段着色器中再次需要纹理坐标,所以我们声明一个额外的输入变量。事实上,纹理与贴图原理是一样的,贴图也叫纹理贴图,其实都是使用一张覆盖物体的图像,让我们能够逐片段索引其独立的颜色值。原创 2024-02-05 21:07:21 · 2116 阅读 · 0 评论 -
OpenGL 入门(八)— 标准光照模型
一个通过计算环境光,漫反射,和镜面光分量的值来估计真实光照的模型。通过给每个没有被光照的物体很小的亮度,使其不是完全黑暗的,从而对全局光照进行估计。一个顶点/片段与光线方向越接近,光照会越强。使用了法向量来计算角度。反射光线的强度与表面法线和光源方向之间夹角的余弦值成正比。一个垂直于平面的单位向量。法线矩阵(Normal Matrix): 一个3x3矩阵,或者说是没有平移的模型(或者模型-观察)矩阵。它也被以某种方式修改(逆转置),从而在应用非统一缩放时,保持法向量朝向正确的方向。原创 2024-02-05 15:55:23 · 1199 阅读 · 0 评论 -
OpenGL 入门(七)— Camera(摄像机)
OpenGL本身没有摄像机(Camera)的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种我们在移动的感觉,而不是场景在移动。名词介绍LookAt矩阵: 一种特殊类型的观察矩阵,它创建了一个坐标系,其中所有坐标都根据从一个位置正在观察目标的用户旋转或者平移。欧拉角(Euler Angles): 被定义为偏航角(Yaw),俯仰角(Pitch),和滚转角(Roll)从而允许我们通过这三个值构造任何3D方向。观察空间(View Space)也叫摄像机空间(Camera Spac原创 2024-02-04 17:44:42 · 1249 阅读 · 0 评论 -
OpenGL 入门(六)— Coordinate Systems(坐标系统或坐标空间)
坐标转换为了将坐标从一个坐标系变换到另一个坐标系,我们需要用到几个变换矩阵,最重要的几个分别是模型(Model)、观察(View)、投影(Projection)三个矩阵。下面一个Cube从模型坐标本投射到屏幕坐标上完整流程展示:顶点位置和法向量等几何数据在OpenGL流水线中通过顶点操作和原始装配操作进行转换,然后再进行网格化处理。上述的每一个步骤都创建了一个变换矩阵:模型矩阵、观察矩阵和投影矩阵。原创 2024-02-02 19:12:51 · 1067 阅读 · 0 评论 -
OpenGL 入门(五)— Transform(坐标变换)
一个特殊的位置,即原点,它是整个坐标系的中心;两条过原点的互相垂直的矢量,即x轴和y轴。这些坐标轴也被称为是该坐标系的基矢量;原创 2024-02-01 15:14:12 · 1149 阅读 · 0 评论 -
OpenGL 入门(四)— Textures(纹理)
纹理(Texture)。纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节。你可以想象纹理是一张绘有砖块的纸,无缝折叠贴合到你的3D的房子上,这样你的房子看起来就像有砖墙外表了。除了图像以外,纹理也可以被用来储存大量的数据,这些数据可以发送到着色器上。纹理映射(Map)下面的图片展示了我们是如何把纹理坐标映射到三角形上的。0.0f, 0.0f, // 左下角1.0f, 0.0f, // 右下角0.5f, 1.0f // 上中。原创 2024-01-31 14:09:19 · 1145 阅读 · 0 评论 -
OpenGL 入门(三)— Shader(着色器)
着色器(Shader)是运行在GPU上的小程序。这些小程序为图形渲染管线的某个特定部分而运行。从基本意义上来说,着色器只是一种把输入转化为输出的程序。着色器也是一种非常独立的程序,因为它们之间不能相互通信。它们之间唯一的沟通只有通过输入和输出。原创 2024-01-30 14:36:11 · 1509 阅读 · 0 评论 -
OpenGL 入门(二)— 顶点数组对象(VAO)和顶点缓冲对象(VBO)
顶点数组对象(Vertex Array Object,VAO): 存储缓冲区和顶点属性状态。顶点缓冲对象(Vertex Buffer Object,VBO): 一个调用显存并存储所有顶点数据供显卡使用的缓冲对象。元素缓冲对象(Element Buffer Object,EBO):也叫索引缓冲对象(Index Buffer Object,IBO): 一个存储元素索引供索引化绘制使用的缓冲对象。标准化设备坐标(Normalized Device Coordinates, NDC)原创 2024-01-29 16:13:43 · 1371 阅读 · 0 评论 -
OpenGL 入门(一)— 创建窗口
OpenGL: 一个定义了函数布局和输出的图形API的正式规范。GLFW:一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文、定义窗口参数以及处理用户输入,对我们来说这就够了。GLAD: 一个扩展加载库,用来为我们加载并设定所有OpenGL函数指针,从而让我们能够使用所有(现代)OpenGL函数。视口(Viewport): 我们需要渲染的窗口。原创 2024-01-26 19:05:19 · 1192 阅读 · 1 评论 -
OpenGL — 介绍与VSCode环境配置
一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。OpenGL。至于内部具体每个函数是如何实现(Implement)的,将由OpenGL库的开发者自行决定(译注:这里开发者是指编写OpenGL库的人)。因为OpenGL规范并没有规定实现的细节,具体的OpenGL库允许使用不同的实现,只要原创 2024-01-26 16:21:11 · 1293 阅读 · 0 评论