
OpenGL
文章平均质量分 91
蓝天巨人
这个作者很懒,什么都没留下…
展开
-
Opengl之高级数据
使用共享布局时,GLSL是可以为了优化而对uniform变量的位置进行变动的,只要变量的顺序保持不变。因为我们无法知道每个uniform变量的偏移量,我们也就不知道如何准确地填充我们的Uniform缓冲了。我们能够使用像是。原创 2023-10-06 17:54:44 · 142 阅读 · 0 评论 -
Opengl之立方体贴图
简单来说,,每个2D纹理都组成了:一个有纹理的立方体。你可能会奇怪,这样一个立方体有什么用途呢?为什么要把6张纹理合并到一张纹理中,而不是直接使用6个单独的纹理呢?立方体贴图有一个非常有用的特性,它可以通过一个方向向量来进行。假设我们有一个1x1x1的单位立方体,方向向量的原点位于它的中心。原创 2023-10-06 15:46:39 · 827 阅读 · 0 评论 -
Opengl之帧缓冲
到目前为止,我们已经使用了很多屏幕缓冲了:用于写入。这些缓冲结合起来叫做帧缓冲(Framebuffer),它被储存在内存中。OpenGL允许我们定义我们自己的帧缓冲,也就是说我们能够定义我们自己的颜色缓冲,甚至是深度缓冲和模板缓冲。我们目前所做的所有操作都是在默认帧缓冲的渲染缓冲上进行的。默认的帧缓冲是在你创建窗口的时候生成和配置的(GLFW帮我们做了这些)。有了我们自己的帧缓冲,我们就能够有更多方式来渲染了。原创 2023-10-06 11:26:52 · 142 阅读 · 0 评论 -
Opengl之面剔除
尝试在脑子中想象一个3D立方体,数数你从任意方向最多能同时看到几个面。如果你的想象力不是过于丰富了,。你可以从任意位置和任意方向看向这个球体,但你永远不能看到3个以上的面。所以我们为什么要浪费时间绘制我们不能看见的那3个面呢?如果我们能够以某种方式丢弃这几个看不见的面,我们能省下超过50%的片段着色器执行数!如果我们想象任何一个闭合形状,它的每一个面都有两侧,每一侧要么用户,要么背对用户。如果我们能够只绘制观察者的面呢?这正是面剔除(Face Culling)所做的。原创 2023-09-30 15:07:17 · 141 阅读 · 0 评论 -
Opengl之混合
OpenGL中,。透明就是说一个物体(或者其中的一部分)不是纯色(Solid Color)的,它的颜色是物体本身的颜色和它背后其它物体的颜色的不同强度结合。一个有色玻璃窗是一个透明的物体,玻璃有它自己的颜色,但它最终的颜色还包含了玻璃之后所有物体的颜色。这也是混合这一名字的出处,我们混合(Blend)(不同物体的)多种颜色为一种颜色。所以透明度能让我们看穿物体。的(让所有的颜色穿过),或者是半透明的(它让颜色通过,同时也会显示自身的颜色)。。原创 2023-09-30 14:53:35 · 131 阅读 · 0 评论 -
Opengl之模板测试
当之后,,和深度测试一样,它也可能会丢弃片段。接下来,被保留的片段会进入深度测试,它可能会丢弃更多的片段。模板测试是根据又一个缓冲来进行的,它叫做我们可以在渲染的时候更新它来获得一些很有意思的效果。一个模板缓冲中,(通常)的。所以每个像素/片段一共能有256种不同的模板值。我们可以将这些模板值设置为我们想要的值,然后当某一个片段有某一个模板值的时候,我们就可以选择丢弃或是保留这个片段了。,之后在模板缓冲中使用1填充了一个空心矩形。场景中的片段将会只在片段的模板值为1的时候会被渲染(其它的都被丢弃了)。原创 2023-09-30 13:53:26 · 196 阅读 · 0 评论 -
Opengl之深度测试
即使之前绘制的片段本就应该渲染在最前面。因为我们是最后渲染地板的,它会覆盖所有的箱子片段。原创 2023-09-30 11:33:15 · 195 阅读 · 0 评论 -
Opengl模型加载
和箱子对象不同,我们不太能够对像是房子、汽车或者人形角色这样的复杂形状手工定义所有的。我们想要的是将这些模型(Model)(Import)到程序当中。模型通常都由3D艺术家在或者这样的工具中精心制作。这些所谓的3D建模工具(3D Modeling Tool)可以让艺术家创建复杂的形状,并使用一种叫做。这些工具将会在导出到模型文件的时候自动生成所有的顶点坐标、顶点法线以及纹理坐标。这样子艺术家们即使不了解图形技术细节的情况下,也能拥有一套强大的工具来构建高品质的模型了。原创 2023-09-30 10:56:08 · 117 阅读 · 0 评论 -
Opengl之多光源
GLSL中的函数和C函数很相似,,如果函数不是在main函数之前声明的,我们还必须在代码文件顶部声明一个原型。我们对每个光照类型都创建一个不同的函数:定向光、点光源和聚光当我们在场景中,通常使用以下方法:我们需要有一个单独的颜色向量代表片段的输出颜色。对于每一个光源,它对片段的贡献颜色将会加到片段的输出颜色向量上。所以场景中的每个光源都会计算它们各自对片段的影响,并结合为一个最终的输出颜色。实际的代码对每一种实现都可能不同,但大体的结构都是差不多的。原创 2023-09-29 19:46:25 · 212 阅读 · 0 评论 -
OpenGL之光照贴图
我们需要拓展之前的系统,引入和贴图(Map)。这允许我们对物体的漫反射分量和镜面光分量有着更精确的控制。转载 2023-09-29 17:36:35 · 1305 阅读 · 0 评论 -
Opengl之抛光物
而不是位置向量来模拟一个定向光。着色器的计算基本保持不变,但这次我们将直接使用光的direction向量而不是通过position来计算lightDir向量。原创 2023-09-29 19:37:24 · 146 阅读 · 0 评论 -
OpenGl材质
在上一节中,我们定义了一个物体和光的颜色,原创 2023-09-26 20:54:09 · 385 阅读 · 0 评论 -
Opengl之基础光照
现在我们已经把法向量从顶点着色器传到了片段着色器。可是,目前片段着色器里的计算都是在世界空间坐标中进行的。所以,我们是不是应该把法向量也转换为世界空间坐标?基本正确,但是这不是简单地把它乘以一个模型矩阵就能搞定的。首先,法向量只是一个方向向量,不能表达空间中的特定位置。同时,法向量没有齐次坐标(顶点位置中的w分量)。这意味着,位移不应该影响到法向量。原创 2023-09-26 20:37:43 · 125 阅读 · 0 评论 -
Opengl之颜色
现实世界中有无数种颜色,每一个物体都有它们自己的颜色。我们需要使用(有限的)数值来模拟真实世界中(无限)的颜色,的。然而我们仍能通过数值来表现出非常多的颜色,甚至你可能都不会注意到与现实的颜色有任何的差异。,它们通常被缩写为RGB。仅仅用这三个值就可以组合出任意一种颜色。例如,要获取一个我们在现实生活中,而是它所反射的(Reflected)颜色。换句话说,那些不能被物体所吸收(Absorb)的颜色(被拒绝的颜色)就是我们能够感知到的物体的颜色。原创 2023-09-26 09:17:10 · 214 阅读 · 0 评论 -
OpenGL之相机
OpenGL本身没有(Camera)的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种在移动的感觉,而不是场景在移动。本节我们将会讨论如何在OpenGL中配置一个摄像机,并且将会讨论FPS风格的摄像机,让你能够在3D场景中自由移动。我们也会讨论键盘和鼠标输入,最终完成一个自定义的摄像机类。原创 2023-09-23 21:02:05 · 305 阅读 · 0 评论 -
OpenGL之坐标系统
为了将坐标从一个坐标系变换到另一个坐标系,我们需要用到几个变换矩阵,最重要的几个分别是模型(Model)、观察(View)、投影(Projection)三个矩阵。我们的顶点坐标起始于局部空间(Local Space),在这里它称为局部坐标(Local Coordinate),它在之后会变为世界坐标观察坐标裁剪坐标(Clip Coordinate),并最后以屏幕坐标(Screen Coordinate)的形式结束。局部坐标是对象相对于局部原点的坐标,也是物体起始的坐标。原创 2023-09-23 20:52:29 · 137 阅读 · 0 评论 -
OpenGL之变换
它需要。原创 2023-09-23 21:20:58 · 110 阅读 · 0 评论 -
OpengL之纹理
我们可以为每个顶点添加颜色来增加图形的细节,从而创建出有趣的图像。但是,如果想让图形看起来更真实,我们就必须有足够多的顶点,从而指定足够多的颜色。这将会产生很多额外开销,因为每个模型都会需求更多的顶点,每个顶点又需求一个颜色属性,当然也可以使用纹理(Texture)。纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节;你可以想象纹理是一张绘有砖块的纸,无缝折叠贴合到你的3D的房子上,这样你的房子看起来就像有砖墙外表。为了能够把纹理映射(Map)到三角形上,我们需要指定三角形的。原创 2023-09-22 23:16:48 · 207 阅读 · 0 评论 -
OpenGL之着色器
这些小程序为图形渲染管线的某个特定部分而运行。从基本意义上来说,着色器只是一种把输入转化为输出的程序。着色器也是一种非常独立的程序,因为它们之间不能相互通信;它们之间唯一的沟通只有通过输入和输出。原创 2023-09-22 12:44:22 · 325 阅读 · 0 评论 -
Opengl绘制三角形
在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把。3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线(Graphics Pipeline,大多译为管线,实际上指的是一堆原始图形数据途经一个输送管道,期间经过各种变化处理最终出现在屏幕的过程)管理的。图形渲染管线接受一组3D坐标,然后把它们转变为你屏幕上的有色2D像素输出。图形渲染管线可以被划分为几个阶段,每个阶段将会把前一个阶段的输出作为输入。原创 2023-09-22 00:07:53 · 306 阅读 · 0 评论 -
OpenGL之窗口的创建
无原创 2023-09-20 20:05:14 · 144 阅读 · 0 评论 -
OpenGL学习例子
opengl介绍原创 2023-09-14 15:47:33 · 139 阅读 · 0 评论