cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
2 lines (1 loc) • 5.66 kB
JavaScript
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var t,e,r=require("./Node.js"),i=require("./Light.js"),n=require("./Camera.js"),a=require("./math/BoundingBox.js"),s=require("./core/util.js"),o=require("./glmatrix/mat4.js"),u=require("./core/LRU.js"),h=require("./math/Matrix4.js"),l=o.default.create(),f=o.default.create(),d={};function g(t){var e=[],r=Object.keys(t);r.sort();for(var i=0;i<r.length;i++){var n=r[i];e.push(n+" "+t[n])}var a=e.join("\n");if(d[a])return d[a];var o=s.default.genGUID();return d[a]=o,o}function m(){this.opaque=[],this.transparent=[],this._opaqueCount=0,this._transparentCount=0}function c(t,e){if(e.castShadow&&!t.castShadow)return!0}m.prototype.startCount=function(){this._opaqueCount=0,this._transparentCount=0},m.prototype.add=function(t,e){e?this.transparent[this._transparentCount++]=t:this.opaque[this._opaqueCount++]=t},m.prototype.endCount=function(){this.transparent.length=this._transparentCount,this.opaque.length=this._opaqueCount};var p=r.default.extend((function(){return{material:null,lights:[],viewBoundingBoxLastFrame:new a.default,shadowUniforms:{},_cameraList:[],_lightUniforms:{},_previousLightNumber:{},_lightNumber:{},_lightProgramKeys:{},_nodeRepository:{},_renderLists:new u.default(20)}}),(function(){this._scene=this}),{addToScene:function(t){t instanceof n.default?(this._cameraList.length,this._cameraList.push(t)):t instanceof i.default&&this.lights.push(t),t.name&&(this._nodeRepository[t.name]=t)},removeFromScene:function(t){var e;t instanceof n.default?(e=this._cameraList.indexOf(t))>=0&&this._cameraList.splice(e,1):t instanceof i.default&&(e=this.lights.indexOf(t))>=0&&this.lights.splice(e,1),t.name&&delete this._nodeRepository[t.name]},getNode:function(t){return this._nodeRepository[t]},setMainCamera:function(t){var e=this._cameraList.indexOf(t);e>=0&&this._cameraList.splice(e,1),this._cameraList.unshift(t)},getMainCamera:function(){return this._cameraList[0]},getLights:function(){return this.lights},updateLights:function(){var t=this.lights;this._previousLightNumber=this._lightNumber;for(var e={},r=0;r<t.length;r++){var i=t[r];if(!i.invisible){var n=i.group;e[n]||(e[n]={}),e[n][i.type]=e[n][i.type]||0,e[n][i.type]++}}for(var a in this._lightNumber=e,e)this._lightProgramKeys[a]=g(e[a]);this._updateLightUniforms()},cloneNode:function(t){var e=t.clone(),r={};return function t(e,i){r[e.__uid__]=i;for(var n=0;n<e._children.length;n++){t(e._children[n],i._children[n])}}(t,e),e.traverse((function(t){t.skeleton&&(t.skeleton=t.skeleton.clone(r)),t.material&&(t.material=t.material.clone())})),e},updateRenderList:function(t,e){var r=t.__uid__,i=this._renderLists.get(r);i||(i=new m,this._renderLists.put(r,i)),i.startCount(),e&&(this.viewBoundingBoxLastFrame.min.set(1/0,1/0,1/0),this.viewBoundingBoxLastFrame.max.set(-1/0,-1/0,-1/0));var n=this.material&&this.material.transparent||!1;return this._doUpdateRenderList(this,t,n,i,e),i.endCount(),i},getRenderList:function(t){return this._renderLists.get(t.__uid__)},_doUpdateRenderList:function(t,e,r,i,n){if(!t.invisible)for(var a=0;a<t._children.length;a++){var s=t._children[a];if(s.isRenderable()){var u=s.isSkinnedMesh()?l:s.worldTransform.array,h=s.geometry;o.default.multiplyAffine(f,e.viewMatrix.array,u),(n&&!h.boundingBox||!this.isFrustumCulled(s,e,f))&&i.add(s,s.material.transparent||r)}s._children.length>0&&this._doUpdateRenderList(s,e,r,i,n)}},isFrustumCulled:(t=new a.default,e=new h.default,function(r,i,n){var a=r.boundingBox;if(a||(a=r.skeleton&&r.skeleton.boundingBox?r.skeleton.boundingBox:r.geometry.boundingBox),!a)return!1;if(e.array=n,t.transformFrom(a,e),r.castShadow&&this.viewBoundingBoxLastFrame.union(t),r.frustumCulling){if(!t.intersectBoundingBox(i.frustum.boundingBox))return!0;e.array=i.projectionMatrix.array,t.max.array[2]>0&&t.min.array[2]<0&&(t.max.array[2]=-1e-20),t.applyProjection(e);var s=t.min.array,o=t.max.array;if(o[0]<-1||s[0]>1||o[1]<-1||s[1]>1||o[2]<-1||s[2]>1)return!0}return!1}),_updateLightUniforms:function(){var t=this.lights;t.sort(c);var e=this._lightUniforms;for(var r in e)for(var i in e[r])e[r][i].value.length=0;for(var n=0;n<t.length;n++){var a=t[n];if(!a.invisible){r=a.group;for(var i in a.uniformTemplates){var s=a.uniformTemplates[i],o=s.value(a);if(null!=o){e[r]||(e[r]={}),e[r][i]||(e[r][i]={type:"",value:[]});var u=e[r][i];switch(u.type=s.type+"v",s.type){case"1i":case"1f":case"t":u.value.push(o);break;case"2f":case"3f":case"4f":for(var h=0;h<o.length;h++)u.value.push(o[h])}}}}}},getLightGroups:function(){var t=[];for(var e in this._lightNumber)t.push(e);return t},getNumberChangedLightGroups:function(){var t=[];for(var e in this._lightNumber)this.isLightNumberChanged(e)&&t.push(e);return t},isLightNumberChanged:function(t){var e=this._previousLightNumber,r=this._lightNumber;for(var i in r[t]){if(!e[t])return!0;if(r[t][i]!==e[t][i])return!0}for(var i in e[t]){if(!r[t])return!0;if(r[t][i]!==e[t][i])return!0}return!1},getLightsNumbers:function(t){return this._lightNumber[t]},getProgramKey:function(t){return this._lightProgramKeys[t]},setLightUniforms:function(){function t(t,e,r){for(var i in t){var n=t[i];if("tv"===n.type){if(!e.hasUniform(i))continue;for(var a=[],s=0;s<n.value.length;s++){var o=n.value[s],u=e.takeCurrentTextureSlot(r,o);a.push(u)}e.setUniform(r.gl,"1iv",i,a)}else e.setUniform(r.gl,n.type,i,n.value)}}return function(e,r,i){t(this._lightUniforms[r],e,i),t(this.shadowUniforms,e,i)}}(),dispose:function(){this.material=null,this._opaqueList=[],this._transparentList=[],this.lights=[],this._lightUniforms={},this._lightNumber={},this._nodeRepository={}}});exports.default=p;