版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
從Web3D到WebXR現(xiàn)代Web開發(fā)與應(yīng)用數(shù)字化生存元宇宙的提出
科幻小說比如NealStephense的《雪崩》表現(xiàn)了對數(shù)字虛幻世界長期以來的渴望:有一天,人類可以進(jìn)入一個模擬世界的電子網(wǎng)絡(luò)世界,在那里人們都有自己的電子替身——個化身,通過它們?nèi)藗兛梢砸娒?、探險(xiǎn)、娛樂、工作“元宇宙”一詞由本書中提出。數(shù)字化生存
比特世界原子世界
數(shù)字化生存數(shù)字化與編碼模擬(analog):用按比例平滑變化的物理性質(zhì)表示信息的通用術(shù)語,如溫度計(jì)中的液面高度。數(shù)字的:(digital):信息表示方式,僅采用離散數(shù)值;與模擬形成對比。數(shù)字化:將聲音、圖形、視頻等信息轉(zhuǎn)換成計(jì)算機(jī)中的二進(jìn)制數(shù)。編碼:信息從一種形式按照某種規(guī)則或格式轉(zhuǎn)換為另一種形式的過程。解碼:編碼的逆過程。
XR概述XR分類
XR概述虛擬現(xiàn)實(shí)設(shè)備
XR概述IBM第2人生培訓(xùn)中心XR的廣泛應(yīng)用
數(shù)字化生存數(shù)字孿生
數(shù)字孿生是現(xiàn)有或?qū)⒂械奈锢韺?shí)體對象的數(shù)字模型,通過實(shí)測、仿真和數(shù)據(jù)分析來實(shí)時感知、診斷、預(yù)測物理實(shí)體對象的狀態(tài),通過優(yōu)化和指令來調(diào)控物理實(shí)體對象的行為,通過相關(guān)數(shù)字模型間的相互學(xué)習(xí)來進(jìn)化自身,同時改進(jìn)利益相關(guān)方在物理實(shí)體對象生命周期內(nèi)的決策。
——《數(shù)字孿生體技術(shù)白皮書(2019)》
元宇宙元宇宙的要素
傳統(tǒng)元宇宙實(shí)例Roblox(羅布樂思)
傳統(tǒng)元宇宙實(shí)例SecondLife(第2人生)
傳統(tǒng)元宇宙實(shí)例Minecraft(我的世界)
傳統(tǒng)元宇宙實(shí)例師生們在“我的世界”中進(jìn)行協(xié)同學(xué)習(xí)。Minecraft(我的世界)
Web3D相關(guān)技術(shù)Unity3DViewPointShockWave3Dcult3DWebGLjava3DVirtoolsWeb3D技術(shù)可以看作是Web技術(shù)和虛擬現(xiàn)實(shí)技術(shù)的結(jié)合,是虛擬現(xiàn)實(shí)技術(shù)向互聯(lián)網(wǎng)上的擴(kuò)展,其本質(zhì)是:直觀的虛擬現(xiàn)實(shí)表示、網(wǎng)絡(luò)性和互動性。VRML&X3D、GoogleO3DFlashStage3DColladaWeb3D相關(guān)技術(shù)Web3D相關(guān)技術(shù)VRML(theVirtualRealityModelingLanguage)VRML的首次提出是在1994年春第一屆國際互聯(lián)網(wǎng)絡(luò)年會上。1996年8月,發(fā)布了VRML2.0;1997年成為ISO標(biāo)準(zhǔn)2001年8月,Web3D協(xié)會發(fā)布了新一代國際標(biāo)準(zhǔn)——X3D(可擴(kuò)展3D),采用XML封裝VRML
VRMLVRML的特性它的出現(xiàn)主要是為了在Internet范圍內(nèi)建立一個全球統(tǒng)一的基于網(wǎng)絡(luò)的三維標(biāo)準(zhǔn).V1.0(1994)-->V2.0(1996)->VRML97(ISO)-V3.0(X3D)
VRML是一種簡單的基于文本的語言,用來描述三維場景以及交互環(huán)境
完整的三維建模語言:完整描述三維場景的物體、光、材料、環(huán)境特性和真實(shí)感效果
分布處理方式:支持多個分布式文件的多種對象和機(jī)制,包括內(nèi)聯(lián)式嵌入其他VRML文件,通過超鏈接指向其它文件
三維交互功能:能夠檢測用戶和虛擬環(huán)境中幾何造型交互動作(如按動開關(guān),碰撞檢測),用戶在虛擬環(huán)境中的行為以及時間推移。檢測器提供的這些信息通過由VRML定義的整個事件體系產(chǎn)生視覺或聽覺效果,給用戶造成和境界互動的交互式體驗(yàn)
VRMLVRML特性平臺無關(guān)性:在各種操作系統(tǒng)下都可以渲染多媒體集成(背景音樂,空間立體聲支持,電影貼圖)
原型節(jié)點(diǎn)(PROTO)便于用戶利用已有節(jié)點(diǎn)定義面向?qū)ο蟮男碌墓?jié)點(diǎn)。
使用腳本節(jié)點(diǎn)(Script)用戶可以定義更加復(fù)雜的執(zhí)行邏輯,支持VrmlScript以及Java等語言。
VRMLVRML簡單介紹基本術(shù)語節(jié)點(diǎn)(Node):指場景中實(shí)體,具有描繪改部分場景的所有繪圖指令域
(Field):存儲在一個結(jié)點(diǎn)中的一個或者多個數(shù)據(jù),或者通過一個路由發(fā)送給結(jié)點(diǎn)的值事件
(Events):
引發(fā)場景中狀態(tài)改變的觸發(fā)器eventIn:AninputeventOut:AnoutputAnexposedFieldisashort-handforafield,eventIn,andeventOut
路由
(Routes):一個確定結(jié)點(diǎn)的值經(jīng)過的路徑Thesender'snodenameandeventOutnameThereceiver'snodenameandeventInname
ROUTEMySender.rotation_changedTOMyReceiver.set_rotation
VRML一個簡單的VRML例子ThefileheaderCommentsNodesFieldsandValues
VRMLShape{appearanceNULL#SFNodegeometryNULL#SFNode}
VRMLVRML中基本節(jié)點(diǎn)幾何以及支持幾何描述節(jié)點(diǎn)
PrimitiveShapes:Box,Cone,Cylinder,Sphere,TextElevationGrid,Extrusion,IndexFaceSet,IndexLineSet,PointSet,Shape,Coordinate
Geometry造型節(jié)點(diǎn){
造型節(jié)點(diǎn)的域值}Box{size2.02.02.0#SFVec3f}
VRMLVRML中基本節(jié)點(diǎn)外觀節(jié)點(diǎn)
Appearance,Material,Color,Normal,ImageTexture,MoiveTexture,PixelTexture,TextureTransform,TextureCCoordinate,FontStyle
Appearance{materialNULL#SFNodetextureNULL#SFNodetextureTransformNULL#SFNode}
VRMLVRML中基本節(jié)點(diǎn)外觀節(jié)點(diǎn)
material包含一個Material節(jié)點(diǎn);texture包含一個ImageTextrue、MovieTexture或者PixelTexture節(jié)點(diǎn);textureTransform包含一個TextureTransform節(jié)點(diǎn)ShowcasemovieTextureusinginstantplayer
VRMLVRML中基本節(jié)點(diǎn)外觀節(jié)點(diǎn)
Material{diffuseColor0.80.80.8#SFColor,mainshadingcolorambientlntensity0.2#SFFloat,ambientlightingeffectsspecularColor000#SFColor,highlightcoloremissiveColor000#SFColor,glowingcolorshininess0.2#SFFloat,highlightsizetransparency0#SFFloat,opaqueornot}
Showcaseslabs.wrlshiny.wrl
VRMLVRML中基本節(jié)點(diǎn)動畫以及行為節(jié)點(diǎn):提供支持動畫,聲音以及其他基于時間的活動和編程的行為
TimeSensors,ColorInterpolator,CoordinateInterpolator,NormalInterpolator,PostionInterpolator,ScalarInterpolator,
OrientationInterpolator,Script
VRMLVRML中基本節(jié)點(diǎn)TimeSensorThesensorgeneratestimeeventswhileitisrunningToanimate,routetimeeventsintoothernodesATimeSensornodegeneratesabsoluteandfractionaltimeeventsabsolutetimeUsefulfortriggeringeventsatspecificdatesandtimesFractionaltimeeventsgiveanumberfrom0.0to1.0
TimeSensor{cyclelnterval1#SFTimeenabledTURE#SFBoolloopFALSE#SFBoolstartTime0#SFTimestopTime0#SFTImetime#Outputstheabsolutetimefraction_changed#outputevent}ShowcasesimpleTimeSensor.wrl
VRMLVRML中基本節(jié)點(diǎn)位置插補(bǔ)器Whenatimeisinbetweentwokeypositions,theinterpolatorcomputesanintermediateposition
TypicallyrouteintoaTransformnode'sset_translationinputPositionInterpolator{key[]#MFFloatkeyValue[]#MFVec3f}
VRMLVRML中基本節(jié)點(diǎn)環(huán)境結(jié)點(diǎn)BackgroundGroundandskycolorgradientsongroundhemisphereandskyspherePanoramaimagesonapanoramaboxBackground{groundColor[]#MFColorgroundAngle[]#MFFloatskyColor[000]#MFColorskyAngle[]#MFFloatfrontUrl“”#MFStringrightUrl““#MFStringbackUrl““#MFStringleftUrl““#MFStringtopUrl““#MFStringbottomUrl““#MFString}分別指定將被映射到空間立方體各個面上的圖像
VRMLVRML中基本節(jié)點(diǎn)環(huán)境結(jié)點(diǎn)Fogcolor-fogcolorfogType-LINEARorEXPONENTIALvisibilityRange-maximumvisibilitylimitfog
VRMLEAI(ExternalAuthoringInterface)
EAI允許一個JavaApplet主要以三種方式訪問VRML的場景:
可以發(fā)送一個事件到VRML場景中節(jié)點(diǎn)的事件入口
可以收到VRML場景中節(jié)點(diǎn)的事件出口發(fā)出的最新值當(dāng)VRML場景中節(jié)點(diǎn)的事件入口發(fā)出一個事件時,能得到一個通知,激活callback方法
VRML本身不具備網(wǎng)絡(luò)通訊能力,Java提供了該功能。Java彌補(bǔ)VRML計(jì)算,程序設(shè)計(jì)方面的不足,可以加入復(fù)雜的邏輯BSContactJforBS_CONTACTsample1sample2
VRMLEAI(ExternalAuthoringInterface)構(gòu)建NVE的機(jī)制瀏覽器VRML插件Java
AppletEAI網(wǎng)絡(luò)渲染場景改變場景計(jì)算數(shù)據(jù)共享
X3D從VRML到X3DX3D?(Extensible3D)X3D是下一代的開放式的網(wǎng)絡(luò)三維的標(biāo)準(zhǔn)整合XML:整合進(jìn)下一代網(wǎng)絡(luò)標(biāo)準(zhǔn)的關(guān)鍵分布性:輕量級的可發(fā)布的3D引擎內(nèi)核擴(kuò)展性:允許增加組件擴(kuò)展功能組件是一個個獨(dú)立的基本功能的模塊組件設(shè)置不同的層概括性:適應(yīng)指定應(yīng)用需要的標(biāo)準(zhǔn)化的擴(kuò)展概貌是組件的集合VRML的兼容性:保留了VRML97元素和內(nèi)容,并與MPEG-4等相關(guān)標(biāo)準(zhǔn)兼容傳播/鑲?cè)霊?yīng)用的能力:在PC以外的設(shè)備上使用3D
X3DX3DscenefileshaveacommonfilestructureFileheader(XML,ClassicVRML,CompressedBinary)X3DheaderstatementProfilestatementComponentstatements(optional)Metastatements(optional)X3DrootnodeX3Dscenegraphchildnodes
X3DWebGLWebGL以及Three.js框架
WebGLWebGLWebGL規(guī)范(/webgl無插件Web3D技術(shù),實(shí)現(xiàn)OpenGLES的JavaScript綁定,可以為HTML5Canvas提供硬件3D加速渲染。
WebGLWebGL用于在任何兼容的Web瀏覽器中呈現(xiàn)交互式3D和2D圖形,而無需使用插件。
WebGLWebGL編寫
WebGLWebGL編寫
webgl.htmlWebGLWebGL框架:Three.js封裝底層的WebGL,兼顧靈活性和易用性遵循CSS-3D規(guī)范的新渲染器,兼容性更好Three.js官網(wǎng)地址:/Three.js庫:/mrdoob/three.js/
WebGLThree.js編寫
Three.js程序基本框架
基本流程:創(chuàng)建渲染器(renderer)創(chuàng)建場景(scene)添加相機(jī)(camera)添加網(wǎng)格模型(mesh)添加燈光(light)渲染(render)Three.js程序基本框架
Three.js相機(jī)正交投影:對于制圖、建模軟件通常使用正交投影
Three.js相機(jī)透視投影:更接近人眼的觀察效果,大多數(shù)應(yīng)用通常采用
Aspect=width/height:5500/examples/index.html#webgl_cameraThree.js幾何形狀儲存了一個物體的頂點(diǎn)信息。WebGL需要程序員指定每個頂點(diǎn)的位置,而在Three.js中,可以通過指定一些特征來創(chuàng)建幾何形狀,
CircleGeometryConvexGeometryCubeGeometryCylinderGeometryExtrudeGeometryIcosahedronGeometryLatheGeometryOctahedronGeometryParametricGeometryPlaneGeometryPolyhedronGeometryShapeGeometrySphereGeometryTetrahedronGeometryTextGeometryTorusGeometryTorusKnotGeometryTubeGeometry使用文字形狀需要下載和引用額外的字體庫,可以在/下載。Three.js材質(zhì)是獨(dú)立于物體頂點(diǎn)信息之外的與渲染效果相關(guān)的屬性。通過設(shè)置材質(zhì)可以改變物體的顏色、紋理貼圖、光照模式等。基本材質(zhì)渲染后物體的顏色始終為該材質(zhì)的顏色,而不會由于光照產(chǎn)生明暗、陰影效果。
visible:是否可見,默認(rèn)為trueopacity:透明度side:渲染面片正面或是反面,默認(rèn)為正面THREE.FrontSide,可設(shè)置為反面THREE.BackSide,或雙面THREE.DoubleSidewireframe:是否渲染線而非面,默認(rèn)為falsecolor:十六進(jìn)制RGB顏色map:使用紋理貼圖Three.jsLambert材質(zhì)符合Lambert光照模型的材質(zhì)。只考慮漫反射而不考慮鏡面反射的效果,因而對于金屬、鏡子等需要鏡面反射效果的物體就不適應(yīng)。
newTHREE.MeshLambertMaterial(opt)color:是用來表現(xiàn)材質(zhì)對散射光的反射能力,也是最常用來設(shè)置材質(zhì)顏色的屬性。Ambient:表示對環(huán)境光的反射能力,只有當(dāng)設(shè)置了AmbientLight后,該值才是有效的。Emissive:材質(zhì)的自發(fā)光顏色。Three.jsPhong材質(zhì)Phong模型考慮了鏡面反射的效果,因此適合對于金屬、鏡面的表現(xiàn)。漫反射部分和Lambert光照模型是相同的。
newTHREE.MeshPhongMaterial(opt)specular:鏡面反射系數(shù)shininess;高光指數(shù),越大則高光光斑越小。Three.js紋理貼圖材質(zhì)導(dǎo)入紋理將材質(zhì)的map屬性設(shè)置為texture,并在完成導(dǎo)入紋理的步驟后,重新繪制畫面
Three.js紋理貼圖材質(zhì)重復(fù)貼圖紋理,指定重復(fù)方式為兩個方向(wrapS和wrapT)都重復(fù)。設(shè)置兩個方向上的重復(fù)次數(shù)
Three.js網(wǎng)格網(wǎng)格是由頂點(diǎn)、邊、面等組成的物體。創(chuàng)建物體需要指定幾何形狀和材質(zhì)。其構(gòu)造函數(shù)是:
Three.jsObject3D:各種3D物體的基類3D物體、光源等都是它的子類重要屬性:position、rotation、scale通過改變它們來實(shí)現(xiàn)各種交互效果
官方文檔:/docs/index.html#api/core/Object3DThree.js網(wǎng)格的位置、縮放、旋轉(zhuǎn)THREE.Mesh繼承自THREE.Object3D,因此包含scale、rotation、position三個屬性。修改屬性示例:
Three.js動畫每秒幀數(shù)FPS(FramesPerSecond)NTSC標(biāo)準(zhǔn)的電視FPS是30,PAL標(biāo)準(zhǔn)的電視FPS是25,電影的FPS標(biāo)準(zhǔn)為24。對于Three.js動畫,建議FPS在30到60之間。使用setInterval方法:
Three.js動畫使用requestAnimationFrame方法requestAnimationFrame只請求一幀畫面,因此在被其調(diào)用的函數(shù)中需要再次調(diào)用:有對應(yīng)的cancelAnimationFrame取消動畫:
Three.js動畫示例
Three.js動畫使用stat.js給出實(shí)時的FPS信息一個JavaScript庫:/mrdoob/stats.js/blob/master/build/stats.min.js
Three.js加載外部模型:Three.js有一系列導(dǎo)入外部文件的輔助函數(shù)/mrdoob/three.js/tree/master/examples/js/loaders參考/examples/下loader相關(guān)例子的源代碼。
Three.js加載外部模型:無材質(zhì)的模型
Three.js加載外部模型:有材質(zhì)的模型代碼中設(shè)置材質(zhì)
Three.js加載外部模型:有材質(zhì)的模型建模軟件中設(shè)置材質(zhì):導(dǎo)出.obj模型文件以及.mtl材質(zhì)文件使用MTLLoader.js與OBJMTLLoader.js,并且要按改順序引用:
Three.js加載外部模型:UV映射貼圖一個物體的模型可能很復(fù)雜,對其貼圖的一個簡單有效的方法就是UV映射,將每個面片貼的圖統(tǒng)一映射到一張紋理上,記錄每個面片貼圖在紋理上對應(yīng)的位置。uv變量的類型是vec2,一個二維的向量,可以使用uv.x和uv.y分別訪問到uv兩個維度的值。
Three.js加載外部模型:外部模型動畫
/Blender構(gòu)建動畫和導(dǎo)出模型Three.js光照:LightAmbientLight:環(huán)境光,基礎(chǔ)光源,它的顏色會被加載到整個場景和所有對象的當(dāng)前顏色上。PointLight:點(diǎn)光源,朝著所有方向都發(fā)射光線SpotLight:聚光燈光源:類型臺燈,天花板上的吊燈,手電筒等DirectionalLight:方向光,又稱無限光,從這個發(fā)出的光源可以看做是平行光.
Three.js陰影在Three.js中,能形成陰影的光源只有THREE.DirectionalLight與THREE.SpotLight;能表現(xiàn)陰影效果的材質(zhì)只有THREE.LambertMaterial與THREE.PhongMaterial在初始化時,告訴渲染器渲染陰影:對于光源以及所有要產(chǎn)生陰影的物體調(diào)用:對于接收陰影的物體調(diào)用:
Three.js陰影類比透視投影照相機(jī),對于聚光燈,需要設(shè)置shadowCameraNear、shadowCameraFar、shadowCameraFov三個值。類比正交投影照相機(jī),對于平行光,需要設(shè)置shadowCameraNear、shadowCameraFar、shadowCameraLeft、shadowCameraRight以及shadowCameraBottom六個值。為了看到陰影照相機(jī)的位置,通??梢栽谡{(diào)試時開啟light.shadowCameraVisible=true。
Three.js光照與陰影光線追蹤
Three.js后期處理編程處理流程創(chuàng)建THREE.EffectComposer(效果組合器)對象,在該對象上可以添加后期處理通道。配置THREE.EffectComposer對象,使它可以渲染場景,并應(yīng)用后期處理。
Three.js后期處理編程處理流程在渲染循環(huán)中,使用THREE.EffectComposer來渲染場景、應(yīng)用通道和輸出結(jié)果。
Three.js后期處理通道以及功能概述
Three.js后期處理通道以及功能概述
Three.js使用THREE.ShaderPass自定義效果著色器著色器可以對先前渲染的結(jié)果做修改,包括對顏色、位置等等信息,甚至可以實(shí)現(xiàn)高級的渲染效果。Three.js自帶了一些著色器程序。
Three.js使用THREE.ShaderPass自定義效果著色器WebGL的著色器程序大致與GLSL(GLShadingLanguage)相同,是一種接近C語言的代碼。WebGL基于OpenGLES,因此WebGL支持的著色器有頂點(diǎn)著色器與片元著色器。頂點(diǎn)著色器:對于每個頂點(diǎn)調(diào)用一次。可以修改頂點(diǎn)的位置或者顏色等信息,然后傳入片元著色器。片元著色器:片元是柵格化之后,在形成像素之前的數(shù)據(jù)。片元著色器是每個片元會調(diào)用一次的程序,因此,片元著色器特別適合用來做圖像后處理。
Three.js著色器頂點(diǎn)著色器用于改變每個頂點(diǎn)的位置,對于后期處理著色器位置基本不變。4種WebGL限定符const:常量attribute:從JavaScript代碼傳遞到頂點(diǎn)著色器中,每個頂點(diǎn)對應(yīng)不同的值uniform:每個頂點(diǎn)/片元對應(yīng)相同的值varying:從頂點(diǎn)著色器傳遞到片元著色器中片元著色器本身不能訪問到uv信息,需要從頂點(diǎn)著色器中傳遞過去,將其命名為vUv。按默認(rèn)的方式計(jì)算頂點(diǎn)位置。
Three.js著色器片元著色器頂點(diǎn)著色器可以用于改變每個頂點(diǎn)的位置,片段著色器可以用于定義每個像素的顏色。將vUv的兩個維度分別對應(yīng)到紅綠通道
Three.js著色器著色器代碼的位置:可以寫在單獨(dú)的文件中:頂點(diǎn)著色器的文件名后綴為.vs,片元著色器的文件名后綴為.fs。采用JQuery實(shí)現(xiàn)從服務(wù)器得到著色器,并構(gòu)建材質(zhì)
Three.js著色器HTML中的著色器代碼定義頂點(diǎn)著色器定義片元著色定義材質(zhì)
Three.js著色器自定義灰度圖著色器示例編寫自定義著色器
Three.js著色器自定義灰度圖著色器示例使用自定義著色器設(shè)置THREE.EffectComposer在渲染循環(huán)中調(diào)用composer.render(delta)方法Three.js霧:FoxExp2:隨著距離的增加,密度指數(shù)增加,參數(shù)是顏色和密度指數(shù)。THREE.Fog:密度線性變大;參數(shù)是顏色,霧開始出現(xiàn)的最小距離,以及物體被霧遮擋的最大距離。
Three.js粒子系統(tǒng)三維計(jì)算機(jī)圖形學(xué)中模擬一些特定的模糊現(xiàn)象的技術(shù)使用粒子系統(tǒng)模擬的現(xiàn)象有火、爆炸、煙、水流、火花、落葉、云、霧、雪等效果。Webglcloud
Three.js粒子系統(tǒng)使用THREE.SpriteMaterial創(chuàng)建和樣式化粒子。使用THREE.Points創(chuàng)建一個粒子集合。Three.js加載音頻參考/docs/index.html#api/audio/Audio
Three.js天空盒Skybox實(shí)際上是一個立方體對象。用戶視角只在盒子內(nèi)部活動,所以只需要渲染盒子內(nèi)部表面。天空盒子應(yīng)當(dāng)足夠大,使得攝像機(jī)在移動時看天空仍然覺得足夠遠(yuǎn)。但是,天空盒子不能超出攝像機(jī)最遠(yuǎn)可視范圍。
Three.js物理引擎Physi.js,Cannon.js,ammo.js碰撞檢測Raycaster:檢測射線與物體相交可用于鼠標(biāo)選擇物體、簡單的兩物體間碰撞檢測等/docs/index.html#api/core/Raycaster
Three.js物理引擎Physijsammo.js的包裝器。ammo.js是一個實(shí)現(xiàn)了物理引擎的庫。引入并設(shè)置屬性創(chuàng)建了一個應(yīng)用了物理效果的新場景,并設(shè)置重力
Three.js物理引擎Physijs使用Physijs的特定對象將幾何對象包裝起來在創(chuàng)建的場景上調(diào)用simulate方法Three.js輔助功能:網(wǎng)格線THREE.GridHelper坐標(biāo)軸THREE.AxisHelper
Three.js交互與輸入控制參考:/examples/下misc/controls模擬飛行:controls/fly第一人稱控制器:controls/pointerlock
Three.js交互與輸入控制TrackballControls
控制器包含相應(yīng)的控制器js庫文件:創(chuàng)建和設(shè)置控制器的屬性在動畫渲染中更新控制器
Three.js交互與輸入控制第一人稱控制器FirstPersonControls包含相應(yīng)的控制器js庫文件:設(shè)置定時器和控制器的屬性在動畫渲染中更新控制器
Three.js交互與輸入控制Raycaster射線拾取把canvas坐標(biāo)系的位置轉(zhuǎn)化為webgl坐標(biāo)系中的屏幕坐標(biāo)位置,且做了歸一化處理。調(diào)用raycaster的方法setFromCamera,可以獲得一條和相機(jī)朝向一致,從鼠標(biāo)點(diǎn)出發(fā)的射線;調(diào)用射線與物體相交的檢測函數(shù)intersectObjects。第二個參數(shù)為true,檢測子物體。演示,nginx服務(wù)器下:http://localhost:9090/city.htmlWebGLWebGL可視化編輯網(wǎng)站學(xué)習(xí)站點(diǎn):/blog/
/editor/WebGLWebGL框架
/webgl/wiki/User_Contributions#FrameworksWebGLWebGL框架示例:Thingjs/
基于WebGL的NVE網(wǎng)絡(luò)虛擬環(huán)境(NetworkedVirtualEnvironment)利用計(jì)算機(jī)圖形學(xué)、計(jì)算機(jī)網(wǎng)絡(luò)、人工智能、人機(jī)接口等計(jì)算機(jī)技術(shù)構(gòu)造的一個真實(shí)世界的模擬,地理上分布的用戶可以通過網(wǎng)絡(luò)共享該環(huán)境,并多通道地與周圍的環(huán)境以及在相互之間進(jìn)行交互。
基于WebGL的NVE分布式虛擬環(huán)境必須具有以下功能:可視模擬真實(shí)世界:三維模擬構(gòu)造真實(shí)世界;支持多媒體內(nèi)容;通過硬件給用戶觸覺等真實(shí)感受。數(shù)據(jù)共享:該環(huán)境中的數(shù)據(jù)可以在一定規(guī)則下被進(jìn)入的用戶共享。用戶應(yīng)該看到的是一個統(tǒng)一的視圖。交互性:用戶能以替身(Avatar)形式出現(xiàn),并通過一定的輸入設(shè)備與環(huán)境和其他用戶進(jìn)行交互。虛擬現(xiàn)實(shí)的3I特征浸沒感(Immersion)交互性(Interactivity)構(gòu)想性(Imagination)
基于WebGL的NVE基于WebGL的多人環(huán)境示例:一個開源多人環(huán)境DEMO源碼地址:/PMLS3/3D-multi-player演示地址:04:3000/
基于WebGL的NVE場景與用戶的交互更新典型的游戲循環(huán):JavaScript的游戲循環(huán)使用requestAnimationFrame代替whilefunctionloop(){
processInput();update();
render();requestAnimationFrame(loop);}
基于WebGL的NVE網(wǎng)絡(luò)同步幀同步在客戶端執(zhí)行,服務(wù)器轉(zhuǎn)發(fā)每個玩家的輸入進(jìn)行同步。保證各個客戶端在每個邏輯幀輸入一致,并得到相同的結(jié)果的強(qiáng)同步方案。
基于WebGL的NVE網(wǎng)絡(luò)同步狀態(tài)同步在服務(wù)器執(zhí)行同步,服務(wù)器下發(fā)游戲中每個實(shí)體當(dāng)前的狀態(tài)進(jìn)行同步。允許各個客戶端的外在表現(xiàn)不同,只確保它們內(nèi)部的邏輯狀態(tài)統(tǒng)一的弱同步方案。
基于WebGL的NVE網(wǎng)絡(luò)同步幀同步vs狀態(tài)同步有大量用戶的場景下更適合采用狀態(tài)同步,比如MMORPG。幀同步基于“同樣的輸入+同樣的代碼=同樣的輸出”原則,進(jìn)行客戶端本地計(jì)算,不需要設(shè)計(jì)復(fù)雜的網(wǎng)絡(luò)協(xié)議去同步數(shù)據(jù),適合角色狀態(tài)極為復(fù)雜的場景,比如MOBA。幀同步容易受不同平臺計(jì)算差別的影響,比如實(shí)現(xiàn)浮點(diǎn)數(shù)計(jì)算的不同方式。并且容易在客戶端作弊。幀同步更適合采用UDP實(shí)現(xiàn),主要是在網(wǎng)絡(luò)波動情況下,TCP的準(zhǔn)確重傳機(jī)制會導(dǎo)致阻塞;但是需要克服UDP的時序和丟包問題。
基于WebGL的NVE網(wǎng)絡(luò)功能所有玩家相互可見:ClientServerOtherClient“我加入游戲啦”“我把xxx在本地畫出來”“廣播:xxx加入游戲啦”
基于WebGL的NVE網(wǎng)絡(luò)功能行為分享:ClientServerOtherClient“我移動到(x,y,z)啦”“我把xxx在本地的化身移動到(x,y,z)”“廣播:xxx移動到(x,y,z)啦”
基于WebGL的NVE網(wǎng)絡(luò)功能行為分享:客戶端定時上報(bào)自身的位置信息functionloop(){
processInput();update();
render();requestAnimationFrame(loop);}reportToServer(){//判斷上次上報(bào)時間//大于一定的時間才上報(bào)移動}
基于WebGL的NVE網(wǎng)絡(luò)功能行為分享:同步游戲的狀態(tài)ClientServerOtherClient“我把OtherClient干掉啦”“我把xxx反殺啦”“???”
基于WebGL的NVE網(wǎng)絡(luò)功能行為分享:權(quán)威服務(wù)器服務(wù)器上也跑一個游戲循環(huán)客戶端只上報(bào)輸入,服務(wù)端計(jì)算結(jié)果并廣播ClientServerOtherClient“我打了OtherClient一下”“我打了xxx一下”“廣播:經(jīng)過計(jì)算,是xxx贏了”“是在下輸了”“耶”
基于WebGL的NVE網(wǎng)絡(luò)功能行為分享:權(quán)威服務(wù)器定時向所有客戶端發(fā)送場景的狀態(tài)functionloop(){
processInput(); //從客戶端讀到的輸入update();
render();
setImmediate(loop);}reportToClient(){//判斷上次同步時間//大于一定的時間同步所有客戶端}
基于WebGL的NVE采用Three.js和Socket.io的NVE工程實(shí)例
基于WebGL的NVE采用Three.js和Socket.io的NVE工程實(shí)例資源加載、場景初始化:
基于WebGL的NVE采用Three.js和Socket.io的NVE工程實(shí)例場景更新:functionloop(){
processInput();update();
render();requestAnimationFrame(loop);}
基于WebGL的NVE采用Three.js和Socket.io的NVE工程實(shí)例客戶端同步:場景渲染renderer.render(scene,camera);參考資料ECMAScript6標(biāo)準(zhǔn)介紹:/游戲編程模式:/(en)http://gpp.tkchu.me/(cn)多人Web3D開源實(shí)現(xiàn):src:/PMLS3/3D-multi-playerUdemycourse:
/course/create-a-3d-multi-player-game-using-threejs-and-socketioUdacity圖形學(xué)課程(webgl和threejs)/course/interactive-3d-graphics--cs291
WebXRWebXR簡介WebXR
是一組W3C官方組織制定的、用于支持VR和AR的標(biāo)準(zhǔn)。
WebXRDevice
API
實(shí)現(xiàn)了WebXR功能集的核心查找兼容的VR或AR輸出設(shè)備以適當(dāng)?shù)膸蕦?D場景渲染到設(shè)備(可選)將輸出鏡像到2D顯示器創(chuàng)建代表輸入控件運(yùn)動的向量
WebGL
用于將3D世界渲染到WebXR會話中通常采用WebGL框架目前最流行的是Three.js。參考資料WebXR瀏覽器支持支持WebXR標(biāo)準(zhǔn)的瀏覽器Pollyfill使用WebXR模擬器插件
WebXRWebXR簡介官方示例https://immersive-web.github.io/webxr-samples/input-tracking.html/en-US/docs/Web/API/WebXR_Device_API/FundamentalsWebXRWebXR應(yīng)用的生命周期WebXR應(yīng)用的優(yōu)勢Web的即時性Web標(biāo)準(zhǔn)的穩(wěn)定性大量Web開發(fā)人員WebXRWebXR應(yīng)用的開發(fā)方式使用封裝好的第三方庫WebGL+WebXRapi使用WebAssembly,傳統(tǒng)3d引擎+emscripten,參考資料W3C工作組/immersive-web/W3CWebXR標(biāo)準(zhǔn):/TR/webxr/支持WebVR的瀏覽器情況:webvr.rocks/MozillaWebXR設(shè)備接口參考/zh-CN/docs/Web/API/WebXR_Device_API官方示例:https://immersive-web.github.io/webxr-samples/對應(yīng)的openxr/openxr/A-Frame框架簡介
MozillaVR
團(tuán)隊(duì)構(gòu)建的一個基于HTML,用來構(gòu)建VR和AR應(yīng)用框架?;赥hree.js
來提供一個聲明式、可擴(kuò)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國包塑金屬軟管端接式管接頭數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025年中國雪蓮石瓷磚市場調(diào)查研究報(bào)告
- 2025年中國康寶高效潔廁劑市場調(diào)查研究報(bào)告
- 2025年中國LED小手電市場調(diào)查研究報(bào)告
- 2025至2031年中國重型窗鉸行業(yè)投資前景及策略咨詢研究報(bào)告
- CFETR等離子體控制系統(tǒng)實(shí)時數(shù)據(jù)管理與異常調(diào)度研究設(shè)計(jì)
- 2025年度車庫設(shè)備租賃與維護(hù)服務(wù)合同4篇
- 二零二五版農(nóng)機(jī)作業(yè)租賃與農(nóng)業(yè)產(chǎn)業(yè)鏈整合合同4篇
- 二零二四年度新能源汽車推廣項(xiàng)目詢價(jià)合同3篇
- 2025年度電商運(yùn)營兼職人員權(quán)益保障合同3篇
- 《健康體檢知識》課件
- 2023年護(hù)理人員分層培訓(xùn)、考核計(jì)劃表
- 生產(chǎn)計(jì)劃主管述職報(bào)告
- GB/T 44769-2024能源互聯(lián)網(wǎng)數(shù)據(jù)平臺技術(shù)規(guī)范
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫附答案
- 中西方校服文化差異研究
- 《子宮肉瘤》課件
- 《準(zhǔn)媽媽衣食住行》課件
- 給男友的道歉信10000字(十二篇)
- 客人在酒店受傷免責(zé)承諾書范本
- 練字本方格模板
評論
0/150
提交評論