一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鏈游開發(fā)源碼——3D建模經(jīng)濟(jì)模型設(shè)計(jì)

開發(fā)MrsFu123 ? 來源:開發(fā)MrsFu123 ? 作者:開發(fā)MrsFu123 ? 2022-06-28 21:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

元宇宙技術(shù)在傳統(tǒng)互聯(lián)網(wǎng)的基礎(chǔ)上,元宇宙在沉浸感、參與度、永續(xù)性等多方面提出了更高的要求,因此將會(huì)由許多獨(dú)立工具、平臺(tái)、基礎(chǔ)設(shè)施、協(xié)議等來支持其運(yùn)行。隨著AR、VR、5G、云計(jì)算等技術(shù)成熟度提升,元宇宙有望逐步從概念走向現(xiàn)實(shí)。

元宇宙的發(fā)展模式

(1)循序漸進(jìn)是元宇宙的主要過程,其中在技術(shù)端、內(nèi)容端、載體端都隨著時(shí)代的發(fā)展而在不斷演變。關(guān)于將區(qū)塊鏈應(yīng)用變得如何豐富化這個(gè)問題以太坊正在努力改進(jìn)中,同樣的Coinbase、Uniswap以及Opesea為代表的交易所也在為區(qū)塊鏈經(jīng)濟(jì)提供更好的交易能力,他們的發(fā)展始終在遵循自然規(guī)律,循序漸進(jìn)的發(fā)展。

(2)內(nèi)容端,元宇宙這一概念在游戲中不斷增加,其生態(tài)形式也不斷加強(qiáng),當(dāng)然用戶數(shù)也隨之增長。尤其是以Roblox、Sandbox為代表的UGC元宇宙概念,確保游戲得益于玩家的參與而不斷豐富自己游戲的內(nèi)容。

(3)載體端,比較明顯的表現(xiàn)是在通信技術(shù)、虛擬現(xiàn)實(shí)以及芯片等底層技術(shù)的改進(jìn)和升級(jí)中。

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開發(fā)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#執(zhí)行l(wèi)ua代碼

這里將分三個(gè)步驟:

加載lua代碼到vm中,對(duì)應(yīng)api-luaL_loadbuffer

luaL_loadbuffer會(huì)同時(shí)在棧上壓入代碼塊的指針

執(zhí)行l(wèi)ua代碼,對(duì)應(yīng)api-lua_pcall

lua_pcall會(huì)從棧上依次彈出{nargs}個(gè)數(shù)據(jù)作為函數(shù)參數(shù),再彈出函數(shù)進(jìn)行執(zhí)行,并將結(jié)果壓入棧

如果lua代碼有返回值,那么通過lua_toXXX相關(guān)api從棧上獲取結(jié)果

完整的代碼如下:

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

//加載lua代碼

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

//執(zhí)行棧頂?shù)暮瘮?shù)

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

//函數(shù)執(zhí)行完成后,返回值會(huì)依次依次押入棧

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去執(zhí)行就是:

//lua代碼

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

if(DoLuaCode(L,luaCode)){

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

//lua_toXXX不會(huì)出棧,需要lua_pop才能出棧

Lua.lua_pop(L,1);

}

由于此處lua代碼返回的是字符串,因此使用lua_tostring(L,-1)來將棧頂?shù)脑剞D(zhuǎn)為字符串并返回,相應(yīng)的我們還能看到有l(wèi)ua_tonumber,lua_toboolean等等.

4.c#調(diào)用lua全局函數(shù)

接下來的例子將說明一下c#端如何執(zhí)行l(wèi)ua中的全局函數(shù)。

假設(shè)現(xiàn)在我們有一段lua代碼如下:

function addSub(a,b)

return a+b,a-b;

end

通過DoLuaCode來運(yùn)行以上的lua代碼,就得到了一個(gè)全局的addSub函數(shù),這個(gè)函數(shù)會(huì)返回a,b相加和相減的結(jié)果。

為了在c#端執(zhí)行以上的lua函數(shù),需要按以下步驟進(jìn)行:

將全局函數(shù)壓入棧中,對(duì)應(yīng)api-lua_getglobal

將函數(shù)所需的參數(shù)依次壓入棧中,對(duì)應(yīng)api-lua_pushnumber

執(zhí)行棧中函數(shù),對(duì)應(yīng)api-lua_pcall

獲取函數(shù)返回結(jié)果,對(duì)應(yīng)api-lua_tonumber

完整c#代碼如下:

//從全局表里讀取addSub函數(shù),并壓入棧

Lua.lua_getglobal(L,"addSub");

//壓入?yún)?shù)a

Lua.lua_pushnumber(L,101);

//壓入?yún)?shù)b

Lua.lua_pushnumber(L,202);

//2個(gè)參數(shù),2個(gè)返回值

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

//pcall會(huì)讓參數(shù)和函數(shù)指針都出棧

//pcall執(zhí)行完畢后,會(huì)將結(jié)果壓入棧

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

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

Lua.lua_pop(L,2);

5.lua注冊(cè)并調(diào)用c#靜態(tài)函數(shù)

首先,想要被Lua調(diào)用的c#函數(shù),都必須滿足以下的格式:

public delegate int LuaCSFunction(System.IntPtr luaState);

同時(shí)需要加上特性:

MonoPInvokeCallback(typeof(LuaCSFunction))

我們可以通過以下方式,將一個(gè)LuaCSFunction注冊(cè)到lua中:

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

//將LuaCSFunction壓入棧中

Lua.lua_pushcfunction(L,func);

//lua_setglobal會(huì)彈出棧頂元素,并按給定的名字作為key將其加入到全局表

Lua.lua_setglobal(L,funcName);

}

那么,當(dāng)我們?cè)趌ua中執(zhí)行c#注冊(cè)的函數(shù)時(shí),其交互過程如下:

LuaVM會(huì)臨時(shí)分配一個(gè)局部棧結(jié)構(gòu)(這里要區(qū)分開始通過luaL_newstate創(chuàng)建的全局棧,兩者是獨(dú)立的)

LuaVM會(huì)將lua側(cè)的函數(shù)參數(shù)壓入這個(gè)臨時(shí)棧,然后將棧指針傳給LuaCSFunction

LuaCSFunction在實(shí)現(xiàn)上需要從這個(gè)棧中讀取lua側(cè)壓入的參數(shù),然后執(zhí)行真正的相關(guān)邏輯,并將最終結(jié)果壓入棧中

LuaCSFunction需要返回一個(gè)int值,表示往棧中壓入了多少個(gè)返回值

Lua從棧中獲取C#側(cè)壓入的0/1/多個(gè)返回值

官方說明文檔可以參考-Calling C from Lua

接下來要將演示如何將一個(gè)c#靜態(tài)函數(shù)Print注入到lua中,實(shí)現(xiàn)lua中調(diào)用c#端的日志輸出功能。

我們定義一個(gè)c#靜態(tài)函數(shù)如下:

[MonoPInvokeCallback(typeof(LuaCSFunction))]

private static int Print(System.IntPtr localL){

//獲取棧中元素個(gè)數(shù)

var count=Lua.lua_gettop(localL);

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

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

//依次讀取print的每個(gè)參數(shù),合并成一個(gè)string

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

s.Append('');

}

Debug.Log(s);

//print函數(shù)沒有返回值

return 0;

}

lua_gettop可以獲取棧中的元素個(gè)數(shù),此處代表了lua端壓入棧中的函數(shù)參數(shù)個(gè)數(shù)

然后我們通過以下方式將這個(gè)c#側(cè)的Print注冊(cè)到lua中,命名為print。

//將LuaCSFunction壓入棧中

Lua.lua_pushcfunction(L,Print);

//lua_setglobal會(huì)彈出棧頂元素,并按給定的名字作為key將其加入到全局表

Lua.lua_setglobal(L,"print");

接下來我們執(zhí)行以下的lua代碼:

print('hello','csharp')

就能看到編輯器中輸出

hello csharp

6.lua注冊(cè)c#類型

通常我們使用lua中的table來模擬c#中的類。一般類的注冊(cè)思路如下:

在lua中創(chuàng)建一個(gè)與c#類同名的表

將c#類的靜態(tài)函數(shù)都注冊(cè)到lua的這個(gè)同名表里

下面演示一下如何將Unity中的Debug類注冊(cè)到lua中:

Lua.lua_createtable(L,0,1);

Lua.lua_setglobal(L,"Debug");

其實(shí)很簡單:

lua_createtable會(huì)創(chuàng)建一個(gè)table,壓入棧頂

lua_setglobal會(huì)彈出棧頂元素,并將其加到全局表里

這樣我們?cè)趌ua里就有了一個(gè)名為Debug的表可供全局訪問。但目前這個(gè)表是空空如也的,我們還需要為其添加靜態(tài)函數(shù)。(tips:實(shí)際上完整的設(shè)計(jì)中,還需要為class table設(shè)置metatable,增加一些限制性,但這里先不表)

6.1注入類的靜態(tài)函數(shù)

首先我們定義一個(gè)符合LuaCSFunction形式的c#函數(shù)如下:

[MonoPInvokeCallback(typeof(LuaCSFunction))]

private static int Debug_Log(System.IntPtr L){

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

Debug.Log(msg);

return 0;

}

這個(gè)c#函數(shù)是對(duì)Debug.Log的一個(gè)封裝。

然后可以通過以下方式將這個(gè)c#函數(shù)注冊(cè)到lua中的Debug表中:

Lua.lua_createtable(L,0,1);

//往棧中壓入字符串'Log'

Lua.lua_pushstring(L,"Log");

//往棧中壓入函數(shù)Debug_Log

Lua.lua_pushcfunction(L,Debug_Log);

//從棧中彈出一個(gè)元素作為key,再彈出一個(gè)元素作為value,作為pair賦值到index指定的table

Lua.lua_settable(L,1);

Lua.lua_setglobal(L,"Debug");

審核編輯:符乾江

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 互聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    55

    文章

    11251

    瀏覽量

    106456
  • 元宇宙
    +關(guān)注

    關(guān)注

    13

    文章

    1404

    瀏覽量

    12066
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    TechWiz LCD 3D應(yīng)用:FFS仿真

    建模任務(wù) 堆棧結(jié)構(gòu) 建模過程 2.1使用TechWiz Layout繪制各層掩模版平面圖 2.2創(chuàng)建堆棧結(jié)構(gòu),并生成3D結(jié)構(gòu) 2.3 使用TechWiz LCD 3D進(jìn)行各項(xiàng)參數(shù)計(jì)算
    的頭像 發(fā)表于 07-14 14:08 ?126次閱讀
    TechWiz LCD <b class='flag-5'>3D</b>應(yīng)用:FFS仿真

    【Milk-V Duo S 開發(fā)板免費(fèi)體驗(yàn)】3- 嘗試免費(fèi)3D打印了開發(fā)板外殼

    引言 壇友jf_07365693在評(píng)測(cè)群里面分享了3D打印DuoS開發(fā)板外殼的經(jīng)驗(yàn),以前從來沒有嘗試過3D打印,這次也專門試了試,效果不錯(cuò),分享一下經(jīng)驗(yàn)給大家。 外殼模型 DuoS的外
    發(fā)表于 07-08 20:54

    TechWiz LCD 3D應(yīng)用:局部液晶配向

    ,本案例使用TechWiz LCD 3D進(jìn)行局部摩擦的設(shè)置。 1. 建模任務(wù) 1.1進(jìn)行局部摩擦配置 2. 建模過程 以下是建模過程中部分重要步驟的說明 2.1在TechWiz Lay
    發(fā)表于 06-16 08:46

    答疑|3D打印能打印立體字母嗎?

    議: (1)在使用3D建模軟件創(chuàng)建字母模型時(shí),要確保字母的線寬至少有1-2MM,避免打印時(shí)斷裂。 (2)如果字母有懸空部分(比如把字母豎起來打印時(shí),“H”中間的橫線),打印時(shí)需添加支撐結(jié)構(gòu),但大多時(shí)候都是
    發(fā)表于 05-21 16:17

    TechWiz LCD 3D應(yīng)用:撓曲電效用仿真

    完成后在TechWiz LCD 3D中加載并進(jìn)行相關(guān)參數(shù)設(shè)置 2.2在TechWiz LCD 3D軟件中開啟應(yīng)用撓曲電效應(yīng)的功能 2.3其它設(shè)置 液晶設(shè)置 電壓條件設(shè)置 光學(xué)分析部分,添加偏振片 結(jié)果查看 3.1 V-T曲線 3.2 結(jié)果對(duì)比
    發(fā)表于 05-14 08:55

    使用海爾曼太通/HellermannTyton 3D CAD 模型進(jìn)行快速高效的設(shè)計(jì)

    提供 3D 和 2D CAD 數(shù)據(jù),可供免費(fèi)下載。 直接嵌入三維設(shè)計(jì)環(huán)境的模型下載功能 在海爾曼太通官網(wǎng)上點(diǎn)擊【產(chǎn)品】選項(xiàng),工程師現(xiàn)在可以查看和下載眾多產(chǎn)品的 3D CAD
    發(fā)表于 03-14 16:55

    3D打印可以打印那種柔韌性好,能隨意變形的模型嗎?

    當(dāng)然可以! 一般來講,市面上常見的樹脂材料是比較脆的,一旦受力過大就很容易斷裂,因此不能隨意掰折或扭曲,這就導(dǎo)致很多人對(duì)3D打印的認(rèn)知還停留在它只能制造硬性模型。 但3D打印其實(shí)是可以打印出柔韌性好
    發(fā)表于 03-13 11:41

    TechWiz LCD 3D應(yīng)用:局部液晶配向

    ,本案例使用TechWiz LCD 3D進(jìn)行局部摩擦的設(shè)置。 1. 建模任務(wù) 1.1進(jìn)行局部摩擦配置 2. 建模過程 以下是建模過程中部分重要步驟的說明 2.1在TechWiz Lay
    發(fā)表于 02-08 08:52

    騰訊混元3D AI創(chuàng)作引擎正式發(fā)布

    的AI技術(shù),能夠根據(jù)用戶提供的提示詞或圖片,直接生成高質(zhì)量的3D模型。這一功能極大地降低了3D內(nèi)容創(chuàng)作的門檻,使得即使是缺乏專業(yè)3D建模技能
    的頭像 發(fā)表于 01-23 10:33 ?596次閱讀

    TechWiz LCD 3D應(yīng)用:局部液晶配向

    ,本案例使用TechWiz LCD 3D進(jìn)行局部摩擦的設(shè)置。 1. 建模任務(wù) 1.1進(jìn)行局部摩擦配置 2. 建模過程 以下是建模過程中部分重要步驟的說明 2.1在TechWiz Lay
    發(fā)表于 01-03 08:58

    TechWiz LCD 3D應(yīng)用:撓曲電效用仿真

    完成后在TechWiz LCD 3D中加載并進(jìn)行相關(guān)參數(shù)設(shè)置 2.2在TechWiz LCD 3D軟件中開啟應(yīng)用撓曲電效應(yīng)的功能 2.3其它設(shè)置 液晶設(shè)置 電壓條件設(shè)置 光學(xué)分析部分,添加偏振片 結(jié)果查看 3.1 V-T曲線 3.2 結(jié)果對(duì)比
    發(fā)表于 12-10 13:43

    透明塑料件噴粉3D掃描CAV全尺寸檢測(cè)逆向3D建模設(shè)計(jì)服務(wù)-CASAIM

    3D建模
    中科院廣州電子
    發(fā)布于 :2024年08月30日 10:04:53

    3D 建模:塑造未來的無限可能

    在當(dāng)今數(shù)字化飛速發(fā)展的時(shí)代,3D 建模正以驚人的力量改變著我們的生活和工作方式。它不僅是一項(xiàng)創(chuàng)新的技術(shù),更是開啟未來之門的鑰匙。 3D或三維這個(gè)術(shù)語指的是三個(gè)空間維度:寬度、高度和深度。物質(zhì)
    的頭像 發(fā)表于 08-16 18:24 ?1944次閱讀

    安寶特產(chǎn)品 安寶特3D Analyzer:智能的3D CAD高級(jí)分析工具

    安寶特3D Analyzer包含多種實(shí)用的3D CAD高級(jí)分析工具,包括自動(dòng)比對(duì)模型、碰撞檢測(cè)、間隙檢查、壁厚檢查,以及拔模和底切分析,能夠有效提升3D CAD
    的頭像 發(fā)表于 08-07 10:13 ?784次閱讀
    安寶特產(chǎn)品  安寶特<b class='flag-5'>3D</b> Analyzer:智能的<b class='flag-5'>3D</b> CAD高級(jí)分析工具

    安寶特產(chǎn)品 3D Evolution : 基于特征實(shí)現(xiàn)無損CAD格式轉(zhuǎn)換

    安寶特3D Evolution具有強(qiáng)大的3D CAD模型轉(zhuǎn)換功能,可在保留模型特征參數(shù)、注釋、約束的前提下,完成不同格式3D CAD
    的頭像 發(fā)表于 08-06 17:26 ?655次閱讀
    安寶特產(chǎn)品   <b class='flag-5'>3D</b> Evolution : 基于特征實(shí)現(xiàn)無損CAD格式轉(zhuǎn)換