# ✨ VueJS 3 + ViteJS + ThreeJS ⚡ I wanted to try to write a lib similar to [react-three-fiber](https://github.com/react-spring/react-three-fiber) but for VueJS.
Demos : https://troisjs.github.io/trois/ I started from scratch... I don't know if I will have time to maintain this, but feel free to participate :) I will try to rewrite some of my [WebGL demos](https://codepen.io/collection/AGZywR) to see if this little toy can do the job. *Trois* is a french word, it means *Three*. ## HMR Thanks to VueJS/ViteJS, **TroisJS use watchers and HMR to update ThreeJS objects when you update a template**. This means the result in your browser will be automatically updated without reloading all the stuff. **This is really helpful when you are creating a TroisJS Scene**. - [ ] HMR - [x] Scene : add or remove objects (lights, meshes) - [x] PerspectiveCamera : aspect, far, fov, near, position - [x] Light : castShadow, color, intensity, position, target - [x] SpotLight : angle, decay, distance, penumbra - [x] Material : color, depthTest, depthWrite, fog, opacity, transparent - [x] StandardMaterial : emissive, emissiveIntensity, metalness, roughness - [x] Mesh : position, rotation, scale, castShadow, receiveShadow - [x] Box (geometry replace) : size, width, height, depth - [x] Plane (geometry replace) : width, height, widthSegments, heightSegments - [x] Sphere (geometry replace) : radius, widthSegments, heightSegments - [x] Text (geometry replace) : all props except fontSrc (wip) - [ ] ... ## Features - [ ] Lights - [x] AmbientLight - [x] DirectionalLight - [x] PointLight - [x] SpotLight - [ ] ... - [ ] Materials - [x] Basic - [x] Lambert - [x] Phong - [x] Standard - [x] Physical - [x] SubSurface - [ ] ... - [ ] Geometries - [x] Box - [x] Sphere - [ ] ... - [ ] Meshes - [x] Box - [ ] Image (wip) - [x] InstancedMesh - [x] Plane - [x] Sphere - [x] Sprite - [x] Text - [ ] ... - [ ] Post Processing - [x] EffectComposer - [x] Renderpass - [x] UnrealBloomPass - [ ] ... ## Installation yarn add troisjs ## Vue plugin ```js import { TroisJSVuePlugin } from 'troisjs'; app.use(TroisJSVuePlugin); ``` ## PoC I first made a simple *Proof of Concept*, take a look at [Demo1.vue](/src/components/demos/Demo1.vue) : ```html