当前位置: 首页 > news >正文

Vulkan 学习(16)---- 使用 VertexBuffer

Vertex Buffer

创建一个 VertexBuffer 存储 Vertex data,代替之前在 Shader 中使用固定顶点值的做法

Vertex Shader

修改 GLSLVertexShader 如下:
注意这里指定了 input Vertex datalocation 和 格式

#version 450
layout(location = 0) in vec2 inPosition;
layout(location = 1) in vec3 inColor;layout(location = 0) out vec3 fragColor;
void main() {gl_Position = vec4(inPosition, 0.0, 1.0);fragColor = inColor;
}

Note:
Shaderlocation 用于表明 VertexData 是如何分布的, 结合输入参数传入的偏移就可以唯一的确定需要的值

Vertex Data

这里指定 Vertex data 如下:

struct Vertex {glm::vec2 pos;glm::vec3 color;
}const std::vector<Vertex> vertices = {{{-0.5f, 0.5f}, {1.0f, 0.0f, 0.0f}},{{-0.5f, -0.5f}, {0.0f, 1.0f, 0.0f}},{{0.5f, 0.5f}, {0.0f, 0.0f, 1.0f}},{{0.5f, -0.5f }, {1.0f, 0.0f, 0.0f} }
};

glm lib 的数据结构可以和 VertexShader 中的 vec2vec3 结构保持一致,
Vulkan 中的坐标系如下:
vulkan 顶点坐标

VertexInputBindingDescription

VkVertexInputBindingDescription 说明了如何加载 VertexData,包括了步长,绑定索引和加载方式等信息

  • binding:是一个索引,用于标志顶点缓冲区的绑定位置,如果有多个顶点缓冲区(比如一个存储位置数据,一个存储法线数据,就可以用不同的 bindings 进行区分
  • stride: 表示每次加载 Vertex data 的步长
  • inputRate
    VK_VERTEX_INPUT_RATE_VERTEX 表示每个顶点都加载一次数据
    VK_VERTEX_INPUT_RATE_INSTANCE 每个 instance 加载一次数据

参考实现:

static VkVertexInputBindingDescription getBindingDescription() {VkVertexInputBindingDescription bindingDescription{};// 这里的 binding 默认使用 0, 注意最后要和 vkCmdBindVertexBuffers 参数对应// vkCmdBindVertexBuffers(commandBuffer, 0, 1, vertexBuffers, offsets);bindingDescription.binding = 0;bindingDescription.stride = sizeof(Vertex);bindingDescription.inputRate = VK_VERTEX_INPUT_RATE_VERTEX;return bindingDescription;
}
VertexInputAttributeDescription

VertexInputAttributeDescription 说明了 VertexData 的处理方式,或者说是 VertexData 的顶点属性

typedef struct VkVertexInputAttributeDescription {uint32_t    location;uint32_t    binding;VkFormat    format;uint32_t    offset;
} VkVertexInputAttributeDescription;

location: 这里的 location 必须和 Vertex Shader 中的 location 匹配,每个 location 都必须创建一个 VkVertexInputAttributeDescription 结构

binding: 顶点缓冲区的索引,和前面的 InputBindingDescription 对应

format: 可以和 VertexShader 中的数据类型匹配:

//float: VK_FORMAT_R32_SFLOAT
//vec2:  VK_FORMAT_R32G32_SFLOAT
//vec3:  VK_FORMAT_R32G32B32_SFLOAT
//vec4:  VK_FORMAT_R32G32B32A32_SFLOAT
//ivec2: VK_FORMAT_R32G32_SINT
//uvec4: VK_FORMAT_R32G32B32A32_UINT
//double: VK_FORMAT_R64_SFLOAT

offset: 对应的内容在 VertexData 中的偏移

加载 BindingDescriptionAttributeDescription

BindGraphicPipeline 时,在 pVertexInputState 阶段输入 vertexInputInfo
vertexInputInfo 包含了 bindingDescriptionattributeDescriptions

VkPipelineVertexInputStateCreateInfo vertexInputInfo{};
vertexInputInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;auto bindingDescription = Vertex::getBindingDescription();
auto attributeDescriptions = Vertex::getAttributeDescriptions();vertexInputInfo.vertexBindingDescriptionCount = 1;
vertexInputInfo.vertexAttributeDescriptionCount = static_cast<uint32_t>(attributeDescriptions.size());
vertexInputInfo.pVertexBindingDescriptions = &bindingDescription;
vertexInputInfo.pVertexAttributeDescriptions = attributeDescriptions.data();// create and bind pipeline 的时候会传入这个参数 vertexInputInfo
VkGraphicsPipelineCreateInfo pipelineInfo{};
.....
pipelineInfo.pVertexInputState = &vertexInputInfo;
VertexBuffer 创建 和 绑定
void createVertexBuffer() {VkBufferCreateInfo bufferInfo{};bufferInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;bufferInfo.size = sizeof(vertices[0]) * vertices.size();bufferInfo.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;//VK_SHARING_MODE_EXCLUSIVE 设备队列独享资源,该资源一次只能被一种设备队列族中的队列访问//VK_SHARING_MODE_CONCURRENT 设备队列共享资源,该资源只能一次被多种设备队列族中的队列访问bufferInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;if (vkCreateBuffer(device, &bufferInfo, nullptr, &vertexBuffer) != VK_SUCCESS){throw std::runtime_error("failed to create vertex buffer!");}VkMemoryRequirements memRequirements;vkGetBufferMemoryRequirements(device, vertexBuffer, &memRequirements);VkMemoryAllocateInfo allocInfo{};allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;allocInfo.allocationSize = memRequirements.size;allocInfo.memoryTypeIndex = findMemoryType(memRequirements.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);if (vkAllocateMemory(device, &allocInfo, nullptr, &vertexBufferMemory) != VK_SUCCESS) {throw std::runtime_error("failed to allocate vertex buffer memory!");}vkBindBufferMemory(device, vertexBuffer, vertexBufferMemory, 0);void* data;vkMapMemory(device, vertexBufferMemory, 0, bufferInfo.size, 0, &data);memcpy(data, vertices.data(), (size_t)bufferInfo.size);vkUnmapMemory(device, vertexBufferMemory);
}

步骤如下:

  • 创建 VertexBuffer 对象,注意 usage 要使用 VK_BUFFER_USAGE_VERTEX_BUFFER_BIT
  • 获取 memRequirements, 关键是 memory 的大小和类型
  • allocate 对应类型的 memory
  • Mapmemory 并拷贝对应的顶点数据

最后在 recordCommandBuffer 的时候绑定这个 VertexBuffer 就行

vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipeline);VkBuffer vertexBuffers[] = { vertexBuffer };
VkDeviceSize offsets[] = { 0 };
vkCmdBindVertexBuffers(commandBuffer, 0, 1, vertexBuffers, offsets);
vkCmdDraw(commandBuffer, static_cast<uint32_t>(vertices.size()), 1, 0, 0);

相关文章:

Vulkan 学习(16)---- 使用 VertexBuffer

Vertex Buffer 创建一个 VertexBuffer 存储 Vertex data&#xff0c;代替之前在 Shader 中使用固定顶点值的做法 Vertex Shader 修改 GLSL 的 VertexShader 如下: 注意这里指定了 input Vertex data 的 location 和 格式 #version 450 layout(location 0) in vec2 inPosit…...

论文阅读 2024 arxiv Comprehensive Assessment of Jailbreak Attacks Against LLMs

总目录 大模型安全相关研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 Comprehensive Assessment of Jailbreak Attacks Against LLMs https://arxiv.org/pdf/2402.05668 https://www.doubao.com/chat/4015423571416834 速览 这篇论文是关于大…...

SIFT特征点检测

刚看完了SIFT特征点检测的原理&#xff0c;阅读的是两篇csdn博客&#xff0c;一个全面和一个最全面&#xff0c;不得不说&#xff0c;你俩写的都很全面&#xff0c;这么用心奉献知识的博主是全人类的财富。 现在用我这张笨拙的嘴先说一下我理解的流程 首先先将图像扩大一倍&a…...

开源模型应用落地-qwen模型小试-Qwen3-8B-快速体验-pipeline方式(二)

一、前言 阿里云最新推出的 Qwen3-8B 大语言模型,作为国内首个集成“快思考”与“慢思考”能力的混合推理模型,凭借其 80 亿参数规模及 128K 超长上下文支持,正在重塑 AI 应用边界。该模型既可通过轻量化“快思考”实现低算力秒级响应,也能在复杂任务中激活深度推理模式,以…...

Python os.path.join()路径拼接异常

问题 在使用os.path.join()对两个路径进行拼接&#xff0c;如&#xff1a;/University/School/和/Department/Class/进行拼接&#xff0c;最终的结果为/Department/Class/&#xff0c;而/University/School/却不知所踪。 import osos.path.join(“/University/School/”, “/…...

Flink之DataStream

Apache Flink 的 DataStream API 是用于 处理无限&#xff08;流&#xff09;或有限&#xff08;批&#xff09;数据流的核心编程模型&#xff0c;适用于事件驱动、实时分析、ETL 等场景。相比 Flink Table API&#xff0c;DataStream API 提供了更强的灵活性和底层控制能力。 …...

WHAT - Tailwind CSS + Antd = MetisUI组件库

文章目录 Tailwind 和 Antd 组件库MetisUI 组件库 Tailwind 和 Antd 组件库 在 WHAT - Tailwind 样式方案&#xff08;不写任何自定义样式&#xff09; 中我们介绍了 Tailwind&#xff0c;至于 Antd 组件库&#xff0c;我们应该都耳熟能详&#xff0c;官网地址&#xff1a;htt…...

【LLM】MOE混合专家大模型综述(重要模块原理)

note 当前的 MoE 架构就是一个用显存换训练时长/推理延迟的架构MoE 目前的架构基本集中在于将原先 GPT 每层的 FFN 复制多份作为 n 个 expert&#xff0c;并增加一个 router&#xff0c;用来计算每个 token 对应到哪个 FFN&#xff08;一般采用每个 token 固定指派 n 个 exper…...

量子机器学习中的GPU加速实践:基于CUDA Quantum的混合编程模型探索

引言&#xff1a;量子机器学习的新范式 在量子计算与经典机器学习交叉融合的前沿领域&#xff0c;量子机器学习&#xff08;Quantum Machine Learning, QML&#xff09;正经历着革命性突破。然而&#xff0c;随着量子比特规模的增长和算法复杂度的提升&#xff0c;传统计算架构…...

CentOS Linux 环境二进制方式安装 MySQL 5.7.32

文章目录 安装依赖包新建用户解压初始化配置文件启动服务登录MySQL修改密码停止数据库 安装依赖包 yum -y install libaio perl perl-devel libncurses* autoconf numactl新建用户 useradd mysql解压 tar xf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.32-l…...

数学:拉马努金如何想出计算圆周率的公式?

拉马努金&#xff08;Srinivasa Ramanujan&#xff09;提出的圆周率&#xff08;π&#xff09;计算公式&#xff0c;源于他对数学模式的超凡直觉、对无穷级数和模形式的深刻洞察&#xff0c;以及独特的非传统数学思维方式。尽管他的思考过程带有强烈的个人色彩&#xff0c;甚至…...

Java 未来技术栈:从云原生到 AI 融合的企业级技术演进路线

一、云原生架构&#xff1a;重构 Java 应用的运行范式 1.1 微服务架构的深度进化 Java 在微服务领域的实践正从 Spring Cloud 向服务网格&#xff08;Service Mesh&#xff09;演进。以 Istio 为代表的服务网格技术&#xff0c;通过 Sidecar 模式实现服务间通信的透明化管理&…...

mid360驱动安装以及联合相机标定

1 mid360 安装 1.1 安装 一定要使用 SDK2和 ROS2驱动(livox_ros_driver2) 先安装SDK2&#xff0c;再安装livox_ros_driver2 GitHub - Livox-SDK/Livox-SDK2: Drivers for receiving LiDAR data and controlling lidar, support Lidar HAP and Mid-360. GitHub - Livox-SDK/l…...

LeetCode —— 572. 另一棵树的子树

572. 另一棵树的子树 题目&#xff1a;给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所…...

模型部署技巧(一)

模型部署技巧&#xff08;一&#xff09; 以下内容是参考CUDA与TensorRT模型部署内容第六章&#xff0c;主要针对图像的前/后处理中的trick。 参考&#xff1a; 1.部署分类器-int8-calibration 2. cudnn安装地址 3. 如何查找Tensor版本&#xff0c;与cuda 和 cudnn匹配 4. ti…...

PostgreSQL中的SSL

PGSQL数据库的默认隔离级别是读提交&#xff0c;并且同时支持可重复读和序列化模式。但是在9.1之前的版本中&#xff0c;序列化模式等价于快照隔离&#xff0c;并非是真正的序列化模式。 这样的话就会存在一个问题&#xff0c;那就是写偏序&#xff08;Write Skew&#xff09;…...

使用 Spring Data Redis 实现 Redis 数据存储详解

使用 Spring Data Redis 实现 Redis 数据存储详解 Spring Data Redis 是 Spring 生态中操作 Redis 的核心模块&#xff0c;它封装了 Redis 客户端的底层细节&#xff08;如 Jedis 或 Lettuce&#xff09;&#xff0c;提供了统一的 API 来操作 Redis 的数据结构。以下是详细实现…...

短视频矩阵系统贴牌开发实战:批量剪辑文件夹功能设计与实现

摘要&#xff1a;在短视频矩阵系统的开发中&#xff0c;批量处理功能是提升运营效率的关键。本文将深入探讨如何实现基于文件夹的短视频批量剪辑功能&#xff0c;涵盖技术选型、核心功能实现及代码示例。 一、需求背景与场景价值 在短视频矩阵运营场景中&#xff0c;运营者常面…...

2025年消防设施操作员考试题库及答案

一、判断题 25.防火门顺序器使用半个月后&#xff0c;需检查所有的螺钉&#xff0c;对固定螺钉进行加固拧紧&#xff0c;后续每月进行一次。&#xff08;&#xff09; 答案&#xff1a;错误 解析&#xff1a;本题考查的是防火门顺序器的保养。防火门顺序器使用一周后&#x…...

ASP.NET MVC后端控制器用模型 接收前端ajax数据为空

1、前端js代码 如下&#xff1a; const formData {DeptName: D001,Phone: 12345678900 };$.ajax({url: "/Phone/SavePhone1",type: "POST",contentType: "application/json",data: JSON.stringify(formData), //必须要JSON.stringifysuccess:…...

ES基本使用方式

ES基本使用 文章目录 ES基本使用1.es的访问使用URL访问 2.mapping的理解Dynamic Mappingkeyword 与 text的区别‌基础定义与核心差异主字段&#xff0c;子字段 创建mapping 3.创建索引4.查看索引列表5.删除索引6.添加数据7.查询数据 重置es密码&#xff0c;初始用户elastic el…...

【中间件】bthread效率为什么高?

bthread效率为什么更高&#xff1f; 1 基本概念 bthread是brpc中的用户态线程&#xff0c;也是协程的一种实现。其采用M:N模型&#xff0c;即多个用户线程映射到少量的系统线程上。 2 高效做法 用户态调度&#xff1a;避免内核态和用户态之间的切换开销&#xff0c;上下文切…...

Transformer架构指南:从原理到实战资源全更新

&#x1f31f; 什么是Transformer&#xff1f; 2017年Google提出的Transformer架构&#xff0c;彻底颠覆了传统RNN/LSTM的序列建模方式&#xff0c;通过自注意力机制实现全局上下文建模&#xff0c;成为GPT、BERT等大模型的底层基石。其核心优势在于并行化计算和长距离依赖捕捉…...

数据库规范

数据库版本相关 版本&#xff1a;mysql8.0 引擎&#xff1a;InnoDB 字符集&#xff1a;utf8mb4_general_ci 表名称 字段名称te 不允许使用大写字母&#xff0c;尽量使用英文或英文缩写&#xff0c;中间用下划线连接 数据表前缀为zzt_ 同一功能模块的表(特别是附表)尽量保持…...

Java 核心--泛型枚举

作者&#xff1a;IvanCodes 发布时间&#xff1a;2025年4月30日&#x1f913; 专栏&#xff1a;Java教程 各位 CSDN伙伴们&#xff0c;大家好&#xff01;&#x1f44b; 写了那么多代码&#xff0c;有没有遇到过这样的“惊喜”&#xff1a;满心欢喜地从 ArrayList 里取出数据…...

使用skywalking进行go的接口监控和报警

安装 helm upgrade --install skywalking ./skywalking-v1 --namespace skywalking --create-namespace 查看安装结果 kubectl get pod -n skywalking NAME READY STATUS RESTARTS AGE elasticsearch-6c4ccbf99f-ng6sk 1/1 …...

基于Docker的Elasticsearch ARM64架构镜像构建实践

一、前言 Elasticsearch(以下简称为ES) 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次…...

【Token系列】14|Prompt不是文本,是token结构工程

文章目录 14&#xff5c;Prompt不是文本&#xff0c;是token结构工程一、很多人写的是“自然语言”&#xff0c;模型读的是“token序列”二、Prompt写法会直接影响token结构密度三、token分布影响Attention矩阵的聚焦方式四、token数 ≠ 有效信息量五、Prompt结构设计建议&…...

在宝塔面板中安装OpenJDK-17的三种方法

title: 在宝塔面板中安装OpenJDK-17的三种方法 date: 2025-4-30 categories: 技术教程 tags: [Minecraft, 服务器搭建, 宝塔面板, Java] 如果你的宝塔面板软件商店中缺少 OpenJDK-17&#xff08;例如搭建 Minecraft 1.17 服务器时&#xff09;&#xff0c;本文提供三种解决方…...

瑞昱点屏芯片RTD2785T带旋转功能

一、产品概述 RTD2785T是瑞昱半导体&#xff08;Realtek&#xff09;推出的新一代高性能显示驱动芯片&#xff0c;专为高端显示器、嵌入式系统、工业控制及专业影像设备设计。该芯片集成多接口输入&#xff08;HDMI、DP、DVI、VGA&#xff09;与多种输出接口&#xff08;eDP、…...

蓝桥杯Python(B)省赛回忆

Q&#xff1a;为什么我要写这篇博客&#xff1f; A&#xff1a;在蓝桥杯软件类竞赛&#xff08;Python B组&#xff09;的备赛过程中我在网上搜索关于蓝桥杯的资料&#xff0c;感谢你们提供的参赛经历&#xff0c;对我的备赛起到了整体调整的帮助&#xff0c;让我知道如何以更…...

自主采集高质量三维重建数据集指南:面向3DGS与NeRF的图像与视频拍摄技巧【2025最新版!!】

一、✨ 引言 随着三维重建技术的飞速发展&#xff0c;NeRF&#xff08;Neural Radiance Fields&#xff09;与 3D Gaussian Splatting&#xff08;3DGS&#xff09;等方法成为重建真实场景和物体几何细节的前沿方案。这些方法在大规模场景建模、机器人感知、文物数字化、工业检…...

为Mac用户定制的云服务器Vultr 保姆级教程

以下是专为 Mac 用户 定制的 Vultr 保姆级教程&#xff0c;涵盖从注册、部署服务器到常见问题解决的全流程指南&#xff0c;配合实际案例和故障排查&#xff0c;确保流畅使用。 一、Vultr 基础介绍 1.Vultr 是什么&#xff1f; Vultr 是一家美国云计算服务商&#xff0c;提供…...

广州创科——湖北房县汪家河水库除险加固信息化工程

汪家河水库 汪家河水库位于湖北省房县&#xff0c;建于1971年&#xff0c;其地利可谓是天公之作&#xff0c;东西二山蜿蜒起伏&#xff0c;山峰相连&#xff0c;峰峰比高&#xff0c;无有尽头&#xff0c;东边陡峭&#xff0c;西边相对平坦&#xff0c;半山腰有一条乡村道路&am…...

LeetCode392_判断子序列

LeetCode392_判断子序列 标签&#xff1a;#双指针 #字符串 #动态规划Ⅰ. 题目Ⅱ. 示例 0. 个人方法官方题解一&#xff1a;双指针官方题解二&#xff1a;动态规划 标签&#xff1a;#双指针 #字符串 #动态规划 Ⅰ. 题目 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序…...

力扣第447场周赛

这次终于赶上力扣的周赛了, 赛时成绩如下(依旧还是三题 )&#xff1a; 1. 统计被覆盖的建筑 给你一个正整数 n&#xff0c;表示一个 n x n 的城市&#xff0c;同时给定一个二维数组 buildings&#xff0c;其中 buildings[i] [x, y] 表示位于坐标 [x, y] 的一个 唯一 建筑。 如…...

kotlin中Triple的作用

在 Kotlin 里&#xff0c;Triple 是标准库提供的一个类&#xff0c;其作用是创建一个包含三个元素的不可变容器。以下是关于它的详细介绍&#xff1a; 基本作用 Triple 类让你能够把三个不同类型的值组合成一个单一对象&#xff0c;方便在函数间传递或者存储这三个相关的值。…...

jmeter读取CSV文件中文乱码的解决方案

原因分析​ CSV文件出现中文乱码通常是因为文件编码与JMeter读取编码不一致。常见场景&#xff1a; 文件保存为GBK/GB2312编码&#xff0c;但JMeter以UTF-8读取。文件包含BOM头&#xff08;如Windows记事本保存的UTF-8&#xff09;&#xff0c;但JMeter未正确处理。脚本读取文…...

Mysql查询异常【Truncated incorrect INTEGER value】

文章目录 异常原因分析1、数据类型不一致2、数据长度超长3、数据格式要正确 处理方案模拟案例创建表数据查询 异常 在执行MySQL的语句时&#xff0c;在控制台报错如下所示。 Data truncation: Truncated incorrect INTEGER value 原因分析 1、数据类型不一致 必须要保证数据…...

vue+django农产品价格预测和推荐可视化系统[带知识图谱]

文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站&#xff0c;有好处&#xff01; ✅编号&#xff1a;D010 vue django 前后端分离架构搭建的系统带有推荐算法、价格预测、可视化、知识图谱数据从爬虫获取可以更新到最…...

2025年天梯题解(L1-8 + L2)

L1-112 现代战争 题目 既然是从大到小轰炸&#xff0c;将所有点存储为三元组&#xff08;value, x, y&#xff09;。 排序之后, 记录行列被轰炸的编号&#xff0c;进行 k 次挑选即可。 #include <bits/stdc.h> using namespace std;constexpr int MAXN 1000; struct …...

AndroidStudio生成AAR

Android Studio 2024.3 版本。如何生成 AAR 文件呢&#xff1f; 操作步骤 1、菜单栏&#xff0c;找到 Build 2、清除项目 Clean Project 3、构建项目 Assemble Project生成 AAR 路径 在 我们构建 lib 库下面。 build/outputs/aar/ xxxx下面截图为证&#xff1a; 我的…...

Vue3 后台管理系统模板

Vue3 后台管理系统模板 gie仓库地址 一个基于 Vue3 TypeScript Element Plus 的后台管理系统模板&#xff0c;集成了动态路由和权限管理功能。 技术栈 Vue 3.2TypeScript 4.5Vue Router 4Vuex 4Element Plus 2.9AxiosLess 功能特性 &#x1f680; 基于 Vue3 最新技术栈开…...

RPG4.设置角色输入

这一篇是进行玩家移动和视角移动的介绍。 1.在玩家内进行移动覆写 virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override; 2.创建增强输入资产的变量创建 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category "CharacterD…...

生产模块-备货生产

特点 从狭义的角度来看&#xff0c;备货生产场景主要出现在产品定制化需求低&#xff0c;产品工艺流程稳定可以大批生产&#xff0c;市场行情可预测的企业。为了实现订单快速交付&#xff0c;缩短交货周期&#xff0c;企业往往会结合公司历史订单数据和当前市场情况安排提前生产…...

GRE隧道

1.在锐捷网络设备中&#xff0c;tunnel mode gre ip 和 tunnel mode gre multipoint 是两种不同的 GRE&#xff08;Generic Routing Encapsulation&#xff09;隧道模式&#xff0c;主要区别在于连接拓扑和使用场景&#xff1a; 1. tunnel mode gre ip&#xff08;点到点 GRE …...

ASP.NET MVC​ 入门与提高指南六

31. 事件驱动架构与 MVC 集成 31.1 事件驱动架构概念 事件驱动架构&#xff08;Event - Driven Architecture&#xff0c;EDA&#xff09;是一种软件设计模式&#xff0c;系统中的组件通过发布和订阅事件来进行通信。在这种架构中&#xff0c;当某个事件发生时&#xff0c;相…...

【MongoDB篇】MongoDB的文档操作!

目录 引言第一节&#xff1a;C - Create - 创建文档 (Insert) &#x1f476;➕第二节&#xff1a;R - Read - 读取文档 (Query) &#x1f4da;&#x1f440;第三节&#xff1a;U - Update - 更新文档 (Update) &#x1f504;✍️第四节&#xff1a;D - Delete - 删除文档 (Dele…...

详解具身智能机器人开源数据集:RoboMIND

一、RoboMIND基础信息 RoboMIND 发布时间&#xff1a;2024年12月 创建方&#xff1a;国家地方共建具身智能机器人创新中心与北京大学计算机学院联合创建。 所使用的机器人&#xff1a;单臂机器人&#xff08;Franka Emika Panda 、UR5e &#xff09;、双臂机器人&#xff08;…...

施磊老师rpc(一)

文章目录 mprpc项目**项目概述**&#xff1a;深入学习到什么**前置学习建议**&#xff1a;核心内容其他技术与工具**项目特点与要求**&#xff1a;**环境准备**&#xff1a; 技术栈集群和分布式理论单机聊天服务器案例分析集群聊天服务器分析分布式系统介绍多个模块的局限引入分…...