世界微头条丨Hello Vulkan(二)| 图形渲染新技术Vulkan Drawing
2023-01-17 15:09:08    哔哩哔哩

回顾 


(相关资料图)

上一期技术分享中,已经讲述了关于Vulkan的前世今生,以及和OpenGL相比的不同点也放出第一个Vulkan的sample工程以供大家学习使用。当然,如果在学习过程中有任何问题,可以随时留言给我们,也欢迎大家移步至我们刚上线的开发者社区中交流和分享。

这一期将会给大家带来关于Vulkan基础的图形绘制方面内容,如何使用Vulkan绘制一些基础图形,以及渲染流程又是什么样的?

Vulkan图形拓扑 – 图元装配描述

图元装配描述,即对输入的顶点,到底构成什么图形,比如直线、三角形等,进行设置。介绍下Vulkan支持的主要图形拓扑:

VK_PRIMITIVE_TOPOLOGY_POINT_LIST: 点集VK_PRIMITIVE_TOPOLOGY_LINE_LIST: 线集VK_PRIMITIVE_TOPOLOGY_LINE_STRIP: 连续线VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST:三角形集合VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP:连续三角形

VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP:呈扇形的三角形集合

Typedef enum VkPrimitiveTopology

{

VK_PRIMITIVE_TOPOLOGY_POINT_LIST

VK_PRIMITIVE_TOPOLOGY_LINE_LIST

VK_PRIMITIVE_TOPOLOGY_LINE_STRIP

VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST

VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY

VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY

VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY

VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY

VK_PRIMITIVE_TOPOLOGY_PATCH_LIST

} VkPrimitiveTopology;

观察下对于VkPrimitiveTopology的类型定义,不难看出,其实和OpenGL类似,出入并不是很大。

顶点描述模块

还记得上一期最后放出来的Vulkan渲染管线Pipeline吗?不记得的话,我们再看一遍。

在每条Pipeline,需要确定本条管线接收怎样的模型顶点数据。我们以绘制一个正方体为例:

首先我们对正方体顶点进行从0-7编号,参考如下代码: 

我们剖析下Sample里这段代码,对于vertex #0,第一行的{ -1., -1., -1. },是v0的position,也就是x坐标是-1,y坐标是-1,z坐标是-1。第二行的{  0.,  0., -1. },是表面normal向量,表明了指向正方体的背面。第三行的{  0.,  0.,  0. },是颜色,表示颜色是黑色的。最后一行的{  1., 0. },代表的则是纹理坐标,即S-T坐标,S等于1,T等于0。依次可以类推vertex #2和vertex#3,并且v0、v2、v3一起组成了三角形0-2-3,也就是组成正方体6个面的12个三角形之一,只需要告诉系统运用三角形的图型拓扑即可。这些数据会以流的形式按顺序进行排列,并告诉着色器shader,那么如何让shader也能知道我们在这里定义的vertex结构体里position、normal、color、texCoord的顺序的呢?这个后续会讲述,这里我们只需要知道顶点流的一个流程即可。 

GPU装载

因为调用的是三角形的图元拓扑,所以Vulkan每次抓取单位是3。这就是绘制的过程,这些结构体数组的数据流会被送入Vulkan,如果我们把它们都装入CPU内存,

就会造成极大的浪费,所以我们装入GPU内存,那我们如何实现呢?

参考下面的方法:

绘制

以上这个过程就是创建databuffer的过程。这里我们要确保我们在shader中数据格式完全匹配我们在CPU里期初定义的:

调用下面代码进行顶点绑定,以及告诉Command Buffer绘制哪些顶点进行绘制:

到这儿我们就绘制出一个带有不同颜色顶点的立方体:

加上纹理映射后的效果:

其实这一期关于Vulkan绘制的内容,大多是对之前放出的Sample工程的详细讲解,从顶义,到创建GPU内存,到绘制等步骤,这些确实是非常枯燥,但是对于想学习Vulkan后续教程是必不可缺的一部分。

欢迎大家关注虹图AI开放平台公众号,后台留言交流,也欢迎大家移步至我们刚上线的开发者社区中交流和分享。

关于Vulkan以及shader相关的实践内容,我们会在本系列后续内容中继续与大家分享。(虹图人像人体中美颜SDK部分是基于Vulkan进行开发封装的,性能极致,对开发者更加友好,十行之内完成一个简单的demo,点击【阅读原文】可查看详情。)

敬请期待~

关键词: VULKAN SHADER OPENGL SAMPLE 技术分享 必不可缺

下一篇:
上一篇:

世界微头条丨Hello Vulkan(二)| 图形渲染新技术Vulkan Drawing

支持太阳能光伏业务 与光伏企业共度难关

现场直击!湖南各地纪检监察机关纷纷出动 严查节前“四风”问题

环球信息:赫美集团:子公司惠州浩宁达科技有限公司主营研发生产电工仪器仪表等

大众/华友合作退役电池梯次市场应用|观点

当前动态:2023春节期间曲阜三孔还需要预约吗?

德美化工:连续3日融资净偿还累计493.63万元(01-13):实时焦点

NBA历史地位前十巨星:詹姆斯真能排第二吗?库里配得上前十吗?

大一到大四能有多离谱,学生晒颜值变化判若两人,连亲妈也认不出

【环球速看料】世界第一座价值12亿的大佛“凉了”?游客:拜不起

【手慢无】真香!读速4800MB/s的2TB M.2固态硬盘低至673元包邮

热议:干货 | AI算法透明性实现与评估

韩国梨泰院踩踏事故调查结束:23名公务员被移交检方 6人被捕

今日白银最新报价(2023年1月13日)-环球热头条

全球即时看!天坛生物:1月12日融券卖出金额183.98万元,占当日流出金额的1.91%

中国集邮回应兔年邮票脱销:正紧急调拨

微软已停止支持Windows 8.1/7,同时2025年也将停止支持Windows 10 全球播资讯

深圳市第七高级中学招聘宣传专员1名:环球观热点

会宁乡村产业绘出幸福好光景

信用卡逾期了是不是可以协商

供应商货源差哪了,为何别人爆单你陪跑?

罗曼股份(605289.SH):主营不涉及新能源汽车业务

卡卡贷贷款逾期19年拖欠多久上征信系统:环球今亮点

又一个雨季的唯美句子(精选199句)-环球即时

安恒信息:公司拟回购不超过66.67万股公司股份:看点

强化服务 确保农户卖“明白粮 舒心粮”

环球速讯:2022年农村宅基地回收补偿吗

还呗逾期还款后会不会上征信

私人借款两分利怎样写借条?

小区要求返乡报备是否“阳过”?“可能违法”

【全球时快讯】2022年楼市回顾:成交规模缩回7年前 百城新房价格7年来首跌

【环球时快讯】绿电概念股早盘逆市走高,截至发稿,大唐新能源(01798.HK)涨6.18%,报2.75港元

今日热文:满易贷贷款逾期8年还不起会上征信系统吗

深圳外国语小学:爸爸妈妈进课堂,讲述社会大百科

天天头条:河南新冠病毒感染率近九成 专家谈重症高峰将持续多久

世界最资讯丨谁会用抖音桌面端聊天软件?