[译]Vulkan教程(01)入门
[译]Vulkan教程(01)入门
接下来我将翻译(https://vulkan-tutorial.com)上的Vulkan教程。这可能是我学习Vulkan的最好方式,但不是最理想的方式。
我会用“driver(驱动程序)”这样的方式翻译某些关键词语,在后续的文字中,则只使用英文。这可以减少歧义,且使译文易读。
Introduction 入门
About 关于
This tutorial will teach you the basics of using the Vulkan graphics and compute API. Vulkan is a new API by the Khronos group (known for OpenGL) that provides a much better abstraction of modern graphics cards. This new interface allows you to better describe what your application intends to do, which can lead to better performance and less surprising driver behavior compared to existing APIs like OpenGL and Direct3D. The ideas behind Vulkan are similar to those of Direct3D 12 and Metal, but Vulkan has the advantage of being fully cross-platform and allows you to develop for Windows, Linux and Android at the same time.
本教程讲授Vulkan图形和计算API的基本使用。Vulkan是Khronos委员会(他们也是维护OpenGL的那帮人)提出的新的API,它提供了对现代图形卡的更好的抽象描述。这个新的接口,允许你更好地描述你的app想做的事。与已有的API(比如OpenGL和Direct3D)相比,这可以带来更好的性能,可以减少driver的意外行为。Vulkan背后的思想与Direct3D 12和Metal相似,但是Vulkan有跨平台的优势,允许你同时为Windows、Linux和Android开发。
However, the price you pay for these benefits is that you have to work with a significantly more verbose API. Every detail related to the graphics API needs to be set up from scratch by your application, including initial frame buffer creation and memory management for objects like buffers and texture images. The graphics driver will do a lot less hand holding, which means that you will have to do more work in your application to ensure correct behavior.
但是,为了得到这些好处,你需要付出的代价是,你不得不用冗长得多的API来工作。与图形API相关的每个细节,都需要在你的app中从零开始设置好。这包括:初始化帧缓存,对对象(例如buffer(缓存)和texture image(纹理图像))的内存管理。图形driver的握手行为会少很多,这意味着你不得不在你的app里做更多工作,以确保(driver的)正确行为。
The takeaway message here is that Vulkan is not for everyone. It is targeted at programmers who are enthusiastic about high performance computer graphics, and are willing to put some work in. If you are more interested in game development, rather than computer graphics, then you may wish to stick to OpenGL or Direct3D, which will not be deprecated in favor of Vulkan anytime soon. Another alternative is to use an engine like Unreal Engine or Unity, which will be able to use Vulkan while exposing a much higher level API to you.
在此得到的结论是,Vulkan不是给所有人的。它的目标人群是狂热的且愿意为之潜心工作的高性能计算机图形程序员。如果你对游戏开发(而不是计算机图形)更感兴趣,那么你可能希望用OpenGL或Direct3D,它们不会为了支持Vulkan而很快被废弃。另一个选择是使用引擎(例如Unreal或Unity),它们将能使用Vulkan,且对你暴露高级得多的API。
With that out of the way, let's cover some prerequisites for following this tutorial:
- A graphics card and driver compatible with Vulkan (NVIDIA, AMD, Intel)
- Experience with C++ (familiarity with RAII, initializer lists)
- A compiler compatible with C++11 (Visual Studio 2013+, GCC 4.8+)
- Some existing experience with 3D computer graphics
把上述事情放在一边,我们来介绍一些后续教程需要的先决条件:
- 一个图形卡和兼容Vulkan的driver(NVIDIA、AMD、Intel)
- 使用C++的经验(熟悉RAII,初始化list)
- 兼容C++11的编译器(Visual Studio 2013以上,GCC 4.8以上)
- 3D计算机图形的一些经验
This tutorial will not assume knowledge of OpenGL or Direct3D concepts, but it does require you to know the basics of 3D computer graphics. It will not explain the math behind perspective projection, for example. See this online book for a great introduction of computer graphics concepts. Some other great computer graphics resources are:
- Ray tracing in one weekend
- Physically Based Rendering book
- Vulkan being used in a real engine in the open-source Quake and DOOM 3
本教程不要求读者知道OpenGL或Direct3D里的概念,但要求读者知道3D计算机图形基础知识。例如,本教程不会解释透视投影背后的数学。你可以参考这个不错的在线书来学计算机图形概念入门知识。其他一些不错的计算机图形学习资源有:
- 光线追踪一周末搞定
- 基于物理的渲染
- 用在真实引擎里的开源项目Quake和DOOM 3里的Vulkan
You can use C instead of C++ if you want, but you will have to use a different linear algebra library and you will be on your own in terms of code structuring. We will use C++ features like classes and RAII to organize logic and resource lifetimes. There is also an alternative version of this tutorial available for Rust developers.
如果你喜欢,你可以用C代替C++,但是你将不得不用其他的线性代数库,且自己负责代码结构问题。我们将使用C++的特性(例如类和RAII)来组织逻辑和资源的生命周期。本教程还有一个给Rust开发者的版本。
To make it easier to follow along for developers using other programming languages, and to get some experience with the base API we'll be using the original C API to work with Vulkan. If you are using C++, however, you may prefer using the newer Vulkan-Hpp bindings that abstract some of the dirty work and help prevent certain classes of errors.
为了让使用其他编程语言的开发者更容易跟进,也为了体验基础API,我们将使用原始C语言API来编写Vulkan程序。但如果你用C++,你可能更喜欢这个更新的Vulkan-Hpp绑定,它搞定了一些烦人的工作,有助于避免某些错误。
E-book 电子书
If you prefer to read this tutorial as an e-book, then you can download an EPUB or PDF version here:
如果你更喜欢以电子书的形式阅读本教程,你可以下载EPUB或PDF版本:
Tutorial structure 教程结构
We'll start with an overview of how Vulkan works and the work we'll have to do to get the first triangle on the screen. The purpose of all the smaller steps will make more sense after you've understood their basic role in the whole picture. Next, we'll set up the development environment with the Vulkan SDK, the GLM library for linear algebra operations and GLFW for window creation. The tutorial will cover how to set these up on Windows with Visual Studio, and on Ubuntu Linux with GCC.
首先,我们将大概看一看,Vulkan是如何工作的,如何在屏幕上显示第一个三角形。等你理解了每个小步骤在全局的作用,它们就显得有道理了。然后,我们将配置开发环境,包括Vulkan SDK,用于线性代数操作的GLM库和用于创建窗口的GLFW。本教程会介绍如何在Windows上用Visual Studio做这些,也会介绍如何在Ubuntu Linux上用GCC做这些。
After that we'll implement all of the basic components of a Vulkan program that are necessary to render your first triangle. Each chapter will follow roughly the following structure:
- Introduce a new concept and its purpose
- Use all of the relevant API calls to integrate it into your program
- Abstract parts of it into helper functions
之后,我们将实现Vulkan程序的所有基础组件,用以渲染你的第一个三角形。每一章的基本结构如下:
- 介绍新概念及其目的
- 使用相关API,将其集成到你的程序
- 将其提取封装到辅助函数
Although each chapter is written as a follow-up on the previous one, it is also possible to read the chapters as standalone articles introducing a certain Vulkan feature. That means that the site is also useful as a reference. All of the Vulkan functions and types are linked to the specification, so you can click them to learn more. Vulkan is a very new API, so there may be some shortcomings in the specification itself. You are encouraged to submit feedback to this Khronos repository.
虽然每一章都是作为上一章的续集,读者仍可将其视作单独介绍某个Vulkan特性的文章。也就是说,本网站也当作参考文献来用。说明书中有所有的Vulkan函数和类型,你可以点击链接来了解更多。Vulkan是个很新的API,所以说明书中可能有一些不足。欢迎读者在这个Khronos仓库提交反馈。
As mentioned before, the Vulkan API has a rather verbose API with many parameters to give you maximum control over the graphics hardware. This causes basic operations like creating a texture to take a lot of steps that have to be repeated every time. Therefore we'll be creating our own collection of helper functions throughout the tutorial.
如前所述,Vulkan API十分冗长,参数很多,这给了你对图形硬件的最大控制权力。这导致每次创建纹理都要走很多步骤。因此本教程中我们将创建一些我们自己的辅助函数。
Every chapter will also conclude with a link to the full code listing up to that point. You can refer to it if you have any doubts about the structure of the code, or if you're dealing with a bug and want to compare. All of the code files have been tested on graphics cards from multiple vendors to verify correctness. Each chapter also has a comment section at the end where you can ask any questions that are relevant to the specific subject matter. Please specify your platform, driver version, source code, expected behavior and actual behavior to help us help you.
每章结尾都会给个链接,展示本章的完整代码。如果你对代码结构有疑问,或者你在处理bug,想找个对比,可以参考它。所有的代码文件都已经在多个厂商的图形卡上测试过,以验证其正确性。每章也有评论区,你可以就相关问题提问。请说明你的平台,驱动版本,源代码,期望的行为和实际的行为,好利于我们帮助你。
This tutorial is intended to be a community effort. Vulkan is still a very new API and best practices have not really been established yet. If you have any type of feedback on the tutorial and site itself, then please don't hesitate to submit an issue or pull request to the GitHub repository. You can watch the repository to be notified of updates to the tutorial.
本教程打算成为一个社区的尝试。Vulkan还是个很新的API,最佳实践还没有被发布出来。如果你对本教程或网站本身有任何反馈,请不要犹豫,在Github仓库提交issue或pull request就好。你可以watch这个仓库,这样就会收到本教程的更新。
After you've gone through the ritual of drawing your very first Vulkan powered triangle onscreen, we'll start expanding the program to include linear transformations, textures and 3D models.
在你按惯例经历了在屏幕上用Vulkan绘制你的第一个三角形后,我们将开始扩展这个程序,纳入线性变换,纹理和3D模型。
If you've played with graphics APIs before, then you'll know that there can be a lot of steps until the first geometry shows up on the screen. There are many of these initial steps in Vulkan, but you'll see that each of the individual steps is easy to understand and does not feel redundant. It's also important to keep in mind that once you have that boring looking triangle, drawing fully textured 3D models does not take that much extra work, and each step beyond that point is much more rewarding.
如果你之前玩过图形API,你会知道在第一个几何体显示到屏幕上之前,会有很多个步骤。Vulkan中有很多这样的初始化步骤,但你会看到,每个步骤都很容易理解,也不冗长。要记住重要的一点是,一旦你得到了那个无趣的三角形,渲染有纹理的3D模型就不需要很多其他工作了,而且之后的每一步都会很令人期待。
If you encounter any problems while following the tutorial, then first check the FAQ to see if your problem and its solution is already listed there. If you are still stuck after that, then feel free to ask for help in the comment section of the closest related chapter.
如果你在学习本教程时遇到任何问题,请先看看FAQ里是不是已经有了相应的问题和答案了。如果还是没有解决,请在相关章节的评论区大胆提问。
Ready to dive into the future of high performance graphics APIs? Let's go!
准备好深入未来的高性能图形API了?出发!
- Next
- 下一章
[译]Vulkan教程(01)入门的更多相关文章
- [译]Vulkan教程(12)图形管道基础之入门
[译]Vulkan教程(12)图形管道基础之入门 Introduction 入门 Over the course of the next few chapters we'll be setting u ...
- [译]Vulkan教程(33)多重采样
[译]Vulkan教程(33)多重采样 Multisampling 多重采样 Introduction 入门 Our program can now load multiple levels of d ...
- [译]Vulkan教程(32)生成mipmap
[译]Vulkan教程(32)生成mipmap Generating Mipmaps 生成mipmap Introduction 入门 Our program can now load and ren ...
- [译]Vulkan教程(31)加载模型
[译]Vulkan教程(31)加载模型 Loading models 加载模型 Introduction 入门 Your program is now ready to render textured ...
- [译]Vulkan教程(30)深度缓存
[译]Vulkan教程(30)深度缓存 Depth buffering 深度缓存 Introduction 入门 The geometry we've worked with so far is pr ...
- [译]Vulkan教程(29)组合的Image采样器
[译]Vulkan教程(29)组合的Image采样器 Combined image sampler 组合的image采样器 Introduction 入门 We looked at descripto ...
- [译]Vulkan教程(27)Image
[译]Vulkan教程(27)Image Images Introduction 入门 The geometry has been colored using per-vertex colors so ...
- [译]Vulkan教程(26)描述符池和set
[译]Vulkan教程(26)描述符池和set Descriptor pool and sets 描述符池和set Introduction 入门 The descriptor layout from ...
- [译]Vulkan教程(25)描述符布局和buffer
[译]Vulkan教程(25)描述符布局和buffer Descriptor layout and buffer 描述符布局和buffer Introduction 入门 We're now able ...
随机推荐
- 大数据学习笔记——HDFS写入过程源码分析(1)
HDFS写入过程方法调用逻辑 & 源码注释解读 前一篇介绍HDFS模块的博客中,我们重点从实践角度介绍了各种API如何使用以及IDEA的基本安装和配置步骤,而从这一篇开始,将会正式整理HDFS ...
- Linux常见指令大全
转载自https://www.cnblogs.com/caozy/p/9261224.html 前言 本文特点 授之以渔:了解命令学习方法.用途:不再死记硬背,拒绝漫无目的: 准确无误:所有命令执行通 ...
- mysql统计天、周、月、季度、半年、年
之前在网上搜索按时间统计,发现不是很全 ,接着别人的思路进行延伸下, mysql统计天.周.月.季度.半年.年 前期工作创建辅助表 CREATE TABLE num (i INT); ),(),(), ...
- STT-MRMA技术优点
到目前为止,设计人员可以使用的存储技术是易变的,这意味着在断电后,存储器中的数据内容会丢失.但是,随着Everspin Technologies推出256Mb STT-MRAM,系统现在可以拥有像DR ...
- 在 C# 中使用变量
目录 变量的声明 数据类型 变量的赋值 变量的使用 总结 程序离不开数据.把数字.字母和文字输入计算机,就是希望它利用这些数据完成某些任务.例如,需要计算双十一怎么买才最省钱或者显示购物车里面的商品列 ...
- Dubbo环境搭建-ZooKeeper注册中心
场景 Dubbo简介与基本概念: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103555224 注: 博客: https:// ...
- JS---案例:点击按钮设置div背景色渐变
案例:点击按钮设置div背景色渐变 背景色渐变:设置透明度 <div id="dv"></div> <input type="button& ...
- 渗透测试初学者的靶场实战 2--墨者学院SQL注入—报错盲注
墨者SQL注入-MYSQL数据库实战环境 实践步骤 1. 决断注入点 输入单引号,提示错误信息: 输入and 1=1 返回页面正常: 输入 and 1=2 返回正常 输入-1,返回异常: 2. 带入s ...
- Android App内文档展示方案整理
一.Word.Excel.PPT 展示 1. 微软Office公开Api接口 如果文档内容不是很机密或者只是需要实现预览文档的话,可以考虑使用微软的公共Api接口实现. 微软Office公开Api地址 ...
- 面试连环炮系列(十一):说说你们的分布式ID设计方案
说说你们的分布式ID设计方案 我们采用Snowflake算法,生成一个64bit的数字,64bit被划分成多个段,分别表示时间戳.机器编码.序号. 41位的时间序列(精确到毫秒,41位的长度可以使用6 ...