首页 > 其他分享 >【UE5】08-字符编码

【UE5】08-字符编码

时间:2024-11-30 14:31:28浏览次数:9  
标签:编码 UTF 字节 字符 08 字符集 UE5 ASCII

了解字符编码的基础知识本身是不难的,难就难在大家各自的说法太多,误解也太多,导致新手学习路上非常迷惑,本文将详细为大家拨开字符编码下的谜团并正确理解字符编码。

知识的名字不重要,重要的是知识本身。

字符编码规范

在开始讲解UE相关内容之前,我想有必要了解一下编码规范的相关知识。首先应该明确,编码规范包括三部分,字符库字符集字符编码

所谓 字符库,就是一个编码规范里面都能包含和显示哪些字符,比如ASCII编码规范里面只能包含26个英文字母,但Unicode编码规范却可以包含几乎世界上所有的字符。

谈到字符集就涉及到映射,我们知道计算机是只能识别二进制的,那么我们必须把字符库中的每个字符和计算机的二进制对应起来,才能在计算机中显示字符,所以说这里就涉及到 字符集,比如ASCII编码规范字符库中的大写 A 映射到计算机中就是 01000001。既然要映射到计算机,那就涉及到二进制位数的问题,一个非常合理的想法就是,字符库中的字符越多,那自然就需要更多的二进制位数,因此你就明白为什么ASCII编码规范的字符集是一个字节,而Unicode编码规范的字符集却就可能是2个或4个字节了,因为Unicode毕竟要包含世界所有的字符,那必然要更多的二进制位数嘛。

通过将字符映射到计算机中,我们得到了字符集,那么到这里我们也只是完成了逻辑上的映射,还没有真正物理地存储在计算机中,这时候 字符编码 就上场了,字符编码所要解决的就是如何将字符集以一种合理的方式存储在计算机中,这种合理可能涉及空间小、容易转换等等,出于不同目的的考略,也因此同一种编码规范就可能有多种字符编码方式。

这一节的最后,我们来讲一讲具体的编码规范,实际上,我们只需要了解常见的三种编码规范即可,他们分别是 ASCIIANSIUnicode,好,接下来我们一个一个讲。

ASCII

ASCII,全称American Standard Code for Information Interchange,美国信息互换标准代码,ASCII编码规范实际上算是比较早的了,当时美国计算机技术比较厉害,所以他们编码时也只是考虑了英文字母和一些常用的控制符号,以至于虽然ASCII字符集是用一个字节,也就是8位,来做映射,但其高位却总是为0,因为用不到,总共ASCII的字符库才只有128个字符。

总结一下ASCII编码规范,ASCII的字符库就是一些英文字符和符号,ASCII的字符集采用1个字节去映射,高位总是0,ASCII的编码方式,实际没什么好编码的,直接把字符集的映射拿过来用就可以了,所以你会常听到ASCII而不是ASCII编码规范,就是这个原因,因为也不需要编码啊,干脆就一起叫好了。

ANSI

到这里就比较有意思了,随着科学技术的进步,计算机越来越普及了,世界不同地区都开始使用计算机了,那这时候总不能计算机都是英文吧,这对于英文不好的我岂不是很尴尬,于是各个国家就各自同时一起开始捣鼓,既然ASCII高位是0,那我何不利用起来,映射为我们国家自己的文字,所以这一时期出现了各种各样的对ASCII的扩展集,其中有些被ANSI(全称为American National Standards Institute,中文名美国国家标准学会,ASCII实际上也是他们制定的)收录作为美国国家标准,我们管ANSI收录的这个字符集叫做 ANSI 字符集,这个字符集通过利用多余的高位,加入了欧洲的一些字符,但最终还是一个字节。至于编码方式,和ASCII一样,也是用一个字节直接映射。
在这里插入图片描述

讲到ANSI我就必须提一个误解,这在我查资料的时候也是迷糊了老半天,你可能在别处听说过 ANSI 代码页,这玩意可不是ANSI字符集,正确的名字是 Windows 代码页,这个东西是专门为Windows电脑上那些非Unicode字符集程序使用的,现在Windows用的都是Unicode字符集,如果有些程序不是,那他就会用这个代码页里面的字符集,比如936号代码页,就代表简体中文,当然代码页有非常多,不同地区不同语言有不同的代码页。

在这里插入图片描述

中文字符

咱们使用中文,所以这里详细也说一下中文的字符编码,中文字符集就是非常典型的多字节字符集,他们都兼容ASCII。汉字的编码规范要比其他国家复杂的多,因为汉字实在太多了,比如一些欧洲国家,他们可能仅仅ASCII多出的那一位就够他们存储自己的语言了,但汉字那么多,多出来的一位怎么可能够。于是我们国家决定用两个字节的字符集来表示汉字,最早出现的中文字符集为 GB2312,他收录了我们大陆常用的六千多个汉字,GB2312规定,用两个字节来映射字符,如果一个字节小于127,那就还用ASCII,如果两个字节大于127,那么就映射为汉字。以上是字符集的映射规则,对于字符编码,GB2312采用变长编码,即如果是小于127的字母,就用一个字节存储,如果是两个字节都大于127的汉字,就用两个字节存储,因为这个不定长,在当时也是非常头大,因为C语言的char类型是一个字节,常规指针移动就是一个字节移动一次,导致当时直接移动指针访问中文字符很困难,必须得调用封装好字符操纵函数。

继GB2312后,发现六千个常用字确实够大陆用了,但是台湾的繁体字怎么办,也得收录进来吧,但是按照原本的字符集映射方式又不太够,于是原本必须两个字节都大于127才表示汉字,现在只要第一个字节大于127,就表示汉字,这下子又一下多出许多空间,那肯定够了,这个字符集就是 GBK。总结一下,GBK字符集的映射方式是两个字节,其中小于127还是ASCII,只要第一个字节大于127就表示汉字;对于字符编码,还是直接映射,GBK也是变长编码,小于127就编码为1个字节,第一个字节大于127就编码为2个字节。

继GB2312后,中华文化博大精深啊,别忘了咱们可是多民族国家,少数民族还有那么多字呢,也得编进来吧,那恐怕2个字节也不够了吧,干脆上4个字节,GB18030 可不来了嘛,这下子可算是把中文都集齐了。GB18030在字符集映射上采用4个字节,小于127就还是ASCII,只要第一个字节大于127就是汉字,后面还有3位,随便用,都是汉字的;对于字符编码,还是老套路的变长编码,小于127就编为1个字节,第一个字节大于127的那些GBK中的常用字,咱们还是用2个字节,新加的一些少数民族的不常用字符,我们再用4个字节存储。

Unicode

可算讲到Unicode了,字符编码可真难搞啊,相信看到这里你一定也收获了不少了,继续往下看吧。

这要是大家都用各自地区的多字节字符集,那不乱套了,除了英语,那其他不同语言还交流个屁啊,一打开全是字母和问号,必须有个字符集能够将全世界的字符都收录进来啊,于是同一时间,有两个组织发起了这个项目,一个是ISO(国际标谁化组织),咱们肯定不陌生,他管的可多了,另一个是由多家公司成立的统一码联盟,主要就管字符编码,前者的字符集叫做 UCS(Universal Multiple-Octet Coded Character Set,通用多八位编码字符集),后者的字符集叫做 Unicode(统一码),但是发展着发展着,发现世界不需要两个统一的字符集,于是乎,两者就商量着合并为一个统一的字符集,所以从Unicode2.0版本开始,两者的字库和字符集算是统一起来了,现在咱们都叫做 Unicode

在这里插入图片描述在这里插入图片描述

那么Unicode的字符集是怎么映射的呢,他实际上用叫做 码点 的东西,一个字符可以由一个或多个码点表示,比如汉字 的码点是 U+4F60,之前他使用4个16进制数也就是2个字节表示,不过后来不够用,现在他的范围已经是U+0000U+10FFFF,最多有6个十六进制数也就是三个字节,按照他们的映射方式理论上可以存储1,114,112个字符,不过目前只用了299,056 个,27%左右。

以上是字符集的映射方式,针对字符编码方式,你大概会想,那不就是拿4个字节一个一个映射呗,你这种想法确实没问题,但不够实用,为什么说呢,因为你想啊,全世界常用的字符也就那么些,1个或2个字节基本就能表示得全,总不能人家一个文本文件,只用的英文字母,你每个字母都编码为4个字节吧,这家伙,大小直接翻了4倍,存在本地还好,反正硬盘不值钱,但是这要是放网络上传输,这丢包率得多高啊,太不实际了,那Unicode到底是怎么在内存中存储的呢,那思路肯定也是是变长编码呗,常用字符就占用空间少点,遇到不常见的字符再用多点空间,但具体来说,这编码方式可就多了去了,ISO提出的有UCS-2,UCS-4,统一码联盟提出的有UTF-8,UTF-16,UTF-32,这三个叫做UTF(“UCS Transformation Format”)系列,合起来足足五种呢,不着急,实际上他们归根结底也就两种,一种定长,一种变长,咱们下面用表格一个一个解释。

编码描述
UCS-2定长编码,很简单,就是用固定的2个字节16位来编码,4个码点的时候还行,
现在都扩充到6个码点了,这明显不够用嘛,所以现在已经过时了,淘汰了。
UCS-4定长编码,这个也是用固定的4个字节32位来编码,跟后面讲的UTF-32一样,
这还是我之前说的,太费空间了,不好使。
UTF-8变长编码,以8位1个字节为单位表示码点,英文用1个字节,常用字符2个字节,汉字用3个字节,
不常用字符4个字节,最多4个字节就可以覆盖所有Unicode字符。
UTF-8应该是目前最好用的Unicode编码方式了吧,几乎大部分网页都使用的他,他可以兼容ASCII。
UTF-16变长编码,以16位2个字节为单位进行编码,最多只要2个码元,即4个字节就可以表示所有Unicode字符,
在BMP基本字符集内的用2个字节,其他补充字符用4个字节。
编程上用的比较多,比如Java、Javascript、C#和Windows API都是用的UTF-16。
UTF-32定长编码,和UCS-4一样,一个码元4个字节就可以编码所有Unicode字符了,太费空间了,不好使。

在这里插入图片描述

多字节字符集

多字节字符集,MBCS – multi-byte character set,这个名字本身就是个错误,字符集怎么能说成多字节呢,只有编码才有字节的说法,所以这里我要提另一个概念 变长编码,variable-width encoding,实际多字节字符集就应该叫做变长编码字符集才对,那么什么是多字节字符集呢?之前ANSI字符集用1个字节,GBK表示汉字用2个字节,就是多字节字符集吗,对也不对,这里的“多”指的是一个字符集里面的字符需要1个或大于1个字节来编码,也就是说这个字符集里面有的字符是1个字节,有的是2个,或者3个,或者4个,这个叫做多字节。UTF-32(后文会讲到),是固定4个字节的编码方式,他也使用了不止一个字节,但他却不是多字节,因为他的全部字符都是4个字节,因此我们知道,这里的“多”指的是字节大小类型的多,也就是一个字符集里面有1个字节的,也有不止1个字节的。所以说为什么说多字节字符集这个叫法很容易让人误解呢,比如Unicode,他的编码方式有定长的也有不定长的,那我问你他是多字节字符集吗,是也不是。

窄字节字符集与宽字节字符集

窄字节字符集就对应C++的char类型,宽字节字符集就对应C++的wchar_t类型,什么是 窄字节字符集 呢,即以1个字节为单位进行编码存储的字符集就是窄字节字符集,比如ASCII就是典型的窄字节字符集,所有字符都只需要一个字节来存储,但是,那么中文字符集GB2312是窄字节字符集吗,你可能会说,前面不是讲过了吗,是多字节字符集,但他也是窄字节字符集,为什么说是呢,因为他满足以一个字节为单位来存储的条件,在GB2312中,1个字母需要1个字节,1个汉字需要2个字节,就相当于2个字母组成了1个汉字,本质上还是单字节。

那么,什么是 宽字节字符集呢?除了以UTF-8编码的Unicode外,以其他形式编码的Unicode都是宽字节字符集,为什么呢?“宽”代表需要不止1字节为单位来存储,Unicode以UTF-16编码时,需要以2个字节为单位,补充字符则需要4个字节,即两个单位,Unicode以UTF-32编码时,需要以4个字节为单位,他们都是以不止1个字节为单位进行存储的,所以他们是宽字节字符集。

最后,总结一下,就目前而言,实际上,从编码角度来讲,除了UTF-16,UCS-2,UTF-32,UCS-4外,其他字符集都是单字节的。

最后再说几个易混淆的点,多字节、窄字节、宽字节,怎么感觉好像都在说一种东西,这是大家学习字符编码是非常容易混淆的地方,实际上他们不是,多字节字符集指的是变长编码方式,而窄字节和宽字节,指的是字节单位的大小,是1个字节为单位还是2个或4个字节为单位。多字节与窄字节和宽字节,他们两者之间没有包含关系,但有交集,比如UTF-8编码,他以1个字节为单位进行存储,所以他是窄字节,他以1个字节表示字母,三个字节表示汉字,所以他是多字节。为了避免混淆,我觉得将多字节叫做变长编码更加合理。

C++的字符处理

讲完字符编码还没完,再讲UE的字符之前,还得聊一聊C++的字符数据类型。我先把参考文档和相应的字面量截图了过来,大家可以结合我的讲解来看。从这个文档中我们可以了解到,截止到C++20版本,C++共有7种数据类型用来表示字符,咱们用表格讲一下。

类型描述
signed char1个字节8位,有符号。
unsigned char 1个字节8位,无符号。
char也是8位1个字节,虽然和上面两个大小都一样,但他一般更多的用来处理ANSI字符集,
当然也可以处理UTF-8,也就是1个字节为单位,但是用多个字节来表示字符的多字节字符集。
至于符号,文档也说了,手机上一般是无符号,电脑上一般有符号。
wchar_t这个就不是8位了,Windows上是2个字节16位,其它系统则是4个字节32位,
wchar_t的诞生实际上是为了存储Unicode字符集的,但是不同平台大小又不一样,很尴尬,
Windows用来存储UTF-16和UCS-2,如果存储补充字符,
那可能还需要用到代理对,也就是2个wchat_t表示一个补充字符,Linux用来存储UTF-32和UCS-4,所以说就很乱,
现在已经不推荐使用wchar_t了,后面有专门为Unicode字符集设计的数据类型。
char16_t16位2个字节,C++11新增的,专门为UTF-16设计。
char32_t32位4个字节,C++11新增的,专门为UTF-32设计。
char8_t8位1个字节,C++20新增的,专门为UTF-8设计。

在这里插入图片描述

在这里插入图片描述
编写一个C++输出中文到控制台的过程中包含三个字符编码过程,第一个,源文件的编码,或者叫源字符集source character set,他的关键在于将源代码输入给编译器,编译器能否正确的识别,比如就拿微软的MSVC举例,官方文档是这么写的,如果不手动设置源字符集,则编译器默认会查找BOM来确定是UTF-8还是UTF-16,注意MSVC不支持UTF-32,如果没有查找到BOM,即使你的源文件使用的是UTF-8编码,没有BOM他也是识别不出来,所以说即使是UTF-8,你也要加上BOM,如果没有BOM,MSVC会默认使用你操作系统的当前代码页,对于咱们中文来说就是GB2312;

第二个,程序在内存中的编码,为什么会有程序在内存中的编码呢,再以往是不区分的,自C++11和C++20之后,C++引入了专用于UTF-8、UTF-16和UTF-32的字面量,就是上图所示,如果没有这些,也就是以往只有char和wchar_t的情况,那么程序在内存中的编码就是源文件的编码,啥意思,也就是说,你源代码以GBK编码了 你好,那么编译器编译完成运行时,实际在内存中存储的就是GBK的编码方式,但是如果你使用了C++11和C++20加入的专门为Unicode设计的字面量,那么无论你的源文件是怎么编码的,是GBK也好,是UTF-8也罢,编译完成后程序在内存中的编码方式始终就是字面量所代表的编码方式,UTF-8或UTF-16或UTF-32;

第三个,控制台的编码方式,或者说是应用程序的编码方式,他决定的是能否将存储在内存中的字符正确的显示出来,如果想要显示出来,那就意味着控制台的编码方式必须和程序运行时内存中编码方式一致。

最后,说了那么多,咱们来个具体的例子,现在我的控制台的代码页为936,即编码方式为GB2312,源文件的编码方式是UTF-8 with BOM,在VS2022下编译下面的代码,结果如下,是可以显示出正确的中文字符的;现在我将控制台的代码页改为UTF-8,使用C++20的UTF-8字面量,源文件的编码方式仍旧是UTF-8 with BOM,结果如下,也能够正确显示中文字符;接第二种,现在咱们把源文件的编码方式改为UTF-8,没有BOM,结果如下,乱码了,为什么呢?因为我用的MSVC,上文也提到了,文档中说MSVC编译器默认只识别有BOM的UTF-8和UTF-16,现在我没有BOM,所以编译器直接按照我默认的代码页即GB2312去读取源文件,那必然错啊,源文件是UTF-8,你用GB2312,那么UTF-8中的“你好”对应到GB2312就是“浣犲ソ”,具体来说是UTF-8存储的“浣犲ソ”,那么我的终端也是UTF-8,他自然就原封不动的输出了“浣犲ソ”,所以说,问题不在终端,在于源文件的编码不符合编译器的规范,也就是编译器读入了错误的字符,我们看到的是"你好",但编译器看到的是"浣犲ソ"。

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

什么是 BOM,全称byte-order mark,字节顺序标记,它主要解决的是UTF-16和UTF-32编码过程中的大端序(BE)和小端序(LE)问题,也就是说UTF-16和UTF-32实际在编码存储的时候是有高低位之分的,如果混淆了,那就乱码了,所以说BOM就是解决这个问题的,当然UTF-8也可以写BOM,在这里起的作用主要就是说明该文本文件是Unicode字符集。

UE的字符处理

讲完了字符编码和C++的基础知识,UE在字符方面的处理,实际上是从游戏对跨平台和性能的要求出发的,无非就是对C++字符的封装,其中有几个在项目中经常用到的点,下面讲解一下。

第一个就是关于 TCHAR,首先明确TCHAR是一个字符类型,他实质是对C++中char和wchar_t的封装后的一层抽象,为什么要去封装这层抽象呢?我们知道,我们使用的编辑器以及制作出来的游戏实际上都是程序,都是要运行在不同的操作系统上的,既然要运行在操作系统上,那必然要调用相应操作系统的API,其中Windows的API的编码通常是UTF-16,即宽字节,而除Windows之外的Linux、Android等系统的API则是UTF-8,即单字节,那么问题就出现在这里,如果我想要我在Windows下的源代码也能在Linux下编译后生成相应的程序,如何实现呢,那只能是把源代码中所有宽字节字符转换为窄字节字符,这时候TCHAR就派上用场了,我只需要在源代码中仅使用TCHAR这一种字符类型,那么我就可以不再区分窄字节和宽字节,因为TCHAR在编译时会根据平台的不同自动选择窄字节或宽字节,如果在Windows上构建,那么TCHAR就是wchiar_t类型,如果在Linux或手机端构建,那么TCHAR就是char类型。最后,TCHAR可以让程序员不再需要根据构建平台的不同而在编写代码是使用不同的字符类型,只需面向TCHAR这一层抽象即可。

那么 TEXT 宏又和TCHAR有什么关系呢,上一段只是讲了TCHAR这个类型,那还没有说怎么给TCHAR赋值呢对吧,字面量怎么办,是不是也得封装一下,如果不封装,那字面量岂不是还得程序员自己来决定是 "hello" 还是 L"hello",所以说TEXT宏就是来解决使用字面量赋值的问题,有了TEXT宏,你只管在宏里写字符串,不用在乎他是窄字节还是宽字节,和TCHAR一样,他会根据平台,选择与TCHAR类型相符的字面量,比如在Windows上,那么 TEXT("heloo") 实质就等于 L"heloo",反之亦然。所以说,归根结底,TCHAR是类型,而TEXT是为了让字面量与TCHAR匹配,他们两者都在解决字符编码跨平台的问题,为了能够使你的项目可以跨平台,所以推荐使用TCHAR字符类型,字符字面量请使用TEXT宏包裹。

再说一下虚幻中的三个字符串类FString、FName和FText,列表格详细讲解,大家也可以直接看官方文档

描述
FName不区分大小写,是一个全局的共享字符串,使用时实际用的是字符串的索引,查找和访问速度非常快,不支持字符串操作,我们通常在编辑器中对资产命名实际上存储的就是FName类型的字符串。
FText可以设置字符格式,区分大小写,主要面向用户使用,向用户展示出的字符串都是这个类型,比如UI,也是全局的共享字符串,不支持字符串操作,
FString写代码时最常用的字符串,它实际就是一个TCHAR字符类型的动态数组,它可以被修改和进行字符串比较操作,你每创建一个FString都会在内存中开辟一块新空间,占用内存比较大。

标签:编码,UTF,字节,字符,08,字符集,UE5,ASCII
From: https://blog.csdn.net/E696472716D4/article/details/143834965

相关文章

  • 川土微CA-IS3082WX替代ISO3082DW、ISO1410、ISO1412B、P2P替代ADM2481
    川土微隔离式RS485收发器芯片CA-IS3080WX2.375~5.53.0~5.5V全双工0.5Mbps5000VRMSSOIC16-WBCA-IS3086WX2.375~5.53.0~5.5V全双工10Mbps5000VRMSSOIC16-WBCA-IS3082WX2.375~5.53.0~5.5V半双工0.5Mbps5000VRMSSOIC16-WBCA-IS3082WNX2.375~5.5......
  • 07.ES11 08.ES12
    7.1、Promise.allSettled调用allsettled方法,返回的结果始终是成功的,返回的是promise结果值<script>//声明两个promise对象constp1=newPromise((resolve,reject)=>{setTimeout(()=>{resolve("商品数据-1");},1000)......
  • 洛谷 P2895 [USACO08FEB] Meteor Shower S C语言 bfs
    题目:https://www.luogu.com.cn/problem/P2895题目描述贝茜听说一场特别的流星雨即将到来:这些流星会撞向地球,并摧毁它们所撞击的任何东西。她为自己的安全感到焦虑,发誓要找到一个安全的地方(一个永远不会被流星摧毁的地方)。如果将牧场放入一个直角坐标系中,贝茜现在的位置是原......
  • 20222408 2021-2022-2 《网络与系统攻防技术》实验七实验报告
    1.实验内容1.1实验内容简述(1)应用SET工具建立冒名网站。(2)利用ettercap完成DNS欺骗攻击。(3)结合应用两种技术,使被攻击者会通过域名访问到冒名网站。(4)结合攻击过程,提出具体防范方法。1.2学习内容简述(1)学习SET工具和ettercap工具的使用。(2)理解ARP污染、DNS欺骗攻击的原理和具体......
  • 这些 JavaScript 编码习惯,让你最大程度提高你的项目可维护性!
    前言:因为JavaScript语言是一门极其松散、极其自由的语言,这意味着我们可以随心所欲的操作它,这是他的优点,但同时也是它的缺点。在编码过程中,我们需要一种良好的规范或者习惯来保持应用程序的一致性和可维护性。而今天我们要说的就是,怎么在日常编码中通过一些的良好的编码习惯,从你......
  • 利用ffmpeg和bat脚本来将几个视频不编码仅合并为一个视频
    你可以利用ffmpeg.exe和.bat脚本来将几个(比如三个)视频不编码仅合并为一个视频。以下是一个详细的步骤指南:一、准备工作下载FFmpeg:前往FFmpeg的官方网站或可靠的下载源,下载并安装FFmpeg。确保FFmpeg的安装路径被添加到系统的环境变量中,或者你知道FFmpeg的完整安装路径。......
  • Springboot高职院校实践教学与就业跟踪085m6(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,企业,企业信息,招聘信息,应聘信息,实习实践,问卷调查,学生答卷开题报告内容一、研究背景与意义随着我国经济的快速发展和产业结构的不断优化升级,高等职业......
  • 【MATLAB源码-第208期】基于matlab的改进A*算法和传统A*算法对比仿真;改进点:1.无斜穿障
    操作环境:MATLAB2022a1、算法描述改进A*算法的优点分析改进A*算法相对于传统A*算法在多个方面进行了优化,包括避免斜穿障碍物顶点、删除中间多余节点以及提高搜索效率。这些改进措施使得路径规划更加高效、安全和可靠,特别是在复杂环境中表现尤为突出。本文将详细讨论这些改......
  • Transformer为什么需要“位置编码”?
    Transformer为什么需要“位置编码”?技术微佬 丁师兄大模型 2024年11月20日21:06 湖北✅ 我是丁师兄,专注于智能驾驶大模型,持续分享LLM面试干货。offer捷报坐标苏州的学员,通过训练营的项目和面试辅导,拿下苏州某国企大模型offer,年薪30w+,虽然相比于互联网不高,但......
  • UE5模拟交互篇|可交互流体风场实现
    【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!一、原理介绍1.思路分析先来说观察介质模拟的两种视角:拉格朗日视角和欧拉视角。 拉格朗日视角一般将介质视为粒子(或微小网格)的集合,粒子会随着......