自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

记录值得记录的东西

个人理解,个人观点,仅供参考

  • 博客(124)
  • 收藏
  • 关注

原创 UE多人网络游戏中Actor的Network Role属性

多人网络游戏中,每个Actor都具有一个属性,。代码中的对应类型为ENetRole。AuthorityProxyAuthority属性通过Local Role和变量来跟踪,Local Role表示该Actor在本机上的权限属性,而Remote Role表示该Actor在远程服务器上的权限属性。UE默认采用的 server-authoritative模型,意味着,所有信息都会从服务器复制到客户端。因此基本可以这样说:服务器上的Actor的Local Role变量肯定为Authority,而在远程客户端上的。

2024-04-21 01:01:47 820

原创 UE C++获取某个旋转状态(欧拉角表示)下的三个方向向量的方法

当想要获取某个轴(比如 X 轴)的方向向量时,可以直接从旋转矩阵中提取对应的列。可以直接理解成,对局部空间的x轴应用矩阵R,从而得到了世界空间中的方向向量结果。数学上,这些向量是通过旋转矩阵与原始坐标轴向量相乘得到的。其中,每一列实际上代表了旋转后的坐标轴在原始坐标系中的方向向量。实际上这个旋转矩阵乘以。

2024-04-19 16:28:53 268 1

原创 OpenGL设置顶点布局的封装

正常来说,在OpenGL中,指定一块顶点缓存的布局并不难,但是当顶点缓冲的类型非常多的时候,就会很难阅读、维护

2024-02-23 22:43:55 922

原创 SSAO shader

SSAO

2024-02-21 22:35:29 425

原创 Vulkan中的SwapChain、FrameBuffer和RenderPass:概念理解及关系

实际上,imageView并没有直接存储图像数据,你可以将其比喻为一个"窗口",你可以透过这个窗口看到图像的一部分,同时指定这个窗口的属性,比如窗口的大小、位置等。SwapChain提供了可以呈现到屏幕上的图像和图像视图,FrameBuffer关联了这些图像视图,并指定了RenderPass,RenderPass定义了渲染操作的步骤和依赖关系。总体而言,framebuffer 的附件设置是根据你的渲染需求而定的,但通常会包括至少一个与 swapchain 相关的颜色附件。如果你有其他需要渲染的内容,例如。

2024-01-25 21:06:59 812

原创 vulkan中的texture(VkImage、VkImageView、VkSampler、VkDeviceMemory)

在 Vulkan 中,对于很多对象(比如 VkBuffer 和 VkImage),数据存储和句柄是分离的,这为开发者提供了更多的灵活性。这样的设计允许你更精细地控制数据的存储位置、布局和访问权限。以便在着色器中进行纹理采样操作。

2024-01-23 19:28:46 681

原创 C++多线程环境中进行内存分配跟踪的接口类设计(全局重载new/delete操作符)

操作符,实现堆区空间的分配和释放的跟踪记录。

2024-01-23 13:50:03 431

原创 vulkan中分配显存并拷贝数据的流程(vkBuffer、vkDeviceMemory的关系)以及VMA库介绍

设备内存对象(GPU显存),用于实际存储 Vulkan 缓冲区对象的数据。缓冲区需要分配显存后才能存储实际的数据,最后成功分配的显存块是通过。再次强调,它并不包含任何指向实际显存块的指针,只是一些信息。表示一个缓冲区对象,用于存储数据,比如顶点数据、索引数据等。函数将缓冲区对象和分配的设备内存关联起来,使得。函数从vkBuffer对象中获取缓冲区的内存。是两个不同的概念,但它们通常是一起。函数为缓冲区分配实际的设备内存(),并将该内存与缓冲区关联起来。对象,定义了缓冲区的。能够真正使用这块显存。

2024-01-17 17:11:30 1117

原创 $ git push ssh: connect to host github.com port 22: Connection timed out fatal: Could not read from

解决方法一:改用HTTP协议(我没试过,应该是可以的)

2024-01-17 03:41:27 1126 1

原创 vulkan中从CPU到GPU传输数据,暂存缓冲区(staging buffer)的必要性

在使用诸如Vulkan、DirectX等现代图形API时,经常用于充当主机和GPU之间的桥梁,以进行高效的数据传输。要明确知道,staging buffer是。既然都是从CPU到GPU传输数据,为什么要先从CPU端拷贝到。(显存块)呢,这不很多余么?

2024-01-17 03:03:53 978 5

原创 vulkan中的指令队列的大致原理

在vulkan中,指令池`vkCommandPool`分配指令缓冲`vkCommandBuffer`,而指令缓冲用于记录`计算、渲染指令`,记录完后,把该指令缓冲提交给指令队列`vkQueue`,然后等待执行。

2024-01-15 03:46:25 670

原创 C++的一些零散小知识

想到看到就记录一下

2023-12-24 03:17:35 414

原创 C++17 inline静态变量,静态变量不用再类内定义类外初始化了

并且这个表达式还是constexpr,从而可以在编译时进行求值,提供更好的优化。然后再在其他任何.cpp文件中包含MyClass.h文件,使用。而在 C++17 引入的标准中,你可以直接在类中定义并初始化。这使得静态成员变量的定义和初始化。

2023-12-24 02:16:25 695

原创 C++ 侵入式智能指针实现原理

mutable用于修饰类的成员变量,表示该成员变量可以在被标记为 const 的成员函数内修改。

2023-12-23 20:48:44 460

原创 用VS Code修改源代码的编码格式

用VS Code打开一个编码格式为GB2312的源代码文件,中文部分显示为乱码。此时我们点击上面红框这个位置,命令面板弹出两个选项,选择。,选择你想保存的格式即可,这里我选择UTF-8。可以看到VS Code已经猜测出该文件就是。然后,这个文件里的中文部分就可以正常显示了。这是因为VS Code默认解码格式为。最后,再重新点击右下角的。编码的,这里我们选择。

2023-12-21 22:00:51 1258

原创 VS Code + MinGW 搭建 Windows C++开发环境以及如何简单根据CMake维护的项目生成.sln文件

这是Visual Stuidio(IDE)用的编译器,在VSCode中,如果选择MSVC作为编译器,结果就是生成一个对应VS版本的.sln解决方案,后面就不说了吧 用Visual Studio 2022 打开就行。必须掌握的技能,目前github上开源项目几乎都采用CMake来维护,不会使用则寸步难行,学会CMake之后,其他的构建工具都简简单单,比如Premake。,并指定调试相关配置属性,比如调试的目标可执行文件,调试采用的调试器路径等。,这是C/C++插件默认帮我们生成的,必须有这个文件才能编译。

2023-12-20 23:26:19 2703

原创 cmake中的configure_file() 和option()命令

cmake中的configure() 和option()命令的作用域问题。

2023-12-15 17:19:03 667

原创 【游戏引擎 - C#脚本系统】6、C#端调用C++函数

通过在C++中注册函数,然后在C#中声明和调用这些函数

2023-12-08 01:27:13 1093

原创 【游戏引擎 - C#脚本系统】4、C++调用C#函数

,而该调用方法特定于你提供的方法签名,这意味着对于可以传递哪些参数没有歧义。那么,何时应该使用mono_runtime_invoke,何时应该使用非托管方法桩呢?这取决于情况。如果你在编译时(C++编译时)不知道方法的签名,那么你可能应该使用mono_runtime_invoke,尽管你也可以使用非托管方法桩,但通常你希望参数在编译时已知。

2023-12-07 00:25:49 1020

原创 【游戏引擎 - C#脚本系统】5、字段和属性(Fields & Properties)

翻译 from peter1745的《mono-guide》

2023-12-06 10:56:40 1101

原创 【游戏引擎 - C#脚本系统】3、程序集加载和测试

11111

2023-12-06 10:44:59 985

原创 【游戏引擎 - C#脚本系统】1、Mono介绍

11111

2023-12-06 10:44:40 1514

原创 【游戏引擎 - C#脚本系统】2、配置Mono Runtime环境

11111

2023-12-06 10:44:14 1238

原创 C++17折叠表达式(Fold Expressions)

1

2023-11-20 19:30:46 254

原创 C++11 模板参数包(Parameter pack)

Template parameter pack(模板参数包)是C++中用于接受零个或多个模板参数的一种机制

2023-11-20 18:43:28 302

原创 C++11 constexpr 常量表达式应用场景

C++11 引入的一个特性,是一种关键字,用于指示表达式或函数可以在**编译时**求值。

2023-11-14 02:07:47 396

原创 C++11 原始字符串字面量R“()“

`R"()"`是C++11引入的一项特性,它允许创建**不需要转义字符**的字符串字面量。字符串中包含特殊字符、换行符和其他转义字符时,**不需要反斜杠**转义它们。

2023-11-14 01:32:40 580

原创 C++17 std::filesystem

用于表示文件系统路径。它提供了一系列方法,允许你对路径进行各种操作,如拼接、分解、获取文件名等。路径可以是相对路径或绝对路径,可以包含文件名、目录名等信息。std::filesystem 是 C++17 标准引入的文件系统库,提供了一套用于处理文件和目录的 API。:用于表示目录中的一个条目,可以是文件或目录。你可以使用这个类来检查目录中的条目类型、获取条目路径等信息。:是一个用于遍历目录内容的迭代器。你可以使用它来遍历目录中的所有文件和子目录,并获取它们的信息。:用于删除文件或目录。

2023-11-10 17:23:33 812

原创 C++11 initializer_list 轻量级初始化列表的使用场景(让自定义类可以用初始化列表来初始化内部STL容器)

`initializer_list` 是 C++11 中的一个特性,它允许你使用花括号 `{}` 中的值列表来初始化**容器或数组**。通常用于初始化标准库容器,比如 `std::vector`、`std::set`、`std::map` 以及`数组`。

2023-11-03 15:14:54 1063

原创 游戏引擎中,用四元数表示旋转

一文看懂

2023-11-01 19:50:04 3267 1

原创 错误 LNK1181 无法打开输入文件“\VulkanSDK\**.lib”

这个错误消息表明在项目构建过程中,链接器无法找到名为 “.lib” 的库文件。

2023-10-31 11:06:39 1018

原创 关于git推送代码到github远程仓库中文乱码问题,visual studio保存文件默认编码格式问题

当你用GB2313格式保存一个文件,用utf-8的编码格式打开,它必然就显示乱码。据我所知,github上面是utf-8,而visual studio默认保存为GB2312,把代码推送到github上面看,中文部分就是乱码。

2023-10-29 13:55:05 1470 1

原创 GIT常用操作记录

强制回退到某个具体历史提交记录,即要删除它之后的所有提交,可以用git reset命令。请注意,这将永久删除提交历。并谨慎使用 git reset 和强制推送。

2023-10-29 02:49:20 343

原创 C++17 带有初始化器的if语句

在之前的C++标准中,你可能需要在if语句之外单独声明和初始化这些变量,这会使代码变得更加冗长。这个特性使得代码更加简洁,因为你可以在if语句中立即声明所需的变量,并且这些变量的。,它允许在if语句中声明并初始化一个变量,然后在if条件中使用这个变量。C++17之前的版本,则需要提前声明并初始化,然后进行判断。C++17引入的一个新特性,称为。,不会影响外部作用域。

2023-10-19 16:36:48 275

原创 C++11 decltype 的简单使用

获取表达式的类型,而不实际计算表达式的值。是一个 C++11 关键字,用于在。

2023-10-18 17:10:20 212

原创 C++11 强枚举类型(enum class)

可以显示指定其底层存储类型,默认为int。(为其他的比如char的话 有什么作用和意义我不太清楚),通常默认为int。这可能导致不同编译器和平台之间的兼容性问题,因为int的大小可能会有所不同。C++11 推出的 强类型枚举(enum class)可以隐式转换为整数。不同枚举类型的值混淆。给每个枚举添加命名空间可以解决,但属实非常麻烦。没有底层类型: 传统的C风格枚举没有。的主要优势在于提供了更好的。,这可能导致潜在的命名冲突。

2023-10-18 16:12:40 637

原创 C++11 右值引用和完美转发

C++11 引入了 右值引用(rvalue reference)的概念,允许程序员更好地处理右值。右值引用的引入使得可以实现,即将资源的所有权从一个对象转移到另一个对象,从而提高了性能。因此一般把左右值的情况分开处理,对右值采用进行优化。

2023-10-18 13:52:53 85

原创 C++类型转换运算符重载

通常在类中定义,允许将该类的对象隐式地转换为目标类型。这使得在使用这些对象时,它们可以表现得像目标类型的对象。这个类型转换运算符允许将。

2023-10-16 23:24:50 208

原创 C++内存分区概念

堆区用于动态分配内存,通常由程序员手动分配和释放。堆内存的生存期不受函数作用域的限制,可以在程序的任何地方进行分配和释放。C++中的 new 和 delete 操作符或者 malloc() 和 free() 函数用于在堆区分配和释放内存。栈区用于存储函数调用的上下文和局部变量。每次调用函数时,将分配一部分栈内存用于存储局部变量和函数调用信息。当函数退出时,这些局部变量将自动销毁。,而全局常量、静态全局常量、函数内部静态常量都存放在。全局变量、静态全局变量、函数内部静态变量都是存放在。

2023-09-24 02:24:23 182

原创 单例模式(懒汉式,饿汉式,变体)

单例模式,用于确保一个类,并提供一个以访问该实例。

2023-09-21 01:03:06 281

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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