91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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代碼

這里將分三個步驟:

加載lua代碼到vm中,對應api-luaL_loadbuffer

luaL_loadbuffer會同時在棧上壓入代碼塊的指針

執(zhí)行l(wèi)ua代碼,對應api-lua_pcall

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

如果lua代碼有返回值,那么通過lua_toXXX相關api從棧上獲取結果

完整的代碼如下:

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í)行完成后,返回值會依次依次押入棧

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不會出棧,需要lua_pop才能出棧

Lua.lua_pop(L,1);

}

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

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

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

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

function addSub(a,b)

return a+b,a-b;

end

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

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

將全局函數(shù)壓入棧中,對應api-lua_getglobal

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

執(zhí)行棧中函數(shù),對應api-lua_pcall

獲取函數(shù)返回結果,對應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個參數(shù),2個返回值

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

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

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

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

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

Lua.lua_pop(L,2);

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

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

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中執(zhí)行c#注冊的函數(shù)時,其交互過程如下:

LuaVM會臨時分配一個局部棧結構(這里要區(qū)分開始通過luaL_newstate創(chuàng)建的全局棧,兩者是獨立的)

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

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

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

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

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

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

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

[MonoPInvokeCallback(typeof(LuaCSFunction))]

private static int Print(System.IntPtr localL){

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

var count=Lua.lua_gettop(localL);

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

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

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

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

s.Append('');

}

Debug.Log(s);

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

return 0;

}

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

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

//將LuaCSFunction壓入棧中

Lua.lua_pushcfunction(L,Print);

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

Lua.lua_setglobal(L,"print");

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

print('hello','csharp')

就能看到編輯器中輸出

hello csharp

6.lua注冊c#類型

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

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

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

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

Lua.lua_createtable(L,0,1);

Lua.lua_setglobal(L,"Debug");

其實很簡單:

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

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

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

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

首先我們定義一個符合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;

}

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

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

Lua.lua_createtable(L,0,1);

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

Lua.lua_pushstring(L,"Log");

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

Lua.lua_pushcfunction(L,Debug_Log);

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

Lua.lua_settable(L,1);

Lua.lua_setglobal(L,"Debug");

審核編輯:符乾江

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

    關注

    55

    文章

    11344

    瀏覽量

    110213
  • 元宇宙
    +關注

    關注

    13

    文章

    1411

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何快速查找工業(yè)部件的 3D CAD 模型

    如何找到經(jīng)過認證的工業(yè)零件 3D CAD 模型,而無需猜測。 如果您是工程師、設計師或規(guī)劃師,您可能已經(jīng)花費了無數(shù)的時間來尋找 CAD 文件,但這些文件要么與真實零件不符,要么無法加載到您
    發(fā)表于 03-04 16:22

    技術資訊 I 多板系統(tǒng) 3D 建模,提升設計精度和性能

    本文要點了解3D建模流程。洞悉多板系統(tǒng)3D建模如何提高設計精度、性能和成本效益。掌握3D建模在制
    的頭像 發(fā)表于 11-21 17:45 ?2563次閱讀
    技術資訊 I 多板系統(tǒng) <b class='flag-5'>3D</b> <b class='flag-5'>建模</b>,提升設計精度和性能

    技術資訊 I 圖文詳解 Allegro X PCB Designer 中的 3D 模型映射

    本文要點面對市面上的一切要將PCB板放進一個盒子里的產(chǎn)品的設計都離不開3D模型映射這個功能,3D協(xié)同設計保證了產(chǎn)品的超薄化、高集成度的生命線;3D
    的頭像 發(fā)表于 10-17 16:16 ?1834次閱讀
    技術資訊 I 圖文詳解 Allegro X PCB Designer 中的 <b class='flag-5'>3D</b> <b class='flag-5'>模型</b>映射

    使用NVIDIA AI Blueprint打造3D世界

    在傳統(tǒng)工作流中,建模師必須構建占位模型、低精度資產(chǎn)來填充 3D 場景,優(yōu)化核心資產(chǎn)以完成場景。之后,可以優(yōu)化、細化并最終完成視覺效果。
    的頭像 發(fā)表于 09-23 14:35 ?1018次閱讀

    玩轉 KiCad 3D模型的使用

    “ ?本文將帶您學習如何將 3D 模型與封裝關聯(lián)、文件嵌入,講解 3D 查看器中的光線追蹤,以及如何使用 CLI 生成 PCBA 的 3D 模型
    的頭像 發(fā)表于 09-16 19:21 ?1.2w次閱讀
    玩轉 KiCad <b class='flag-5'>3D</b><b class='flag-5'>模型</b>的使用

    索尼與VAST達成3D業(yè)務合作

    近日,索尼空間現(xiàn)實顯示屏與VAST旗下的3D模型Tripo AI正式宣布達成業(yè)務合作:雙方將圍繞裸眼3D顯示技術、AI驅動的3D內(nèi)容生成與交互創(chuàng)新展開深度協(xié)同,致力于通過索尼空間現(xiàn)實
    的頭像 發(fā)表于 08-28 17:32 ?1560次閱讀

    TechWiz LCD 3D應用:FFS仿真

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

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

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

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

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

    TechWiz LCD 3D應用:微液晶分子摩擦排布

    ) 結構創(chuàng)建完成后在TechWiz LCD 3D中加載并進行相關參數(shù)設置 2.2在TechWiz LCD 3D軟件中設置微擾方式為用戶自定義,并設置微擾角度 2.3其它設置 此例僅對比使用微擾方式
    發(fā)表于 06-10 08:44

    基于 HT for Web 的輕量化 3D 數(shù)字孿生數(shù)據(jù)中心解決方案

    一、技術架構:HT for Web 的核心能力 圖撲軟件自主研發(fā)的 HT for Web 是基于 HTML5 的 2D/3D 可視化引擎,核心技術特性包括: 跨平臺渲染 :采用 WebGL 技術
    的頭像 發(fā)表于 05-30 14:33 ?978次閱讀
    基于 HT for Web 的輕量化 <b class='flag-5'>3D</b> 數(shù)字孿生數(shù)據(jù)中心解決方案

    3D AD庫文件

    3D庫文件
    發(fā)表于 05-28 13:57 ?6次下載

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

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

    TechWiz LCD 3D應用:撓曲電效用仿真

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

    TechWiz LCD 3D應用:微液晶分子摩擦排布

    ) 結構創(chuàng)建完成后在TechWiz LCD 3D中加載并進行相關參數(shù)設置 2.2在TechWiz LCD 3D軟件中設置微擾方式為用戶自定義,并設置微擾角度 2.3其它設置 此例僅對比使用微擾方式
    發(fā)表于 04-01 08:59