Vulkan再探(11):立方体贴图数组

2023-11-19

08/20/2020

立方体贴图数组

创建纹理贴图

//提取信息
cubeMapArray.width = ktxTexture->baseWidth;
cubeMapArray.height = ktxTexture->baseHeight;
cubeMapArray.mipLevels = ktxTexture->numLevels;
cubeMapArray.layerCount = ktxTexture->numLayers;

图像

立方体自带六个面

// Cube faces count as array layers in Vulkan
imageCreateInfo.arrayLayers = 6 * cubeMapArray.layerCount;
// This flag is required for cube map images
imageCreateInfo.flags = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT;

拷贝区域

/*
	We now copy the parts that make up the cube map array to our image via a command buffer
	Cube map arrays in ktx are stored with a layout like this:
	- Mip Level 0
		- Layer 0 (= Cube map 0)
			- Face +X
			- Face -X
			- Face +Y
			- Face -Y
			- Face +Z
			- Face -Z
		- Layer 1 (= Cube map 1)
			- Face +X
			...
	- Mip Level 1
		- Layer 0 (= Cube map 0)
			- Face +X
			...
		- Layer 1 (= Cube map 1)
			- Face +X
			...
*/

// Setup buffer copy regions for each face including all of its miplevels
std::vector<VkBufferImageCopy> bufferCopyRegions;
uint32_t offset = 0;
for (uint32_t face = 0; face < 6; face++) {
	for (uint32_t layer = 0; layer < ktxTexture->numLayers; layer++) {
		for (uint32_t level = 0; level < ktxTexture->numLevels; level++) {
			ktx_size_t offset;
			KTX_error_code ret = ktxTexture_GetImageOffset(ktxTexture, level, layer, face, &offset);
			assert(ret == KTX_SUCCESS);
			VkBufferImageCopy bufferCopyRegion = {};
			bufferCopyRegion.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
			bufferCopyRegion.imageSubresource.mipLevel = level;
			bufferCopyRegion.imageSubresource.baseArrayLayer = layer * 6 + face;
			bufferCopyRegion.imageSubresource.layerCount = 1;
			bufferCopyRegion.imageExtent.width = ktxTexture->baseWidth >> level;
			bufferCopyRegion.imageExtent.height = ktxTexture->baseHeight >> level;
			bufferCopyRegion.imageExtent.depth = 1;
			bufferCopyRegion.bufferOffset = offset;
			bufferCopyRegions.push_back(bufferCopyRegion);
		}
	}
}

图像视图

// Create the image view for a cube map array
VkImageViewCreateInfo view = vks::initializers::imageViewCreateInfo();
view.viewType = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY;
view.format = format;
view.components = { VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_A };
view.subresourceRange = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 };
view.subresourceRange.layerCount = 6 * cubeMapArray.layerCount;
view.subresourceRange.levelCount = cubeMapArray.mipLevels;
view.image = cubeMapArray.image;
VK_CHECK_RESULT(vkCreateImageView(device, &view, nullptr, &cubeMapArray.view));

着色器

片元着色器

#version 450

layout (binding = 1) uniform samplerCubeArray samplerCubeMapArray;

layout (binding = 0) uniform UBO
{
	mat4 projection;
	mat4 model;
	mat4 invModel;
	float lodBias;
	int cubeMapIndex;
} ubo;

layout (location = 0) in vec3 inUVW;

layout (location = 0) out vec4 outFragColor;

void main() 
{
	outFragColor = textureLod(samplerCubeMapArray, vec4(inUVW, ubo.cubeMapIndex), ubo.lodBias);
}
  • 立方体数组
  • 采样器需要知道采样的数组下标
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vulkan再探(11):立方体贴图数组 的相关文章

  • Vulkan中renderpass、subpass、dependency的见解

    在Vulkan中 xff0c 渲染通道 Render Pass 是一个描述渲染过程中使用的附件的对象 xff0c 可以包含多个 subpass 和附件依赖关系 假设我们需要创建一个render pass xff0c 它包含2个附件 1个子通
  • Vulkan SDK 中的 demo 编译配置 win10 vs2019

    一 下载安装 开始可以简装 然后在打开maintenancetool exe进一步安装其他部件 下载安装 Vulkan SDK Vulkan SDK What s in the SDK Where to Download 会在安装目录中找到
  • Vulkan入门精要

    Vulkan入门精要 fuxiii github io https fuxiii github io Essentials of Vulkan
  • Vulkan学习(一):Vulkan环境搭建(Windows)&官方教程--(Base code & Instance & Validation layers)

    目录 前言 Vulkan相关资源地址 Vulkan安装 Vulkan教程环境相关 Vulkan 示例相关 Vulkan教程学习笔记 Vulkan程序的基本结构 initWindow GLFW initVulkan mainLoop clea
  • Vulkan入门(一)-环境配置.md

    文章目录 参考资料 简述 一 准备环境 1 1 开发环境 1 2 下载 SDK 1 3 安装SDK 1 4 安装驱动 1 5 运行示例程序 二 GLFW 安装 三 GLM 安装 四 手动编译示例代码 4 1 在编译示例代码的时候老是报错 找
  • 从Gles、Vulkan到Metal(一)-- 数据和提交

    无论以任何形式本篇文章内容 请注明来自leonnwei的csdn blog 引言 一直想整理下关于移动端图形编程API的文档 图形API为何重要 如果说图形编程的内功是计算机图形学的诸原理和算法 那么外功就是实实在在的硬件API 不能精通A
  • Vulkan开发环境配置 Win10+VS2019

    官方的环境配置教程 https vulkan tutorial com Development environment 一 下载SKD 进入官网 https vulkan lunarg com 由于是windows下进行开发 所以选择win
  • Vulkan教程翻译之十 创建 Descriptor Set

    原文链接 https vulkan lunarg com doc sdk 1 2 131 2 windows tutorial html 09 init descriptor set html 创建 Descriptor Set 这一章节的
  • Vulkan再探(11):立方体贴图数组

    08 20 2020 文章目录 立方体贴图数组 创建纹理贴图 图像 拷贝区域 图像视图 着色器 片元着色器 立方体贴图数组 创建纹理贴图 提取信息 cubeMapArray width ktxTexture gt baseWidth cub
  • Vulkan再探(7):纹理贴图

    08 20 2020 文章目录 纹理贴图 Texture Mapping 纹理属性 加载图片 临时缓冲区储存图片信息 生成贴图等级 生成图像和存储空间 难点 传输数据 图解 拷贝缓冲区到图像 创建采样器 创建图像视图 创建组合图像采样器描述
  • Vulkan 绘制显示设计

    背景 众所周知 Vulkan是个跨平台的图形渲染API 为了友好地支持跨平台 Vulkan自然也抽象出了很多接口层去对接各个操作系统 抹平系统间的差异 Swap Chains即为WSI 其本质上是一种图像队列 此队列会按顺序依次将队列中的若
  • 着色器中包围体层次结构的遍历

    我正在使用 vulkan 计算着色器开发路径跟踪器 我实现了一棵树代表包围体层次结构 BVH 的想法是最大限度地减少需要执行光线相交测试的对象数量 1 简单的实施 我的第一个实现非常快 它遍历树到singleBVH 树的叶子 然而 射线可能
  • Wat 执行“vkCreateSwapchainKHR:内部可绘制对象创建失败”。方法

    我总是卡在交换链的创建上 我不知道为什么 我启用了验证层 我得到的最好的答案是 vkCreateSwapchainKHR 内部绘图创建失败 我有一张 Nvidia GTX960 卡 我在它上面运行了一些 vulkan 样本 所以它必须支持
  • 如何使 VK_LAYER_KHRONOS_validation 可用?

    解决方案 卸载 vulkan 在注册表 HKLM SOFTWARE Khronos Vulkan ExplicitLayers 和 HKLM SOFTWARE WOW6432Node Khronos Vulkan ExplicitLayer
  • Vulkan 的 VkMemoryHeapFlagBits 是否缺少值?

    在 Vulkan 规范 1 0 9 第 180 页 中 我们有以下内容 typedef struct VkMemoryHeap VkDeviceSize size VkMemoryHeapFlags flags VkMemoryHeap 和
  • 了解 Vulkan 统一布局的“集合”索引

    我一直在关注 非常棒的 nvpro 光线追踪教程 并且对使用 CameraProperties 统一缓冲区的绑定方式有疑问layout binding 0 set 1 我理解绑定 0 但为什么设置 1 教程中说 set 1来自以下事实 它是
  • 有没有一种方法可以在不使用暂存缓冲区的情况下更新纹理?

    我正在与https vulkan tutorial com https vulkan tutorial com 深度缓冲代码作为基础 进行了一些更改以每帧更新命令缓冲区 我正在使用一种粗略的方法来检查 fps 不确定它到底有多准确 但我正在
  • Vulkan 内存对齐要求

    我正在为 Vulkan 设备内存实现一个简单的内存管理器 并希望确保我了解内存的对齐要求以及如何满足这些要求 因此 假设我使用 vkAllocateMemory 分配了一个内存 池 并希望将该池中的内存块子分配给各个资源 基于 VkMemo
  • Vulkan 管道顶部/底部和 ALL_COMMANDS

    作为很多 初学者 我认为使用 TOP OF PIPELINE 作为 dst 和 BOTTOM OF PIPELINE 作为 src 意味着两者的 ALL COMMANDS Here https github com KhronosGroup
  • 在 Vulkan 中,图形队列系列与当前队列系列分离是否有益?

    据我所知 队列系列可能支持呈现到屏幕但不支持图形 假设我有一个同时支持图形和呈现的队列系列 以及另一个仅支持呈现的队列系列 我应该为两个进程使用第一个队列系列 还是应该将第一个队列系列委托给图形 将后者委托给呈现 或者这两种方法之间没有明显

随机推荐

  • java中$_学习笔记-Java中的$符

    JavaEE中 符号出现在两个地方 一个是前端jQuery中的 一个是后端JSP中的EL表达式 一 中放不同的东西代表不同的含义 1 function 表示文档加载完成后执行函数 Javascript是一种动态脚本语言 用来修饰HTML标签
  • Flex布局详细介绍

    flex布局 1 概念 Flex是Flexible Box的缩写 意为 弹性布局 用来为盒状模型提供最大的灵活性 1 1任何一个容器都可以指定为Flex布局 box display flex 1 2行内元素也可以使用Flex布局 box d
  • python scrapy爬取网站数据(一)

    框架介绍 scrapy中文文档 scrapy是用python实现的一个框架 用于爬取网站数据 使用了twisted异步网络框架 可以加快下载的速度 scrapy的架构图 可以看到主要包括scheduler Downloader Spider
  • 【SSH网上商城项目实战20】在线支付平台的介绍

    之前已经完成了首页的显示 用户添加购物车 确认订单等功能 下面就是支付功能的开发了 用户确认了订单后会直接跳转到支付页面进行在线支付 在线支付需要第三方的接口 这一节主要介绍一些关于第三方支付的内容 从下一节开始 我们真正开发在线支付模块
  • 手把手教你使用Python网络爬虫获取基金信息

    一 前言 前几天有个粉丝找我获取基金信息 这里拿出来分享一下 感兴趣的小伙伴们 也可以积极尝试 二 数据获取 这里我们的目标网站是某基金官网 需要抓取的数据如下图所示 可以看到上图中基金代码那一列 有不同的数字 随机点击一个 可以进入到基金
  • 浅析项目失败的原因

    在我们的工作和日常生活中 充斥着各种各样的项目 软件开发也好 工地建设也罢 都是由一个个项目的形式构成的 然而在所有这些项目中 往往是失败的比较多 成功者寥寥 这是为什么呢 为什么一个项目会失败 如何才能提高这个项目的成功概率 我认为这是很
  • 学习日记——MQTT-FX操作说明

    MQTT FX背景 我们的设备 在连接MQTT服务端之前 建议先使用MQTT FX客户端连接MQTT服务端 来检测MQTT服务端的工作状态 MQTT通信时各项参数的正确性 网络连接是否正常 MQTT客户端软件本身就集成了MQTT协议 我们只
  • [C] 跨平台使用Intrinsic函数范例3——使用MMX、SSE2指令集 处理 32位整数数组求和

    作者 zyl910 本文面对对SSE等SIMD指令集有一定基础的读者 以32位整数数组求和为例演示了如何跨平台使用MMX SSE2指令集 支持vc gcc编译器 在Windows Linux Mac这三大平台上成功运行 一 关键讲解 前文
  • Jenkins构建接口自动化

    基于httprunner 2 x的分层设计 通过python pytest allure搭建接口自动化框架实战 在集成到jenkins时 发现接口断言失败的时候 jenkins构建结果仍然是成功 这是因为jenkins构建时 只管执行的文件
  • tomcat下载、乱码、端口号那些事

    注 友友们 仅供参考 下面都是本人实操过的心得 主要是为了做下笔记 也给大家参考一下 有问题欢迎交流和指正 一起升级打怪 一 tomcat下载 tomcat官网下载路径 https tomcat apache org 也可一步到位 1 官网
  • Vuforia Virtual Button(虚拟按钮)使用技巧

    最近一直在摸索Vuforia的使用 Virtual Button算是一个比较容易吸引人眼球的功能 在经过一些测试后 我来总结下自己在探索过程中得到的一些经验 1 如何新建一个Virtual Button工程 导入Vuforia sdk 后把
  • gcd补充说明

    1 下面来看下如何使用gcd编程的异步 dispatch async dispatch get global queue 0 0 处理耗时操作的代码块 通知主线程刷新 dispatch async dispatch get main que
  • 字节跳动Android面试凉凉,挥泪整理面筋,你不看看吗?

    想在金九银十找工作的现在可以开始准备了 这边给大家分享一下面试会遇到的问题 找工作还是需要大家不要担心 由于我们干这一行的接触人本来就不多 难免看到面试官会紧张 主要是因为怕面试官问的答不上来 答不上了千万不要胡扯一些 有了这篇文章 就不一
  • pickle模块

    pickle 提供四个功能分别是dumps loads dump load pickle是将数据以二进制的形式序列化后保存到文件中的 pickle可以储存的数据类型 必须是python中有的 布尔值 整数 浮点数 复数 字符串 字节 Non
  • java.lang.NoClassDefFoundError类错误解决方法

    在开发maven项目时 在完成代码编写后进行本地测试过程中经常会出现如下错误 java lang NoClassDefFoundError Could not initialize class xxx 当看到java lang NoClas
  • 一文彻底弄懂Linux软链接与硬链接,及其实际应用技巧

    本文参考 01 https blog csdn net weixin 33743703 article details 93158780 utm medium distribute pc relevant none task blog Bl
  • 解决idea maven reimport失效问题

    解决idea maven 项目中出现 Unable to import maven project 问题 最近自己搭建了一个项目 maven setting 仓库配置也使用了阿里云配置 maven版本使用的是目前最新版3 6 2 后来发现
  • win11怎么取消pin码实现自动登陆 windows11取消pin码自动登陆的方法步骤

    相信有不少用户最近都安装升级了最新的Win11操作系统 但是安装了之后发现自己的电脑每次开机都必须输入PIN码才可以登陆使用 而每次开机都出现这种情况就非常的麻烦 今天小编就带着的大家一起看看取消PIN码实现自动登陆电脑的方法吧 更多win
  • 力扣笔记(每日随机一题)——最佳买卖股票时机含冷冻期

    问题 中等 给定一个整数数组prices 其中第 prices i 表示第 i 天的股票价格 设计一个算法计算出最大利润 在满足以下约束条件下 你可以尽可能地完成更多的交易 多次买卖一支股票 卖出股票后 你无法在第二天买入股票 即冷冻期为
  • Vulkan再探(11):立方体贴图数组

    08 20 2020 文章目录 立方体贴图数组 创建纹理贴图 图像 拷贝区域 图像视图 着色器 片元着色器 立方体贴图数组 创建纹理贴图 提取信息 cubeMapArray width ktxTexture gt baseWidth cub