UNPKG

aframe-raytrace-component

Version:

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

104 lines (79 loc) 3.02 kB
/******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports) { if (typeof AFRAME === 'undefined') { throw new Error('Component attempted to register before AFRAME was available.'); } AFRAME.registerComponent('raytrace', { schema: { shader:{type:'selector'}, transparent:{type:'boolean',default:false}, backside:{type:'boolean',default:false} }, init: function () { this.myMesh = this.el.getObject3D('mesh'); this.myShaderMaterial = new THREE.ShaderMaterial({ vertexShader: "precision mediump float;\n"+ "varying vec3 localSurfacePos;\n"+ "void main() {\n"+ "gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n"+ "localSurfacePos = position;\n"+ "}", uniforms:{ time:{value:0}, localCameraPos:{value:new THREE.Vector3(0,0,0)} }, }); this.myMesh.material = this.myShaderMaterial; var self = this; this.myMesh.onBeforeRender = function(renderer,scene,camera,geometry,material,group){ self.myShaderMaterial.uniforms.localCameraPos.value.setFromMatrixPosition(camera.matrixWorld); self.myMesh.worldToLocal(self.myShaderMaterial.uniforms.localCameraPos.value); }; }, remove:function(){ this.myMesh.onBeforeRender = null; }, update: function (oldData) { 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(time,timeDelta){ this.myShaderMaterial.uniforms.time.value = time; } }); /***/ }) /******/ ]);