UNPKG

aframe-raytrace-component

Version:

An A-Frame component for placing raytraced surfaces in a scene.

1 lines 1.44 kB
!function(e){function a(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,a),i.loaded=!0,i.exports}var t={};return a.m=e,a.c=t,a.p="",a(0)}([function(e,a){if("undefined"==typeof AFRAME)throw new Error("Component attempted to register before AFRAME was available.");AFRAME.registerComponent("raytrace",{schema:{shader:{type:"selector"},transparent:{type:"boolean",default:!1},backside:{type:"boolean",default:!1}},init:function(){this.myMesh=this.el.getObject3D("mesh"),this.myShaderMaterial=new THREE.ShaderMaterial({vertexShader:"precision mediump float;\nvarying vec3 localSurfacePos;\nvoid main() {\ngl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\nlocalSurfacePos = position;\n}",uniforms:{time:{value:0},localCameraPos:{value:new THREE.Vector3(0,0,0)}}}),this.myMesh.material=this.myShaderMaterial;var e=this;this.myMesh.onBeforeRender=function(a,t,r,i,o,n){e.myShaderMaterial.uniforms.localCameraPos.value.setFromMatrixPosition(r.matrixWorld),e.myMesh.worldToLocal(e.myShaderMaterial.uniforms.localCameraPos.value)}},remove:function(){this.myMesh.onBeforeRender=null},update:function(e){this.myShaderMaterial.fragmentShader=this.data.shader.textContent,this.myShaderMaterial.side=this.data.backside?THREE.BackSide:THREE.FrontSide,this.myShaderMaterial.transparent=this.data.transparent},tick:function(e,a){this.myShaderMaterial.uniforms.time.value=e}})}]);