0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

链游开发源码——3D建模经济模型设计

开发MrsFu123 来源:开发MrsFu123 作者:开发MrsFu123 2022-06-28 21:04 次阅读

元宇宙技术在传统互联网的基础上,元宇宙在沉浸感、参与度、永续性等多方面提出了更高的要求,因此将会由许多独立工具、平台、基础设施、协议等来支持其运行。随着AR、VR5G云计算等技术成熟度提升,元宇宙有望逐步从概念走向现实。

元宇宙的发展模式

(1)循序渐进是元宇宙的主要过程,其中在技术端、内容端、载体端都随着时代的发展而在不断演变。关于将区块链应用变得如何丰富化这个问题以太坊正在努力改进中,同样的Coinbase、Uniswap以及Opesea为代表的交易所也在为区块链经济提供更好的交易能力,他们的发展始终在遵循自然规律,循序渐进的发展。

(2)内容端,元宇宙这一概念在游戏中不断增加,其生态形式也不断加强,当然用户数也随之增长。尤其是以Roblox、Sandbox为代表的UGC元宇宙概念,确保游戏得益于玩家的参与而不断丰富自己游戏的内容。

(3)载体端,比较明显的表现是在通信技术、虚拟现实以及芯片等底层技术的改进和升级中。

Metauniverse emphasizes digital space and virtual world,but it does not mean that it is just digital space and virtual world.It can realize the interaction between virtual world,real world and real society,and can strengthen reality with emptiness.Therefore,metauniverse is an important new track to drive digital technology innovation and enable the real economy.Our government,scientific research institutions,enterprises and individuals need to actively participate in promoting the rapid development of metauniverse.

Do a good job in the top-level design at the macro level,and establish the basic concept and main objectives of the meta universe;Supporting technologies for building the meta universe,especially promoting the research and development of some key technologies;Establish relevant standards of metauniverse,from national standards to international standards,so as to gain a voice in the international science and technology field,avoid wasting financial and material resources and energy,improve R&D efficiency,I35模式7O98开发O7I8.and realize automation and intelligent interoperability;Formulate relevant laws and regulations,standardize in development,develop in standardization,and promote the healthy development of meta universe industry and industrial meta universe.

c#执行lua代码

这里将分三个步骤:

加载lua代码到vm中,对应api-luaL_loadbuffer

luaL_loadbuffer会同时在栈上压入代码块的指针

执行lua代码,对应api-lua_pcall

lua_pcall会从栈上依次弹出{nargs}个数据作为函数参数,再弹出函数进行执行,并将结果压入栈

如果lua代码有返回值,那么通过lua_toXXX相关api从栈上获取结果

完整的代码如下:

private bool DoLuaCode(System.IntPtr L,string luaCode){

//加载lua代码

if(Lua.luaL_loadbuffer(L,luaCode,"")==0){

//执行栈顶的函数

if(Lua.lua_pcall(L,0,1,0)==0){

//函数执行完成后,返回值会依次依次押入栈

return true;

}else{

Debug.LogError("pcall failed!");

return false;

}

}else{

Debug.LogError("load buffer failed");

return false;

}

}

假如我们有一段lua代码:

return'hello,i am from lua'

这段lua仅仅返回一段字符串,那么利用DoLuaCode去执行就是:

//lua代码

string luaCode="return'hello,i am from lua'";

if(DoLuaCode(L,luaCode)){

Debug.Log(Lua.lua_tostring(L,-1));

//lua_toXXX不会出栈,需要lua_pop才能出栈

Lua.lua_pop(L,1);

}

由于此处lua代码返回的是字符串,因此使用lua_tostring(L,-1)来将栈顶的元素转为字符串并返回,相应的我们还能看到有lua_tonumber,lua_toboolean等等.

4.c#调用lua全局函数

接下来的例子将说明一下c#端如何执行lua中的全局函数。

假设现在我们有一段lua代码如下:

function addSub(a,b)

return a+b,a-b;

end

通过DoLuaCode来运行以上的lua代码,就得到了一个全局的addSub函数,这个函数会返回a,b相加和相减的结果。

为了在c#端执行以上的lua函数,需要按以下步骤进行:

将全局函数压入栈中,对应api-lua_getglobal

将函数所需的参数依次压入栈中,对应api-lua_pushnumber

执行栈中函数,对应api-lua_pcall

获取函数返回结果,对应api-lua_tonumber

完整c#代码如下:

//从全局表里读取addSub函数,并压入栈

Lua.lua_getglobal(L,"addSub");

//压入参数a

Lua.lua_pushnumber(L,101);

//压入参数b

Lua.lua_pushnumber(L,202);

//2个参数,2个返回值

Lua.lua_pcall(L,2,2,0);

//pcall会让参数和函数指针都出栈

//pcall执行完毕后,会将结果压入栈

Debug.Log(Lua.lua_tonumber(L,-2));

Debug.Log(Lua.lua_tonumber(L,-1));

Lua.lua_pop(L,2);

5.lua注册并调用c#静态函数

首先,想要被Lua调用的c#函数,都必须满足以下的格式:

public delegate int LuaCSFunction(System.IntPtr luaState);

同时需要加上特性:

MonoPInvokeCallback(typeof(LuaCSFunction))

我们可以通过以下方式,将一个LuaCSFunction注册到lua中:

static void RegisterCSFunctionGlobal(System.IntPtr L,string funcName,LuaCSFunction func){

//将LuaCSFunction压入栈中

Lua.lua_pushcfunction(L,func);

//lua_setglobal会弹出栈顶元素,并按给定的名字作为key将其加入到全局表

Lua.lua_setglobal(L,funcName);

}

那么,当我们在lua中执行c#注册的函数时,其交互过程如下:

LuaVM会临时分配一个局部栈结构(这里要区分开始通过luaL_newstate创建的全局栈,两者是独立的)

LuaVM会将lua侧的函数参数压入这个临时栈,然后将栈指针传给LuaCSFunction

LuaCSFunction在实现上需要从这个栈中读取lua侧压入的参数,然后执行真正的相关逻辑,并将最终结果压入栈中

LuaCSFunction需要返回一个int值,表示往栈中压入了多少个返回值

Lua从栈中获取C#侧压入的0/1/多个返回值

官方说明文档可以参考-Calling C from Lua

接下来要将演示如何将一个c#静态函数Print注入到lua中,实现lua中调用c#端的日志输出功能。

我们定义一个c#静态函数如下:

[MonoPInvokeCallback(typeof(LuaCSFunction))]

private static int Print(System.IntPtr localL){

//获取栈中元素个数

var count=Lua.lua_gettop(localL);

System.Text.StringBuilder s=new System.Text.StringBuilder();

for(var i=1;i<=count;i++){

//依次读取print的每个参数,合并成一个string

s.Append(Lua.lua_tostring(localL,i));

s.Append('');

}

Debug.Log(s);

//print函数没有返回值

return 0;

}

lua_gettop可以获取栈中的元素个数,此处代表了lua端压入栈中的函数参数个数

然后我们通过以下方式将这个c#侧的Print注册到lua中,命名为print。

//将LuaCSFunction压入栈中

Lua.lua_pushcfunction(L,Print);

//lua_setglobal会弹出栈顶元素,并按给定的名字作为key将其加入到全局表

Lua.lua_setglobal(L,"print");

接下来我们执行以下的lua代码:

print('hello','csharp')

就能看到编辑器中输出

hello csharp

6.lua注册c#类型

通常我们使用lua中的table来模拟c#中的类。一般类的注册思路如下:

在lua中创建一个与c#类同名的表

将c#类的静态函数都注册到lua的这个同名表里

下面演示一下如何将Unity中的Debug类注册到lua中:

Lua.lua_createtable(L,0,1);

Lua.lua_setglobal(L,"Debug");

其实很简单:

lua_createtable会创建一个table,压入栈顶

lua_setglobal会弹出栈顶元素,并将其加到全局表里

这样我们在lua里就有了一个名为Debug的表可供全局访问。但目前这个表是空空如也的,我们还需要为其添加静态函数。(tips:实际上完整的设计中,还需要为class table设置metatable,增加一些限制性,但这里先不表)

6.1注入类的静态函数

首先我们定义一个符合LuaCSFunction形式的c#函数如下:

[MonoPInvokeCallback(typeof(LuaCSFunction))]

private static int Debug_Log(System.IntPtr L){

string msg=Lua.lua_tostring(L,1);

Debug.Log(msg);

return 0;

}

这个c#函数是对Debug.Log的一个封装。

然后可以通过以下方式将这个c#函数注册到lua中的Debug表中:

Lua.lua_createtable(L,0,1);

//往栈中压入字符串'Log'

Lua.lua_pushstring(L,"Log");

//往栈中压入函数Debug_Log

Lua.lua_pushcfunction(L,Debug_Log);

//从栈中弹出一个元素作为key,再弹出一个元素作为value,作为pair赋值到index指定的table

Lua.lua_settable(L,1);

Lua.lua_setglobal(L,"Debug");

审核编辑:符乾江

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 互联网
    +关注

    关注

    54

    文章

    11167

    浏览量

    103480
  • 元宇宙
    +关注

    关注

    13

    文章

    1397

    浏览量

    11490
收藏 人收藏

    评论

    相关推荐

    TechWiz LCD 3D应用:局部液晶配向

    ,本案例使用TechWiz LCD 3D进行局部摩擦的设置。 1. 建模任务 1.1进行局部摩擦配置 2. 建模过程 以下是建模过程中部分重要步骤的说明 2.1在TechWiz Lay
    发表于 01-03 08:58

    TechWiz LCD 3D应用:挠曲电效用仿真

    完成后在TechWiz LCD 3D中加载并进行相关参数设置 2.2在TechWiz LCD 3D软件中开启应用挠曲电效应的功能 2.3其它设置 液晶设置 电压条件设置 光学分析部分,添加偏振片 结果查看 3.1 V-T曲线 3.2 结果对比
    发表于 12-10 13:43

    透明塑料件喷粉3D扫描CAV全尺寸检测逆向3D建模设计服务-CASAIM

    3D建模
    中科院广州电子
    发布于 :2024年08月30日 10:04:53

    3D 建模:塑造未来的无限可能

    在当今数字化飞速发展的时代,3D 建模正以惊人的力量改变着我们的生活和工作方式。它不仅是一项创新的技术,更是开启未来之门的钥匙。 3D或三维这个术语指的是三个空间维度:宽度、高度和深度。物质
    的头像 发表于 08-16 18:24 1587次阅读

    安宝特产品 安宝特3D Analyzer:智能的3D CAD高级分析工具

    安宝特3D Analyzer包含多种实用的3D CAD高级分析工具,包括自动比对模型、碰撞检测、间隙检查、壁厚检查,以及拔模和底切分析,能够有效提升3D CAD
    的头像 发表于 08-07 10:13 394次阅读
    安宝特产品  安宝特<b class='flag-5'>3D</b> Analyzer:智能的<b class='flag-5'>3D</b> CAD高级分析工具

    裸眼3D笔记本电脑——先进的光场裸眼3D技术

    随着科技的不断进步,裸眼3D技术已经不再是科幻电影中的幻想。如今,英伦科技裸眼3D笔记本电脑将这一前沿科技带到了我们的日常生活中。无论你是专业的3D模型设计师,还是希望在视频播放和
    的头像 发表于 07-16 10:04 573次阅读

    3d场景建模可视化,场景1:1还原

    在当今数字化时代,3D场景建模可视化技术成为重要工具,为各行业提供了强大的展示和交互手段。从电影特效到建筑设计,从游戏开发到虚拟现实,3D场景建模
    的头像 发表于 07-12 14:49 318次阅读

    3D建模的重要内容和应用

    3D建模是一种技术,通过计算机软件创建虚拟三维模型,模拟现实世界中的物体或场景。这项技术广泛应用于建筑设计、电影制作、游戏开发、工程仿真等领域。下面古河云科技将介绍一些与
    的头像 发表于 06-21 14:48 658次阅读

    3D建模的特点和优势都有哪些?

    3D建模是一种用于创建三维对象的过程,它在许多领域都有着广泛的应用,包括动画、游戏开发、建筑设计、工程以及制造业等。下面古河云科技将介绍一些关于3D
    的头像 发表于 05-13 16:41 2501次阅读

    烘焙vs渲染:3D模型制作中的效率与质量之争

    3D建模和渲染领域,模型烘焙(Baking)和模型渲染(Rendering)是两个经常被提及的概念。尽管它们都与最终图像的生成有关,但它们在技术实现、目的、优势和劣势等方面存在显著差
    的头像 发表于 05-12 08:27 475次阅读
    烘焙vs渲染:<b class='flag-5'>3D</b><b class='flag-5'>模型</b>制作中的效率与质量之争

    ad19中3d模型不显示?

    封装库导入3d模型不显示,但导入3d模型后的封装库生成pcb文件时显示3d模型,这是什么原因导致
    发表于 04-24 13:41

    头盔3D扫描逆向工程3d建模抄数测绘服务-CASAIM中科广电

    3D扫描
    中科院广州电子
    发布于 :2024年04月12日 14:03:01

    包含具有多种类型信息的3D模型

    Desktop是一个3D建模CAD程序,用于多种绘图和设计,涵盖建筑、土木和机械工程,以及室内设计、产品设计、景观建筑甚至游戏开发。它通常用于创建和编辑3D
    发表于 03-28 17:18

    Stability AI推出全新Stable Video 3D模型

    近日,Stability AI 推出了全新的 Stable Video 3D 模型,该模型以其独特的功能吸引了众多关注。此模型具备从单张图像中生成多视图
    的头像 发表于 03-22 10:30 874次阅读

    高分工作!Uni3D3D基础大模型,刷新多个SOTA!

    我们主要探索了3D视觉中scale up模型参数量和统一模型架构的可能性。在NLP / 2D vision领域,scale up大模型(GP
    的头像 发表于 01-30 15:56 916次阅读
    高分工作!Uni<b class='flag-5'>3D</b>:<b class='flag-5'>3D</b>基础大<b class='flag-5'>模型</b>,刷新多个SOTA!