自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 资源 (18)
  • 问答 (1)
  • 收藏
  • 关注

原创 通俗易懂奈奎斯特定理和香农定理

比如航天技术中的宇际通信,由航天器发回的信号往往掩埋在比它高几十分贝的宇宙噪声之中,虽然信号非常微弱,但香农公式指出信噪比和带宽可以互换,只要信噪比在理论计算的范围内,我们总可以找到一种方法将有用信号恢复出来。但是有些信号可能不止两个电平,比如一个四电平的信号状态,那么每个电平就可以被理解成“00”,“01”,“10”,“11”,这样每次电平变化就能传输两位的数据了,即比特率 = 2 × 波特率。从公式中我们可以看出,对于一定的信噪比和一定的传输带宽,它的传输速率的上限就确定了,这个极限是不能够突破的。

2024-01-12 15:12:10 1076

翻译 OpenGL学习笔记35-Point Shadows

Point ShadowsAdvanced-Lighting/Shadows/Point-Shadows在上一章中,我们学习了使用阴影映射创建动态阴影。它工作得很好,但它最适合于定向(或聚光灯)光,因为阴影只在光源的方向产生。因此,它也被称为方向阴影映射,因为深度(或阴影)映射仅从光线所注视的方向生成。这一章的重点是动态阴影的产生在所有周围的方向。我们使用的技术对于点光源来说是完美的,因为一个真正的点光源会在各个方向投下阴影。这种技术被称为点(光)阴影,或者更早的全向阴影贴图。本章建立在上

2020-07-30 14:13:42 325

翻译 OpenGL学习笔记34-Shadow Mapping

Shadow MappingAdvanced-Lighting/Shadows/Shadow-Mapping阴影是由于遮挡而缺乏光的结果。当一个光源的光线因为被其他物体遮挡而没有击中物体时,该物体处于阴影中。阴影为被照亮的场景添加了大量的真实感,使观者更容易观察物体之间的空间关系。它们给我们的场景和物体更大的深度感。举个例子,看看下面有阴影和没有阴影的场景:你可以看到,有了阴影,物体之间的关系变得更加明显。例如,只有当我们有阴影的时候,其中一个立方体浮在其他立方体的上方才会很明显。阴影的

2020-07-30 13:53:51 430

翻译 OpenGL学习笔记33-Gamma Correction

Gamma Correction灰阶校正Advanced-Lighting/Gamma-Correction一旦我们计算出场景的最终像素颜色,我们将不得不在监视器上显示它们。在过去的数字成像时代,大多数显示器都是阴极射线管(CRT)显示器。这些监视器有一种物理特性,即两倍的输入电压不会导致两倍的亮度。将输入电压加倍后,显示器的伽玛亮度大约等于2.2的指数关系。这碰巧(巧合地)也与人类测量亮度的方式紧密匹配,因为亮度也以类似(反向)的权力关系显示。为了更好地理解这一切意味着什么,请看下面的图片:.

2020-07-30 13:25:35 431

翻译 OpenGL学习笔记32-Advanced Lighting

Advanced Lighting在照明章节中,我们简要介绍了Phong照明模型,以带来基本数量的现实主义到我们的场景。Phong模型看起来不错,但有一些细微的差别,我们将在本章关注。Blinn-PhongPhong照明是一个伟大的和非常有效的近似照明,但它的镜面反射分解在某些条件下,特别是当亮度低导致一个大的(粗糙的)镜面区域。下面的图片展示了当我们在平面纹理上使用1。0的镜面亮度指数时会发生什么:你可以在边缘看到镜面区域立即被切断。这是因为视图和反射向量之间的角度没有超过90度。如果

2020-07-30 11:51:27 185

翻译 OpenGL学习笔记31-Anti Aliasing

Anti Aliasing反混叠Advanced-OpenGL/Anti-Aliasing在您冒险的渲染过程中,您可能会在模型的边缘遇到一些锯齿状的图案。这些锯齿状边缘出现的原因是由于光栅化器将顶点数据转换为场景背后的实际片段。当绘制一个简单的立方体时,这些锯齿状的边缘看起来就像一个例子:虽然不能立即看到,但如果你仔细观察立方体的边缘,你会看到锯齿状的图案。如果我们放大,你会看到以下内容:这显然不是我们想要的应用程序的最终版本。这种清晰地看到由边缘组成的像素构成的效果称为混叠。有相.

2020-07-30 11:42:48 403

翻译 OpenGL学习笔记30-Instancing

Instancing 实例化Advanced-OpenGL/Instancing想象一个充满草叶的场景:每个草叶都是一个只有几个三角形的小模型。你可能会想要画一些它们,你的场景可能最终会有成千上万的草叶子,你需要渲染每一帧。因为每个叶子只有几个三角形,叶子几乎是立即呈现的。然而,您必须进行的数千次渲染调用将极大地降低性能。如果我们真的渲染这么多的对象,它看起来会有点像这样的代码:for(unsigned int i = 0; i < amount_of_models_to_draw

2020-07-30 11:26:45 499

翻译 OpenGL学习笔记29-Geometry Shader

Geometry Shader几何着色器Advanced-OpenGL/Geometry-Shader在顶点和片段着色器之间有一个可选的着色器舞台称为几何着色器。一个几何着色器以一组顶点作为输入,这些顶点形成一个单一的原语,例如一个点或一个三角形。几何着色器可以在将它们发送到下一个着色器阶段之前转换这些顶点。使几何着色器有趣的是它能够转换原始的原语(顶点集)到完全不同的原语,可能产生比最初给定的更多的顶点。我们将向你展示一个几何着色器的例子,让你进入深刻:#version 330 co.

2020-07-30 11:06:25 532

翻译 OpenGL学习笔记28-Advanced GLSL

Advanced GLSLAdvanced-OpenGL/Advanced-GLSL这一章不会真正向你展示给你的场景视觉质量带来巨大提升的超级高级酷的新功能。本章或多或少地介绍了GLSL中一些有趣的方面和一些可能对你未来的努力有所帮助的技巧。基本上,当你结合使用GLSL创建OpenGL应用程序时,一些值得了解的特性会让你的生活更轻松。我们将讨论一些有趣的内置变量,组织着色器输入和输出的新方法,和一个非常有用的工具称为统一缓冲对象。GLSL's built-in variables着色器是

2020-07-30 10:37:22 388 1

翻译 OpenGL学习笔记27-Advanced Data

Advanced Data 高阶数据在大多数章节中,我们已经广泛地使用OpenGL缓冲器在GPU上存储数据。本章我们将简要讨论一些管理缓冲区的替代方法。OpenGL中的缓冲区在其核心是一个管理GPU内存的特定部分的对象,仅此而已。当将一个缓冲区绑定到一个特定的缓冲区目标时,我们赋予它意义。当我们将一个缓冲区绑定到GL_ARRAY_BUFFER时,它只是一个顶点数组缓冲区,但是我们可以同样容易地将它绑定到GL_ELEMENT_ARRAY_BUFFER。OpenGL在内部为每个目标存储一个对缓冲区的引用

2020-07-30 10:02:08 120

翻译 OpenGL学习笔记26-Cubemaps

Cubemaps立方体贴图Advanced-OpenGL/Cubemaps我们已经使用2D纹理有一段时间了,但是还有更多的纹理类型我们还没有探索,在这一章我们将讨论一个纹理类型是一个多纹理的组合映射到一个:立方体贴图。立方体贴图是一个包含6个单独的2D贴图的纹理,每个贴图形成一个立方体的一面:一个纹理立方体。你可能想知道这样一个立方体的意义是什么?为什么要把6个单独的纹理组合成一个实体而不是仅仅使用6个单独的纹理呢?立方体映射有一个有用的特性,即可以使用方向向量对它们进行索引/采样。假设我们有.

2020-07-30 09:50:41 1678 1

翻译 OpenGL学习笔记25-Frame buffers

Frame buffers帧缓冲器Advanced-OpenGL/Framebuffers到目前为止,我们已经使用了几种类型的屏幕缓冲区:用于写入颜色值的颜色缓冲区,用于写入和测试深度信息的深度缓冲区,以及允许我们根据某些条件丢弃某些片段的模板缓冲区。这些缓冲区的组合存储在GPU内存的某处,被称为framebuffer。OpenGL让我们可以灵活地定义自己的framebuffer,从而定义自己的颜色(以及可选的深度和模板)缓冲区。到目前为止,我们所做的渲染操作都是在附加到默认framebuff.

2020-07-29 16:46:57 1746

翻译 OpenGL学习笔记24-Face culling

Face culling 面选取试着在心里想象一个3D立方体,数一数你能从任何方向看到的最大面数。如果你的想象力不太有创意,你可能会得到最多3个。你可以从任何位置和/或方向观看一个立方体,但你不能看到超过3个面。为什么我们要浪费时间去画另外3张我们看不见的面呢。如果我们可以以某种方式丢弃它们,我们将节省超过50%的立方体碎片着色器运行!我们说超过50%而不是50%,是因为从某些角度看,只能看到两个甚至一个面。那样的话,我们可以节省50%以上。这确实是一个很棒的想法,但我们需要解决一个问题:我

2020-07-29 15:17:31 593

翻译 OpenGL学习笔记23-Blending

Blending混合Advanced-OpenGL/BlendingOpenGL中的混合通常被称为在对象中实现透明的技术。透明指的是物体(或它们的一部分)没有纯色,而是由物体本身和它后面的其他物体的不同强度的颜色组合而成。彩色玻璃窗是一种透明的物体;玻璃有自己的颜色,但产生的颜色也包含了玻璃后面所有对象的颜色。这也是名称混合的来源,因为我们混合了几个像素颜色(从不同的对象)到一个单一的颜色。因此,透明让我们能够看透物体。透明对象可以是完全透明(允许所有颜色通过)或部分透明(允许颜色通过,但.

2020-07-29 13:36:08 463

翻译 OpenGL学习笔记22-Stencil testing

Stencil testing 模版测试Advanced-OpenGL/Stencil-testing一旦片段着色器处理了片段,一个所谓的模板测试被执行,就像深度测试一样,有放弃片段的选项。之后,剩余的片段被传递给深度测试,OpenGL可能会丢弃更多的片段。模板测试基于另一个名为模板缓冲区的缓冲区的内容,我们允许在呈现期间更新该缓冲区以实现有趣的效果。模具缓冲区(通常)每个模具值包含8位,相当于每个像素共有256个不同的模具值。我们可以将这些模板值设置为我们喜欢的值,并且可以在特定片段具有特定的

2020-07-29 11:11:54 463

翻译 OpenGL学习笔记19-Depth testing

Depth testingAdvanced-OpenGL/Depth-testing在坐标系统一章中,我们渲染了一个3D容器,并使用深度缓冲来防止三角形在前面渲染,而它们本该在其他三角形后面。在本章中,我们将详细说明深度缓冲区(z-buffer)存储的深度值,以及它如何确定片段是否在前面。深度缓冲区是一个缓冲区,就像颜色缓冲区一样(存储所有的片段颜色:视觉输出),存储每个片段的信息,具有与颜色缓冲区相同的宽度和高度。深度缓冲区由窗口系统自动创建,并将其深度值存储为16位、24位或32位浮点数。在

2020-07-29 10:45:31 451

翻译 OpenGL学习笔记20-Model

ModelModel-Loading/Model现在是时候着手使用Assimp并开始创建实际的加载和转换代码了。本章的目标是创建另一个类来代表一个完整的模型,也就是说,一个包含多个网格,可能有多个纹理的模型。一所房子,包括一个木制阳台,一个塔,也许还有一个游泳池,仍然可以作为一个单一的模型加载。我们将通过Assimp加载模型,并将其转换为我们在前一章中创建的多个网格对象。闲话少说,我给你展示了模型类的类结构:class Model { public: Model

2020-07-29 10:03:15 341

翻译 OpenGL学习笔记19-Mesh

MeshModel-Loading/Mesh有了Assimp,我们可以将许多不同的模型加载到应用程序中,但是加载之后它们都存储在Assimp的数据结构中。我们最终想要的是将数据转换成OpenGL能理解的格式,这样我们就能呈现对象。我们从上一章了解到网格表示一个可绘制实体,所以让我们从定义一个我们自己的网格类开始。让我们回顾一下到目前为止我们学过的关于网格的最小数据应该是什么。一个网格至少需要一组顶点,其中每个顶点包含一个位置向量、一个法向量和一个纹理坐标向量。网格还应该包含索引绘图的索引,以及材

2020-07-29 09:38:26 713

翻译 OpenGL学习笔记18-Assimp

Assimp到目前为止,在所有的场景中,我们都和我们的容器朋友玩得很开心,但是随着时间的推移,即使是我们最好的朋友也会变得有点无聊。在较大的图形应用程序中,通常会有许多复杂而有趣的模型,这些模型看起来比静态容器漂亮得多。然而,与容器对象不同,我们不能真正手动定义所有的顶点、法线和复杂形状的纹理坐标,比如房屋、车辆或类人字符。我们想要的是,将这些模型导入到应用程序中;模型是由3D艺术家在Blender, 3DS Max或Maya等工具中精心设计的。Blender, 3DS Max or Maya.这些

2020-07-29 09:38:20 388

翻译 OpenGL学习笔记17-Review

Review祝贺你走了这么远!我不确定你是否注意到了,但是在所有的照明章节中,除了一些次要的内容,比如访问统一数组,我们没有学到任何关于OpenGL本身的新知识。到目前为止,所有的照明章节都是关于操作着色器使用技术和方程来实现真实的照明效果。这再次向你展示了着色器的力量。着色器是非常灵活的,你亲眼目睹了第一手的,只有几个3D矢量和一些可配置的变量,我们能够创造惊人的图形!最后几章你学习了颜色,Phong照明模型(包括环境,漫反射和高光照明),物体材质,可配置的光属性,漫反射和高光贴图,不同类型的灯,

2020-07-28 16:50:15 89

翻译 OpenGL学习笔记16-Multiple lights

Multiple lightsLighting/Multiple-lights在前几章中,我们学习了很多关于OpenGL中的照明的知识。我们学习了Phong阴影,材料,照明地图和不同类型的光源。在本章中,我们将结合所有之前获得的知识,通过创建一个有6个主动光源的完全照明的场景。我们将模拟一个类似太阳的光源作为方向光源,4个分散在整个场景中的点光源,我们还将添加一个手电筒。为了在场景中使用多个光源,我们希望将照明计算封装到GLSL函数中。这样做的原因是,当我们使用多种光照类型进行光照计算时,代码很

2020-07-28 16:43:47 192

翻译 OpenGL学习笔记15-Light casters

Light castersLighting/Light-casters到目前为止,我们使用的所有照明都来自于一个单一的光源,即空间中的一个点。它的效果很好,但在现实世界中,我们有几种不同类型的光,每种光的作用都不同。将光投射到物体上的光源称为光源施法者。在本章中,我们将讨论几种不同类型的光源。学习模拟不同的光源是您工具箱中的另一个工具,可以进一步丰富您的环境。我们将首先讨论一个方向光,然后是一个点光,这是我们之前所拥有的扩展,最后我们将讨论聚光灯。在下一章中,我们将把几种不同的光类型合并到一个场

2020-07-28 16:28:11 312

翻译 OpenGL学习笔记14-Lighting maps

Lighting maps在前一章中,我们讨论了每个物体都有其自身独特的材料对光线产生不同反应的可能性。与其他对象相比,这对于给予每个对象一个独特的外观是很好的,但仍然没有提供对象的视觉输出的太多灵活性。在前一章中,我们为一个整体对象定义了材质。然而,现实世界中的对象通常不是由单一的材料组成,而是由多个材料组成。试想一辆汽车:它的外部是由一种闪亮的织物组成的,它的车窗可以部分地反射周围的环境,它的轮胎几乎都是闪亮的,所以它们没有高光,它的轮辋非常闪亮(如果你真的把车洗干净了的话)。汽车的漫反射色和环

2020-07-28 15:55:03 202

翻译 OpenGL学习笔记13-Materials

Materials 材料Lighting/Materials在现实世界中,每个物体对光有不同的反应。例如,钢制物品通常比陶土花瓶更闪亮,而木制容器对光线的反应与钢制容器不同。一些物体反射光没有太多散射导致小高光和其他散射很多给高光一个更大的半径。如果我们想要在OpenGL中模拟几种类型的对象,我们必须定义特定于每个表面的材质属性。在前一章中,我们定义了一个物体和光的颜色来定义物体的视觉输出,并结合了环境光和镜面光的强度。当描述一个表面时,我们可以为三个照明组件分别定义一个材质颜色:环境光,漫射光

2020-07-28 15:39:18 221

翻译 OpenGL学习笔记12-Basic Lighting

Basic Lighting 基本采光技术Lighting/Basic-Lighting现实世界中的照明是极其复杂的,它依赖于太多的因素,我们无法用有限的处理能力来计算。因此,OpenGL中的照明是基于对现实的近似,使用简化的模型,更容易处理,看起来也相对相似。这些照明模型是基于我们所理解的光的物理原理。其中一个模型叫做Phong照明模型。Phong照明模型的主要构建模块包括3个组件:环境光、漫射光和高光。下面你可以看到这些照明组件看起来像他们自己和组合:Ambient lighting:

2020-07-28 14:59:29 306 1

翻译 OpenGL学习笔记11-Colors

ColorsLighting/Colors在前几章中,我们简要地使用和处理了颜色,但从未正确地定义过它们。在这里,我们将讨论什么颜色是,并开始建立场景为即将到来的照明章节。在现实世界中,颜色可以采用任何已知的颜色值,每个对象都有自己的颜色。在数字世界中,我们需要将(无限的)真实颜色映射到(有限的)数字值,因此并不是所有真实世界的颜色都可以用数字表示。颜色用数字表示,使用红、绿、蓝组成部分,通常缩写为RGB。使用这3个值的不同组合,在[0,1]的范围内,我们可以表示几乎任何颜色。例如,要得到一个珊

2020-07-28 14:13:48 445

翻译 OpenGL学习笔记10-Review

Review祝贺你完成了“开始入门”章节的结尾。现在你应该能够创建一个窗口,创建和编译着色器,发送顶点数据通过缓冲你的着色器对象或制服,画对象,使用纹理,理解向量和矩阵和结合所有这些知识来创建一个完整的3 d场景拿着相机到处玩。唷,我们在最后几章中学到了很多东西。试着利用你所学到的知识,做一些实验,或者对一些问题提出你自己的想法和解决方案。一旦你觉得你掌握了我们所讨论的所有材料,就该进入下一个照明章节了。GlossaryOpenGL: 图形API的正式规范,定义每个函数的布局和输出。.

2020-07-28 13:33:49 86

翻译 OpenGL学习笔记9-Camera

CameraGetting-started/Camera在前一章中,我们讨论了视图矩阵以及如何使用视图矩阵在场景中移动(我们稍微向后移动了一点)。OpenGL本身并不熟悉相机的概念,但我们可以通过逆向移动场景中的所有对象来模拟相机,给人一种我们正在移动的错觉在本章中,我们将讨论如何在OpenGL中设置一个摄像头。我们将讨论一个飞行风格的相机,允许你在一个3D场景中自由移动。我们还将讨论键盘和鼠标输入,并以一个自定义相机类结束。Camera/View space当我们谈论相机/视图空间时,

2020-07-28 13:17:39 826 1

翻译 OpenGL学习笔记8-Coordinate Systems

Coordinate Systems(坐标系)Getting-started/Coordinate-Systems(开始/坐标系统)在上一章中,我们学习了如何利用矩阵来转换所有的顶点。OpenGL期望在每个顶点着色器运行后,我们想要变得可见的所有顶点都在规范化的设备坐标中。也就是说,每个顶点的x、y、z坐标应该在-1.0到1.0之间;超出此范围的坐标将不可见。我们通常做的是,指定我们自己确定的范围(或空间)中的坐标,并在顶点着色器中将这些坐标转换为标准化设备坐标(NDC)。然后将这些NDC交给光栅化

2020-07-28 11:06:04 610

翻译 OpenGL学习笔记6-Transformations

Transformations(转换)我们现在知道如何创建对象,颜色和/或使用纹理给它们一个详细的外观,但它们仍然没有那么有趣,因为它们都是静态对象。我们可以尝试通过改变它们的顶点和重新配置它们的缓冲来移动它们,但是这样做很麻烦并且消耗了相当多的处理能力。转换对象有更好的方法,那就是使用(多个)矩阵对象。这并不意味着我们要谈论功夫和一个庞大的数字人工世界。矩阵是非常强大的数学结构,乍一看似乎有些可怕,但一旦你习惯了它们,就会证明它们非常有用。当讨论矩阵时,我们将不得不稍微深入一些数学知识,对于更倾向

2020-07-24 16:11:14 304

翻译 OpenGL学习笔记6-Textures

Textures(纹理)我们学会了为我们的对象添加更多的细节,我们可以为每个顶点使用颜色来创建一些有趣的图像。然而,为了获得更多的真实性,我们必须有很多顶点,所以我们可以指定很多颜色。这占用了相当多的额外开销,因为每个模型都需要更多的顶点,而且每个顶点都需要一个颜色属性。艺术家和程序员通常更喜欢使用纹理。纹理是一个2D图像(甚至1D和3D的纹理存在),用来添加细节到一个对象;把纹理想象成一张纸,上面有一个漂亮的砖块图像(例如),它整齐地折叠在你的3D房子上,这样它看起来就像你的房子有一个石头的外观。

2020-07-24 10:00:32 493

翻译 OpenGL学习笔记5-Shaders

着色器正如在Hello Triangle一章中提到的,着色器是基于GPU的小程序。这些程序针对图形管道的每个特定部分运行。在基本意义上,着色器只不过是把输入转换成输出的程序。着色器也是非常孤立的程序,因为它们不允许彼此通信;他们唯一的交流是通过他们的输入和输出。在前一章中,我们简要地接触了着色器的表面以及如何正确地使用它们。现在我们将以更一般的方式解释着色器,特别是OpenGL着色语言。GLSL着色器是用类c语言GLSL编写的。GLSL是为与图形一起使用而定制的,包含了专门针对向量和矩阵操作

2020-07-20 13:49:04 374

翻译 OpenGL学习笔记4-Hello Triangle

Hello Triangle在OpenGL中,所有东西都是在3D空间中,但屏幕或窗口是一个2D像素数组,所以OpenGL的大部分工作是关于将所有3D坐标转换为适合屏幕的2D像素。将三维坐标转换为二维像素的过程由OpenGL graphics pipeline 管理。图形管道可以分为两大部分:第一部分将3D坐标转换为2D坐标,第二部分将2D坐标转换为实际的彩色像素。在这一章中,我们将简要讨论图形管道,以及如何利用它来创建花哨的像素。图形管道接受一组3D坐标作为输入,并将它们转换为屏幕上的彩色2D像素。

2020-07-17 15:36:44 372 1

翻译 OpenGL学习笔记3-Hello Window

Hello Window让我们看看能否启动并运行GLFW。首先,创建一个.cpp文件,并将以下内容添加到新创建的文件的顶部。#include <glad/glad.h>#include <GLFW/glfw3.h>请确保在GLFW之前包括GLAD。GLAD的包含文件在幕后包含了所需的OpenGL头文件(如GL/ GL .h),所以请确保在其他需要OpenGL的头文件(如GLFW)之前包含GLAD。接下来,我们创建main函数,在这里我们将实例化GLFW窗口:

2020-07-16 17:31:21 485

翻译 OpenGL学习笔记2-Creating a window

创建一个窗口在开始创建令人惊叹的图形之前,我们需要做的第一件事是创建一个OpenGL上下文和一个绘图的应用程序窗口。但是,这些操作对于每个操作系统都是特定的,并且OpenGL有意尝试将自己从这些操作中抽象出来。这意味着我们必须自己创建窗口、定义上下文和处理用户输入。幸运的是,有相当多的库提供了我们所寻求的功能,其中一些是专门针对OpenGL的。这些库为我们保存了所有与操作系统相关的工作,并为我们提供了一个窗口和一个OpenGL上下文来进行渲染。一些比较流行的库是GLUT、SDL、SFML和GLFW。

2020-07-16 15:22:32 283

翻译 OpenGL学习笔记1-OpenGL简介

翻译自https://learnopengl.com/Getting-started/OpenGL目录OpenGL核心配置与直接模式(Core-profile vs Immediate mode)扩展(Extensions)状态机(State machine)对象(Objects)让我们开始OpenGL在开始我们的旅程之前,我们应该首先定义OpenGL实际上是什么。OpenGL主要被认为是一种API(应用程序编程接口),它为我们提供了一组可以用来操作图形和图像的函数。然而

2020-07-16 11:52:21 363

原创 VTK图形图像开发进阶-学习笔记 05(03) VTK图像处理

5.4 边缘检测图像中不连续的灰度值会产生边缘,图像的边缘检测是基于边界的图像分割方法的基础。分水岭算法通常是分割原图的梯度图像,而梯度实际上也反映图像的边缘信息5.4.1 梯度算子梯度算子对应于图像的一阶导数。图像的一阶导数一般是通过差分运算来近似的。VTK中可以用vtkImageCradient类计算图像梯度。///****************************************************////* Examples/Chap05/5.4_Im

2020-07-07 14:56:05 849

原创 VTK图形图像开发进阶-学习笔记 05(02) VTK图像处理

5.3 VTK图像基本操作5.3.1 图像信息的访问与修改5.3.2 图像像素值的访问与修改5.3.3 图像类型转换5.3.4 图像颜色映射1 图像灰度映射2 提取颜色组分3 图像彩色映射4 颜色合成5.3.5 区域提取1 提取感兴趣区域2 三维图像截面提取3 扩展-滑动鼠标切换三维图像切面5.3.6 直方图统计1 灰度图像直方图2 彩色图像直方图5.3.7 图像重采样5.3.8 图像运算1 数学运算2 逻辑运算5.3.9 图像

2020-07-03 16:25:44 653 3

原创 VTK图形图像开发进阶-学习笔记 05(01) VTK图像处理

5.1 VTK图像创建5.1.1 VTK图像数据结构数字图像文件内容由两个部分组成:图像头信息和数据。图像头信息定义了图像的基本信息:主要包括起点位置(Origin)、像素间隔(Space)和维度(Dimension)。在医学图像中,起点位置、像素间隔和图像维度决定了世界坐标系。图像数据即为图像像素的像素值,一般采用以为数组来表示和存储。图像像素值可以是标量(灰度图像)、矢量(梯度图像)或张量(弥散张量成像,Diffusion Tensor Imaging,DTI)在医学图像处理

2020-07-03 16:07:47 1695

原创 VTK图形图像开发进阶-学习笔记 04 VTK数据的读写

4.1 Reader与Writer类VTK提供不同的Reader/Writer类读写各种文件,对于类的使用者而言,最重要的是根据不同的文件类型选择合适的Reader/Writer类进行读写操作4.1.1 vtkImageData类型类vtkDicomImageReader可用于读取DICOM图像,DICOM(*.dcm)图像是医学图像处理中使用最广泛的格式,但该类功能很不完善。该类不支持多帧DICOM图像的读取,VTK也没有实现对DICOM图像的写操作。对DICOM图像的读写支持较好的函数库

2020-07-01 17:24:02 1004

log4cplus-2.0.5.7z

log4cplus-2.0.5.7zlog4cplus-2.0.5.7zlog4cplus-2.0.5.7zlog4cplus-2.0.5.7zlog4cplus-2.0.5.7z

2020-01-14

MDK5软件及芯片包(STMFxx和STMF4xx)

MDK5软件及芯片包(STMFxx和STMF4xx)MDK5软件及芯片包(STMFxx和STMF4xx)

2019-03-27

web网页保存为PDF文件

保存为PDF文件

2018-11-29

web网页图表控件highchart示例

web网页图表控件highchart示例 

2018-11-29

win32diskimager

win32diskimager redpitayaSD卡写镜像

2018-10-31

inno 区分win7 win8 win8.1 win10 x64 x86不同系统,安装不同驱动文件的脚本编写

inno 区分win7 win8 win8.1 win10 x64 x86不同系统,安装不同驱动文件的脚本编写

2018-05-04

wpf listbox notes 样式重写

wpf listbox notes 样式重写wpf listbox notes 样式重写wpf listbox notes 样式重写wpf listbox notes 样式重写wpf listbox notes 样式重写

2017-12-14

WPF 窗体样式重写 界面优美

WPF 窗体样式重写 界面优美 WPF 窗体样式重写 界面优美

2017-12-13

Word2CHM Addin v1.4.7.10.exe

Word 转化 CHM Addin 插件 Word 转化 CHM Addin 插件 Word 转化 CHM Addin 插件 Word 转化 CHM Addin 插件

2017-12-05

wpf画图控件_Scichart

wpf 画图控件 炫酷 破解 wpf 画图控件 炫酷 破解 wpf 画图控件 炫酷 破解 wpf 画图控件 炫酷 破解

2017-11-23

WPF_Image_Pan_and_Zoom

我见过的最好的鼠标滚动放大缩小,和平移功能。不止用于Image,带背景图的空间都能使用

2017-10-25

远程控制桌面 c# Winform

远程控制桌面 c# Winform 和系统的远程桌面控制功能差不多

2017-10-25

亲测可用log4net.dll

亲测可用log4net.dll,csdn上有的不能用。

2017-09-18

WPF 样式 style 滑动开关 实现的效果像checkbo好看的开关一样

WPF 样式 style 滑动开关 实现的效果像checkbo好看的开关一样

2017-08-10

web网上购物

c# asp.net 购物网站,包括登陆,注册,购物车,交易信息等多个页面

2014-05-02

c#电子相册

c# 写的电子像册,适合做毕业设计。值得学习。

2014-04-26

C#字符串操作

c#中关于字符串的操作,适合c#初学者。

2014-04-26

c#画图编辑器

类似画图编辑器,写的非常好,值得学习,有一定的难度。

2014-04-26

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除