自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Vulkan填坑学习Day28—摄像机(Camera)

摄像机(Camera) 前面的教程中我们讨论了观察矩阵以及如何使用观察矩阵移动场景(我们向后移动了一点)。Vulkan本身没有摄像机(Camera)的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种我们在移动的感觉,而不是场景在移动。 本节我们将会讨论如何在Vul...

2020-01-31 16:42:04

阅读数 717

评论数 0

原创 Vulkan填坑学习Day27-2—多采样抗锯齿(多重采样_Multisampling)

Vulkan 多重采样(Multisampling) 我们的程序现在加载了多层LOD的纹理,它修复了对象远离观察者时的锯齿问题。图像显得更加平滑,但是仔细观察,你会发现在绘制的几何图形的边缘上有锯齿状的图案。这在我们早期的一个程序中尤其明显,当我们渲染一个四边形: 这种不受欢迎的效果被称为“锯齿”...

2020-01-30 15:19:24

阅读数 64

评论数 0

原创 Vulkan填坑学习Day27-1—贴图LOD(mipmap)

Vulkan 生成贴图(mipmap) Vulkan 生成贴图(mipmap),现在我们的程序可以加载和渲染3D模型了。Mipmap广泛应用于游戏和渲染软件,对于如何创建它们,Vulkan给了我们完全的控制权。 Mipmap是缩小版本的image,每个新image是前一张图的宽度和高度的一半。Mi...

2020-01-30 08:30:44

阅读数 55

评论数 0

原创 Vulkan填坑学习Day26-3—加载模型

加载模型 Vulkan 加载模型(Loading models),应用程序现在已经可以渲染纹理3D模型,但是 vertices 顶点和 indices 索引数组中的几何体不是很有趣。在本章节我们扩展程序,从实际的模型文件冲加载顶点和索引数据,并使图形卡实际做一些工作。 许多图形API系列教程中让读...

2020-01-22 17:52:06

阅读数 44

评论数 0

原创 Vulkan填坑学习Day26-2—深度缓冲区

Vulkan 深度缓冲区 Vulkan 深度缓冲区,到目前为止,我们所使用的几何图形为3D,但仍然完全扁平的。在本章节中我们添加Z坐标到3D模型数据中。我们将使用这个第三个坐标在当前平面上放置一个正方形,以查看几何图形没有进行深度排序造成的问题。 一、3D 空间 修改 Vertex 结构体使用3D...

2020-01-22 16:41:32

阅读数 72

评论数 0

原创 Vulkan填坑学习Day26-1—组合图像取样器

Vulkan 组合图像取样器 Vulkan 组合图像取样器,我们在教程的uniform缓冲区章节中首次了解了描述符。在本章节我们会看到一种新的描述符类型:组合图像取样器(combined image sampler)。该描述符使着色器通过类似上一章创建的采样器对象那样,来访问图像资源。 我们将首先...

2020-01-22 15:17:49

阅读数 58

评论数 0

原创 Vulkan填坑学习Day25—图像视图和采样器

Vulkan 图像视图和采样器 Vulkan 图像视图和采样器,在本章节我们将为图形管线创建另外两个资源来对图像进行采样。第一个资源我们之前已经接触过了,就是交换链,但是第二个资源比较新,它涉及着色器如何从图像中读取纹素。 一、纹理图像视图 我们之前看过交换链和帧缓冲区,图像不是直接访问,而是通过...

2020-01-22 14:24:23

阅读数 47

评论数 0

原创 Vulkan填坑学习Day24—纹理图像(Images)

Vulkan 纹理图像(Images) Vulkan 图像(Images),到目前为止,几何图形使用每个顶点颜色进行着色处理,这是一个局限性比较大的方式。在本教程的一部分内容中,我们实现纹理映射,使得几何图形看起来更加生动有趣。这也会允许我们在未来的章节中加载和绘制基本的3D模型。 一、介绍 添加...

2020-01-22 13:46:21

阅读数 29

评论数 0

原创 Vulkan填坑学习Day23—描述符池和集合

Vulkan 描述符池和集合 Vulkan 描述符池和集合,描述符布局描述了可以绑定的描述符的类型。在本章节,我们创建描述符集,它将实际指定一个VkBuffer来绑定到一个uniform buffer描述符。 一、描述符池 描述符集合不能直接创建,它们必须像命令缓冲区一样,从对象池中分配使用。对于...

2020-01-22 12:34:57

阅读数 59

评论数 0

原创 Vulkan填坑学习Day22—描述符布局和缓冲区

Vulkan 描述符布局和缓冲区 Vulkan 描述符布局和缓冲区,在Vulkan中正确处理此问题的途径是使用资源描述符(resource descriptors)。描述符是着色器自由访问缓冲区和图像资源的一种方式。我们需要设置一个包含转换矩阵的缓冲区,并使顶点着色器通过描述符访问它们。 一、简...

2020-01-22 12:33:56

阅读数 65

评论数 0

原创 Vulkan填坑学习Day21—索引缓冲区

Vulkan 索引缓冲区 Vulkan 索引缓冲区,索引缓冲区(index buffer)就是一个指向顶点缓冲区的指针数组,它允许我们重排列顶点数据,并复用多个已经存在的顶点数据,本章介绍了如何创建和使用索引缓冲区。 在实际产品的运行环境中3D模型的数据往往共享多个三角形之间的顶点数据。即使绘制一...

2020-01-22 12:33:25

阅读数 68

评论数 0

原创 Vulkan填坑学习Day20—暂存缓冲区

Vulkan 临时缓冲区 Vulkan 临时缓冲区,在本章节我们创建两个顶点缓冲区,一个缓冲区提供给CPU-HOST内存访问使用,用于从顶点数组中提交数据,另一个顶点缓冲区用于设备local内存,我们将会使用缓冲区拷贝的命令将数据从临时缓冲区拷贝到实际的图形卡内存中。 顶点缓冲区现在已经可以正常工...

2020-01-22 12:32:47

阅读数 52

评论数 0

原创 Vulkan填坑学习Day19—创建顶点缓冲区

Vulkan 创建顶点缓冲区 Vulkan 创建顶点缓冲区,在Vulkan中,缓冲区是内存的一块区域,该区域用于向显卡提供预要读取的任意数据。它们可以用来存储顶点数据,也可以用于其他目的。与之前创建的Vulkan对象不同的是,缓冲区自己不会分配内存空间。前几个章节了解到,Vulkan API使开发...

2020-01-20 23:17:52

阅读数 59

评论数 0

原创 Vulkan填坑学习Day18—顶点输入描述

Vulkan 顶点输入 在接下来的章节,我们会将之前在顶点着色器中直接硬编码的顶点数据替换为顶点缓冲来定义。我们首先创建一个 CPU 的缓冲,然后将我们要使用的顶点数据先复制到这个 CPU 缓冲中,最后,我们复制 CPU 缓冲中的数据到阶段缓冲。 一、顶点着色器 首先要修改的是顶点着色器,不再包含...

2020-01-20 18:54:32

阅读数 50

评论数 0

原创 Vulkan填坑学习Day17—重建交换链

Vulkan 重建交换链 我们已经成功地编写代码使用 Vulkan 在屏幕上绘制出了一个三角形,但这个程序还有许多细节问题我们没有处理。比如,窗口大小改变会导致交换链和窗口不再适配,我们需要重新对交换链进行处理。 一、重新创建交换链 添加新的函数recreateSwapChain并调用create...

2020-01-19 19:38:53

阅读数 37

评论数 0

原创 Vulkan填坑学习Day16—渲染显示三角形

Vulkan 渲染和显示 Vulkan 渲染和显示,这一章节会把之前的所有内容进行整合,我们将会编写drawFrame函数,通过主循环main loop将三角形绘制到屏幕。drawFrame函数将会执行如下操作: 从交换链中获取一个图像 在帧缓冲区中,使用作为附件的图像来执行命令缓冲区中的命令 ...

2020-01-18 23:06:29

阅读数 29

评论数 0

原创 Vulkan填坑学习Day15—命令缓冲区

Vulkan 命令缓冲区 Vulkan 命令缓冲区,诸如绘制和内存操作相关命令,在Vulkan中不是通过函数直接调用的。我们需要在命令缓冲区对象中记录我们期望的任何操作。这样做的优点是可以提前在多线程中完成所有绘制命令相关的装配工作,并在主线程循环结构中通知Vulkan执行具体的命令。 一、命...

2020-01-16 23:57:38

阅读数 61

评论数 0

原创 Vulkan填坑学习Day14—帧缓冲区

Vulkan 帧缓冲区,我们在前面的章节中已经讨论了很多次framebuffers帧缓冲区,到目前为止我们配置了render pass渲染通道并希望输出一个与交换链图像格式一致的帧缓冲区,但是我们实际上还没有创建。 在render pass创建阶段我们指定了具体的附件,并通过VkFramebuf...

2020-01-15 21:42:18

阅读数 61

评论数 0

原创 Vulkan填坑学习Day13—阶段总结之集成管线

Vulkan 集成管线 Vulkan 集成管线,我们现在整合前几章节的结构体和对象创建图形管线!以下是我们现在用到的对象类型,作为一个快速回顾: Shader stages: 着色器模块定义了图形管线可编程阶段的功能 Fixed-function state: 结构体定义固定管线功能,比如输入装配...

2020-01-15 21:26:24

阅读数 26

评论数 0

原创 Vulkan填坑学习Day12—渲染通道

Vulkan 渲染通道 Vulkan 渲染通道,在我们完成管线的创建工作之前,我们需要告诉Vulkan渲染时候使用的framebuffer帧缓冲区附件相关信息。我们需要指定多少个颜色和深度缓冲区将会被使用,指定多少个采样器被用到及在整个渲染操作中相关的内容如何处理。所有的这些信息都被封装在一个叫做...

2020-01-14 23:32:10

阅读数 82

评论数 0

原创 Vulkan填坑学习Day11—固有功能

Vulkan 固有功能 Vulkan 固有功能,早期的图形API在图形渲染管线的许多阶段提供了默认的状态。在Vulkan中,从viewport的大小到混色函数,需要凡事做到亲历亲为。在本章节中我们会填充有关固有功能操作的所有结构体。 一、顶点输入 VkPipelineVertexInputStat...

2020-01-13 21:52:30

阅读数 743

评论数 0

原创 Vulkan填坑学习Day10—着色器模块

Vulkan 着色器模块 GLSL语言可参照LearnOpenGL学习。 Vulkan 着色器模块,与之前的图像API不同,Vulkan中的着色器代码必须以二进制字节码的格式使用,而不是像GLSL和HLSL这样具有比较好的可读性的语法。此字节格式成为SPIR-V,它可以与Vulkan和OpenCL...

2020-01-10 23:16:43

阅读数 142

评论数 0

原创 Vulkan填坑学习Day09—图形管线概述

Vulkan 图形管线概述 此篇文章对一般计算机图形管线讲述个人感觉较好,可参考:图形渲染管线简介 Vulkan 图形管线,通过接下来的章节,我们将会开启有关图形管线的话题,通过对图形渲染管线的配置完成最后的三角形绘画。所谓图形管线就是将mesh使用到的vertices定点数据和贴图数据,转化为渲...

2020-01-10 18:00:18

阅读数 35

评论数 0

原创 Vulkan填坑学习Day08—图像与视图

Vulkan 图像与视图 Vulkan 图像与视图,使用任何的VkImage,包括在交换链或者渲染管线中的,我们都需要创建VkImageView对象。从字面上理解它就是一个针对图像的视图或容器,通过它具体的渲染管线才能够读写渲染数据,换句话说VkImage不能与渲染管线进行交互。除此之外,图像视图...

2020-01-09 22:25:23

阅读数 41

评论数 0

原创 Vulkan填坑学习Day07—Window Surface

Vulkan Window Surface 注:本章大部分代码在前一章节交换链源代码前中已经实现。 Vulkan Window Surface,到目前为止,我们了解到Vulkan是一个与平台特性无关联的API集合。它不能直接与窗口系统进行交互。为了将渲染结果呈现到屏幕,需要建立Vulkan与窗体系...

2020-01-08 23:16:42

阅读数 41

评论数 0

原创 Vulkan填坑学习Day06—交换链

Vulkan 交换链 Vulkan 交换链,在这一章节,我们了解一下将渲染图像提交到屏幕的基本机制。这种机制称为交换链,并且需要在Vulkan上下文中被明确创建。从屏幕的角度观察,交换链本质上是一个图像队列。应用程序作为生产者会获取图像进行绘制,然后将其返还给交换链图像队列,等待屏幕消费。交换链的...

2020-01-07 23:20:28

阅读数 43

评论数 0

原创 Vulkan填坑学习Day05—逻辑设备与队列

Vulkan 逻辑设备与队列 简介 Vulkan 逻辑设备与队列,在选择要使用的物理设备之后,我们需要设置一个逻辑设备用于交互。逻辑设备创建过程与instance创建过程类似,也需要描述我们需要使用的功能。因为我们已经查询过哪些队列簇可用,在这里需要进一步为逻辑设备创建具体类型的命令队列。如果有不...

2020-01-06 21:00:09

阅读数 47

评论数 0

原创 Vulkan填坑学习Day04—物理设备与队列

Vulkan 物理设备与队列 Vulkan物理设备与队列 ,通过VkInstance初始化Vulkan后,我们需要在系统中查找并选择一个支持我们所需功能的显卡。实际上,我们可以选择任意数量的显卡并同时使用他们,但在本小节中,我们简单的设定选择规则,即将查找到的第一个图形卡作为我们适合的物理设备。 ...

2020-01-05 21:16:53

阅读数 69

评论数 0

原创 Vulkan填坑学习Day03—创建Vulkan实例

本内容多借鉴Vulkan编程指南书籍内容。 创建Vulkan实例,与Vulkan打交道,通常的步骤是创建一个intance去初始化Vulkan library。这个instance是您的应用程序与Vulkan库之间的连接桥梁,通常创建过程中,需要向驱动程序提供一些应用层的信息。 在本部分,我们开始...

2020-01-04 22:25:32

阅读数 162

评论数 0

原创 Vulkan填坑学习Day02—Win10开发环境搭建

Vulkan 开发环境搭建之Windows 一、Vulkan 开发环境搭建 SDK 开发Vulkan应用程序所需的最重要的组件就是SDK。它包括核心头文件、标准的Validation layers及调试工具集、和驱动Loader,如果现在这些关键词不是很明白的话,不要紧,我会在后续的教程上向大家说...

2020-01-04 00:11:50

阅读数 53

评论数 0

原创 Vulkan填坑学习Day01—框架综述

Vulkan教程代码框架 一、环境搭建 主要是Windows上,下载Vulkan SDK,下载GLFW(Graphics Library Framework),下载GLM(OpenGL Mathematics),配置VS,验证Vulkan扩展。 二、目标及步骤 以创建三角形为例 1.实例和物理设备...

2020-01-02 23:48:25

阅读数 92

评论数 0

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