├── .editorconfig
├── .eslintignore
├── .eslintrc
├── .gitignore
├── README.md
├── demos
├── 2D-Gradient-Noise-Derivatives
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── 2D-Value-Noise-Derivatives
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── 3D-Noise-Analytical-Normals
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ ├── vertexShader.glsl
│ │ └── visulFbmd.glsl
├── 3D-Value-Noise-Derivatives
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── Animate-Circle-Swing
│ ├── README.md
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── Animate-My-Logo
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── Animate-Square-Swing
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── BigWing-Road-Light
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── Circle-Bubble-Up
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── Clock-Line-Circle
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── Draw-Path-Line
│ ├── images
│ │ └── wechat.jpg
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── Draw-Simple-Line
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── Glow-Line-Volumetric
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── Glow-Line-With-Music
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── Just-Draw-Simple-Line
│ ├── README.md
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── Line-Path-Style
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── MonteCarlo-Method-Heart
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── Perlin-Noise-Fire-Ball
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── Perlin-Noise-Function
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── Pseudo-Random-Generate
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── RayMarching-FBM-Glowing-Circle
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── RayMarching-Volumetric-FBM
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── Space-Sky-PassEffect
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── fbm-volumetric-clouds
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── iq-compositing
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── iq-eye
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── iq-heart
│ ├── README.md
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── iq-palette
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── noise-sphere-moon
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── noise-value-2d
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader copy.glsl
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
├── polygon-ray-tracing
│ ├── index.html
│ ├── js
│ │ ├── index.js
│ │ └── shader.js
│ └── studio
│ │ ├── .eslintrc
│ │ ├── fragmentShader.glsl
│ │ ├── shader.js
│ │ └── vertexShader.glsl
└── simple-value
│ ├── index.html
│ ├── js
│ ├── index.js
│ └── shader.js
│ └── studio
│ ├── .eslintrc
│ ├── fragmentShader.glsl
│ ├── shader.js
│ └── vertexShader.glsl
├── doc
├── TASKLINE.md
└── WORDS.md
├── lib
├── dat.gui
│ ├── .babelrc
│ ├── API.md
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── bower.json
│ ├── build
│ │ ├── dat.gui.css
│ │ ├── dat.gui.js
│ │ ├── dat.gui.js.map
│ │ ├── dat.gui.min.js
│ │ ├── dat.gui.module.js
│ │ └── dat.gui.module.js.map
│ ├── example.html
│ ├── licenseBanner.txt
│ ├── package.json
│ ├── rollup.config.js
│ ├── rollup.config.min.js
│ ├── src
│ │ └── dat
│ │ │ ├── color
│ │ │ ├── Color.js
│ │ │ ├── interpret.js
│ │ │ ├── math.js
│ │ │ └── toString.js
│ │ │ ├── controllers
│ │ │ ├── BooleanController.js
│ │ │ ├── ColorController.js
│ │ │ ├── Controller.js
│ │ │ ├── ControllerFactory.js
│ │ │ ├── FunctionController.js
│ │ │ ├── NumberController.js
│ │ │ ├── NumberControllerBox.js
│ │ │ ├── NumberControllerSlider.js
│ │ │ ├── OptionController.js
│ │ │ └── StringController.js
│ │ │ ├── dom
│ │ │ ├── CenteredDiv.js
│ │ │ └── dom.js
│ │ │ ├── gui
│ │ │ ├── GUI.js
│ │ │ ├── _structure.scss
│ │ │ ├── saveDialogue.html.js
│ │ │ └── style.scss
│ │ │ ├── index.js
│ │ │ └── utils
│ │ │ ├── common.js
│ │ │ ├── css.js
│ │ │ └── requestAnimationFrame.js
│ ├── tests
│ │ ├── index.html
│ │ ├── jquery.js
│ │ ├── qunit.css
│ │ └── qunit.js
│ └── tmp
│ │ ├── bundle.js
│ │ ├── common.js
│ │ ├── es6.js
│ │ ├── index.html
│ │ ├── package.json
│ │ ├── rollup.config.js
│ │ └── webpack.config.js
├── stats.js
│ ├── LICENSE
│ ├── build
│ │ └── stats.min.js
│ ├── package.json
│ └── src
│ │ └── Stats.js
├── three
│ ├── LICENSE
│ ├── README.md
│ ├── bower.json
│ ├── build
│ │ ├── three.js
│ │ ├── three.min.js
│ │ └── three.module.js
│ ├── examples
│ │ ├── fonts
│ │ │ ├── LICENSE
│ │ │ ├── README
│ │ │ ├── droid
│ │ │ │ ├── NOTICE
│ │ │ │ ├── README.txt
│ │ │ │ ├── droid_sans_bold.typeface.json
│ │ │ │ ├── droid_sans_mono_regular.typeface.json
│ │ │ │ ├── droid_sans_regular.typeface.json
│ │ │ │ ├── droid_serif_bold.typeface.json
│ │ │ │ └── droid_serif_regular.typeface.json
│ │ │ ├── gentilis_bold.typeface.json
│ │ │ ├── gentilis_regular.typeface.json
│ │ │ ├── helvetiker_bold.typeface.json
│ │ │ ├── helvetiker_regular.typeface.json
│ │ │ ├── optimer_bold.typeface.json
│ │ │ ├── optimer_regular.typeface.json
│ │ │ └── ttf
│ │ │ │ └── kenpixel.ttf
│ │ └── js
│ │ │ ├── AnimationClipCreator.js
│ │ │ ├── BufferGeometryUtils.js
│ │ │ ├── Car.js
│ │ │ ├── Cloth.js
│ │ │ ├── ConvexObjectBreaker.js
│ │ │ ├── CurveExtras.js
│ │ │ ├── Detector.js
│ │ │ ├── GPUComputationRenderer.js
│ │ │ ├── GPUParticleSystem.js
│ │ │ ├── Gyroscope.js
│ │ │ ├── ImprovedNoise.js
│ │ │ ├── MD2Character.js
│ │ │ ├── MD2CharacterComplex.js
│ │ │ ├── MarchingCubes.js
│ │ │ ├── MorphAnimMesh.js
│ │ │ ├── MorphBlendMesh.js
│ │ │ ├── Ocean.js
│ │ │ ├── Octree.js
│ │ │ ├── PRNG.js
│ │ │ ├── ParametricGeometries.js
│ │ │ ├── QuickHull.js
│ │ │ ├── RollerCoaster.js
│ │ │ ├── ShaderGodRays.js
│ │ │ ├── ShaderSkin.js
│ │ │ ├── ShaderTerrain.js
│ │ │ ├── ShaderToon.js
│ │ │ ├── SimplexNoise.js
│ │ │ ├── TimelinerController.js
│ │ │ ├── TypedArrayUtils.js
│ │ │ ├── UCSCharacter.js
│ │ │ ├── Volume.js
│ │ │ ├── VolumeSlice.js
│ │ │ ├── animation
│ │ │ ├── CCDIKSolver.js
│ │ │ └── MMDPhysics.js
│ │ │ ├── cameras
│ │ │ └── CinematicCamera.js
│ │ │ ├── controls
│ │ │ ├── DeviceOrientationControls.js
│ │ │ ├── DragControls.js
│ │ │ ├── EditorControls.js
│ │ │ ├── FirstPersonControls.js
│ │ │ ├── FlyControls.js
│ │ │ ├── OrbitControls.js
│ │ │ ├── OrthographicTrackballControls.js
│ │ │ ├── PointerLockControls.js
│ │ │ ├── TrackballControls.js
│ │ │ ├── TransformControls.js
│ │ │ └── VRControls.js
│ │ │ ├── crossfade
│ │ │ ├── gui.js
│ │ │ ├── scenes.js
│ │ │ └── transition.js
│ │ │ ├── curves
│ │ │ ├── NURBSCurve.js
│ │ │ ├── NURBSSurface.js
│ │ │ └── NURBSUtils.js
│ │ │ ├── effects
│ │ │ ├── AnaglyphEffect.js
│ │ │ ├── AsciiEffect.js
│ │ │ ├── OutlineEffect.js
│ │ │ ├── ParallaxBarrierEffect.js
│ │ │ ├── PeppersGhostEffect.js
│ │ │ ├── StereoEffect.js
│ │ │ └── VREffect.js
│ │ │ ├── exporters
│ │ │ ├── GLTFExporter.js
│ │ │ ├── MMDExporter.js
│ │ │ ├── OBJExporter.js
│ │ │ ├── STLBinaryExporter.js
│ │ │ ├── STLExporter.js
│ │ │ └── TypedGeometryExporter.js
│ │ │ ├── geometries
│ │ │ ├── ConvexGeometry.js
│ │ │ ├── DecalGeometry.js
│ │ │ ├── TeapotBufferGeometry.js
│ │ │ ├── hilbert2D.js
│ │ │ └── hilbert3D.js
│ │ │ ├── libs
│ │ │ ├── ammo.js
│ │ │ ├── dat.gui.min.js
│ │ │ ├── gunzip.min.js
│ │ │ ├── inflate.min.js
│ │ │ ├── jszip.min.js
│ │ │ ├── mmdparser.min.js
│ │ │ ├── msgpack-js.js
│ │ │ ├── o3dgc.js
│ │ │ ├── opentype.min.js
│ │ │ ├── stats.min.js
│ │ │ ├── system.min.js
│ │ │ ├── timeliner_gui.min.js
│ │ │ └── tween.min.js
│ │ │ ├── lights
│ │ │ └── RectAreaLightUniformsLib.js
│ │ │ ├── loaders
│ │ │ ├── 3MFLoader.js
│ │ │ ├── AMFLoader.js
│ │ │ ├── AWDLoader.js
│ │ │ ├── AssimpJSONLoader.js
│ │ │ ├── AssimpLoader.js
│ │ │ ├── BVHLoader.js
│ │ │ ├── BabylonLoader.js
│ │ │ ├── BinaryLoader.js
│ │ │ ├── ColladaLoader.js
│ │ │ ├── DDSLoader.js
│ │ │ ├── EXRLoader.js
│ │ │ ├── FBXLoader.js
│ │ │ ├── GCodeLoader.js
│ │ │ ├── GLTFLoader.js
│ │ │ ├── HDRCubeTextureLoader.js
│ │ │ ├── KMZLoader.js
│ │ │ ├── LoaderSupport.js
│ │ │ ├── MD2Loader.js
│ │ │ ├── MMDLoader.js
│ │ │ ├── MTLLoader.js
│ │ │ ├── NRRDLoader.js
│ │ │ ├── OBJLoader.js
│ │ │ ├── OBJLoader2.js
│ │ │ ├── PCDLoader.js
│ │ │ ├── PDBLoader.js
│ │ │ ├── PLYLoader.js
│ │ │ ├── PRWMLoader.js
│ │ │ ├── PVRLoader.js
│ │ │ ├── PlayCanvasLoader.js
│ │ │ ├── RGBELoader.js
│ │ │ ├── STLLoader.js
│ │ │ ├── SVGLoader.js
│ │ │ ├── TDSLoader.js
│ │ │ ├── TGALoader.js
│ │ │ ├── TTFLoader.js
│ │ │ ├── UTF8Loader.js
│ │ │ ├── VRMLLoader.js
│ │ │ ├── VTKLoader.js
│ │ │ ├── XLoader.js
│ │ │ ├── ctm
│ │ │ │ ├── CTMLoader.js
│ │ │ │ ├── CTMWorker.js
│ │ │ │ ├── ctm.js
│ │ │ │ ├── license
│ │ │ │ │ ├── OpenCTM.txt
│ │ │ │ │ ├── js-lzma.txt
│ │ │ │ │ └── js-openctm.txt
│ │ │ │ └── lzma.js
│ │ │ ├── deprecated
│ │ │ │ └── LegacyGLTFLoader.js
│ │ │ ├── draco
│ │ │ │ ├── DRACOLoader.js
│ │ │ │ ├── draco_decoder.js
│ │ │ │ ├── draco_decoder.wasm
│ │ │ │ └── draco_wasm_wrapper.js
│ │ │ └── sea3d
│ │ │ │ ├── SEA3D.js
│ │ │ │ ├── SEA3DDeflate.js
│ │ │ │ ├── SEA3DLZMA.js
│ │ │ │ ├── SEA3DLegacy.js
│ │ │ │ ├── SEA3DLoader.js
│ │ │ │ ├── o3dgc
│ │ │ │ └── SEA3DGC.js
│ │ │ │ └── physics
│ │ │ │ ├── SEA3DAmmo.js
│ │ │ │ ├── SEA3DAmmoLoader.js
│ │ │ │ └── SEA3DRigidBody.js
│ │ │ ├── math
│ │ │ ├── ColorConverter.js
│ │ │ └── Lut.js
│ │ │ ├── modifiers
│ │ │ ├── BufferSubdivisionModifier.js
│ │ │ ├── ExplodeModifier.js
│ │ │ ├── SimplifyModifier.js
│ │ │ ├── SubdivisionModifier.js
│ │ │ └── TessellateModifier.js
│ │ │ ├── nodes
│ │ │ ├── AttributeNode.js
│ │ │ ├── ConstNode.js
│ │ │ ├── FunctionCallNode.js
│ │ │ ├── FunctionNode.js
│ │ │ ├── GLNode.js
│ │ │ ├── InputNode.js
│ │ │ ├── NodeBuilder.js
│ │ │ ├── NodeLib.js
│ │ │ ├── NodeMaterial.js
│ │ │ ├── RawNode.js
│ │ │ ├── TempNode.js
│ │ │ ├── VarNode.js
│ │ │ ├── accessors
│ │ │ │ ├── CameraNode.js
│ │ │ │ ├── ColorsNode.js
│ │ │ │ ├── LightNode.js
│ │ │ │ ├── NormalNode.js
│ │ │ │ ├── PositionNode.js
│ │ │ │ ├── ReflectNode.js
│ │ │ │ ├── ScreenUVNode.js
│ │ │ │ └── UVNode.js
│ │ │ ├── inputs
│ │ │ │ ├── ColorNode.js
│ │ │ │ ├── CubeTextureNode.js
│ │ │ │ ├── FloatNode.js
│ │ │ │ ├── IntNode.js
│ │ │ │ ├── Matrix4Node.js
│ │ │ │ ├── ReflectorNode.js
│ │ │ │ ├── ScreenNode.js
│ │ │ │ ├── TextureNode.js
│ │ │ │ ├── Vector2Node.js
│ │ │ │ ├── Vector3Node.js
│ │ │ │ └── Vector4Node.js
│ │ │ ├── materials
│ │ │ │ ├── PhongNode.js
│ │ │ │ ├── PhongNodeMaterial.js
│ │ │ │ ├── SpriteNode.js
│ │ │ │ ├── SpriteNodeMaterial.js
│ │ │ │ ├── StandardNode.js
│ │ │ │ └── StandardNodeMaterial.js
│ │ │ ├── math
│ │ │ │ ├── Math1Node.js
│ │ │ │ ├── Math2Node.js
│ │ │ │ ├── Math3Node.js
│ │ │ │ └── OperatorNode.js
│ │ │ ├── postprocessing
│ │ │ │ └── NodePass.js
│ │ │ └── utils
│ │ │ │ ├── BlurNode.js
│ │ │ │ ├── BumpNode.js
│ │ │ │ ├── ColorAdjustmentNode.js
│ │ │ │ ├── JoinNode.js
│ │ │ │ ├── LuminanceNode.js
│ │ │ │ ├── NoiseNode.js
│ │ │ │ ├── NormalMapNode.js
│ │ │ │ ├── ResolutionNode.js
│ │ │ │ ├── RoughnessToBlinnExponentNode.js
│ │ │ │ ├── SwitchNode.js
│ │ │ │ ├── TimerNode.js
│ │ │ │ ├── UVTransformNode.js
│ │ │ │ └── VelocityNode.js
│ │ │ ├── objects
│ │ │ ├── Reflector.js
│ │ │ ├── ReflectorRTT.js
│ │ │ ├── Refractor.js
│ │ │ ├── ShadowMesh.js
│ │ │ ├── Sky.js
│ │ │ ├── Water.js
│ │ │ └── Water2.js
│ │ │ ├── pmrem
│ │ │ ├── PMREMCubeUVPacker.js
│ │ │ └── PMREMGenerator.js
│ │ │ ├── postprocessing
│ │ │ ├── AdaptiveToneMappingPass.js
│ │ │ ├── BloomPass.js
│ │ │ ├── BokehPass.js
│ │ │ ├── ClearPass.js
│ │ │ ├── CubeTexturePass.js
│ │ │ ├── DotScreenPass.js
│ │ │ ├── EffectComposer.js
│ │ │ ├── FilmPass.js
│ │ │ ├── GlitchPass.js
│ │ │ ├── MaskPass.js
│ │ │ ├── OutlinePass.js
│ │ │ ├── RenderPass.js
│ │ │ ├── SAOPass.js
│ │ │ ├── SMAAPass.js
│ │ │ ├── SSAARenderPass.js
│ │ │ ├── SSAOPass.js
│ │ │ ├── SavePass.js
│ │ │ ├── ShaderPass.js
│ │ │ ├── TAARenderPass.js
│ │ │ ├── TexturePass.js
│ │ │ └── UnrealBloomPass.js
│ │ │ ├── renderers
│ │ │ ├── CSS2DRenderer.js
│ │ │ ├── CSS3DRenderer.js
│ │ │ ├── CanvasRenderer.js
│ │ │ ├── Projector.js
│ │ │ ├── RaytracingRenderer.js
│ │ │ ├── RaytracingWorker.js
│ │ │ ├── SVGRenderer.js
│ │ │ ├── SoftwareRenderer.js
│ │ │ └── WebGLDeferredRenderer.js
│ │ │ ├── shaders
│ │ │ ├── BasicShader.js
│ │ │ ├── BleachBypassShader.js
│ │ │ ├── BlendShader.js
│ │ │ ├── BokehShader.js
│ │ │ ├── BokehShader2.js
│ │ │ ├── BrightnessContrastShader.js
│ │ │ ├── ColorCorrectionShader.js
│ │ │ ├── ColorifyShader.js
│ │ │ ├── ConvolutionShader.js
│ │ │ ├── CopyShader.js
│ │ │ ├── DOFMipMapShader.js
│ │ │ ├── DepthLimitedBlurShader.js
│ │ │ ├── DigitalGlitch.js
│ │ │ ├── DotScreenShader.js
│ │ │ ├── FXAAShader.js
│ │ │ ├── FilmShader.js
│ │ │ ├── FocusShader.js
│ │ │ ├── FreiChenShader.js
│ │ │ ├── FresnelShader.js
│ │ │ ├── GammaCorrectionShader.js
│ │ │ ├── HorizontalBlurShader.js
│ │ │ ├── HorizontalTiltShiftShader.js
│ │ │ ├── HueSaturationShader.js
│ │ │ ├── KaleidoShader.js
│ │ │ ├── LuminosityHighPassShader.js
│ │ │ ├── LuminosityShader.js
│ │ │ ├── MirrorShader.js
│ │ │ ├── NormalMapShader.js
│ │ │ ├── OceanShaders.js
│ │ │ ├── ParallaxShader.js
│ │ │ ├── RGBShiftShader.js
│ │ │ ├── SAOShader.js
│ │ │ ├── SMAAShader.js
│ │ │ ├── SSAOShader.js
│ │ │ ├── SepiaShader.js
│ │ │ ├── SobelOperatorShader.js
│ │ │ ├── TechnicolorShader.js
│ │ │ ├── ToneMapShader.js
│ │ │ ├── TriangleBlurShader.js
│ │ │ ├── UnpackDepthRGBAShader.js
│ │ │ ├── VerticalBlurShader.js
│ │ │ ├── VerticalTiltShiftShader.js
│ │ │ ├── VignetteShader.js
│ │ │ └── WaterRefractionShader.js
│ │ │ ├── utils
│ │ │ ├── GeometryUtils.js
│ │ │ ├── ShadowMapViewer.js
│ │ │ └── UVsDebug.js
│ │ │ └── vr
│ │ │ ├── DaydreamController.js
│ │ │ ├── GearVRController.js
│ │ │ ├── PaintViveController.js
│ │ │ ├── ViveController.js
│ │ │ └── WebVR.js
│ ├── package.json
│ └── src
│ │ ├── Three.Legacy.js
│ │ ├── Three.js
│ │ ├── animation
│ │ ├── AnimationAction.js
│ │ ├── AnimationClip.js
│ │ ├── AnimationMixer.js
│ │ ├── AnimationObjectGroup.js
│ │ ├── AnimationUtils.js
│ │ ├── KeyframeTrack.js
│ │ ├── PropertyBinding.js
│ │ ├── PropertyMixer.js
│ │ └── tracks
│ │ │ ├── BooleanKeyframeTrack.js
│ │ │ ├── ColorKeyframeTrack.js
│ │ │ ├── NumberKeyframeTrack.js
│ │ │ ├── QuaternionKeyframeTrack.js
│ │ │ ├── StringKeyframeTrack.js
│ │ │ └── VectorKeyframeTrack.js
│ │ ├── audio
│ │ ├── Audio.js
│ │ ├── AudioAnalyser.js
│ │ ├── AudioContext.js
│ │ ├── AudioListener.js
│ │ └── PositionalAudio.js
│ │ ├── cameras
│ │ ├── ArrayCamera.js
│ │ ├── Camera.js
│ │ ├── CubeCamera.js
│ │ ├── OrthographicCamera.js
│ │ ├── PerspectiveCamera.js
│ │ └── StereoCamera.js
│ │ ├── constants.js
│ │ ├── core
│ │ ├── BufferAttribute.js
│ │ ├── BufferGeometry.js
│ │ ├── Clock.js
│ │ ├── DirectGeometry.js
│ │ ├── EventDispatcher.js
│ │ ├── Face3.js
│ │ ├── Geometry.js
│ │ ├── InstancedBufferAttribute.js
│ │ ├── InstancedBufferGeometry.js
│ │ ├── InstancedInterleavedBuffer.js
│ │ ├── InterleavedBuffer.js
│ │ ├── InterleavedBufferAttribute.js
│ │ ├── Layers.js
│ │ ├── Object3D.js
│ │ ├── Raycaster.js
│ │ └── Uniform.js
│ │ ├── extras
│ │ ├── Earcut.js
│ │ ├── SceneUtils.js
│ │ ├── ShapeUtils.js
│ │ ├── core
│ │ │ ├── Curve.js
│ │ │ ├── CurvePath.js
│ │ │ ├── Font.js
│ │ │ ├── Interpolations.js
│ │ │ ├── Path.js
│ │ │ ├── Shape.js
│ │ │ └── ShapePath.js
│ │ ├── curves
│ │ │ ├── ArcCurve.js
│ │ │ ├── CatmullRomCurve3.js
│ │ │ ├── CubicBezierCurve.js
│ │ │ ├── CubicBezierCurve3.js
│ │ │ ├── Curves.js
│ │ │ ├── EllipseCurve.js
│ │ │ ├── LineCurve.js
│ │ │ ├── LineCurve3.js
│ │ │ ├── QuadraticBezierCurve.js
│ │ │ ├── QuadraticBezierCurve3.js
│ │ │ └── SplineCurve.js
│ │ └── objects
│ │ │ └── ImmediateRenderObject.js
│ │ ├── geometries
│ │ ├── BoxGeometry.js
│ │ ├── CircleGeometry.js
│ │ ├── ConeGeometry.js
│ │ ├── CylinderGeometry.js
│ │ ├── DodecahedronGeometry.js
│ │ ├── EdgesGeometry.js
│ │ ├── ExtrudeGeometry.js
│ │ ├── Geometries.js
│ │ ├── IcosahedronGeometry.js
│ │ ├── LatheGeometry.js
│ │ ├── OctahedronGeometry.js
│ │ ├── ParametricGeometry.js
│ │ ├── PlaneGeometry.js
│ │ ├── PolyhedronGeometry.js
│ │ ├── RingGeometry.js
│ │ ├── ShapeGeometry.js
│ │ ├── SphereGeometry.js
│ │ ├── TetrahedronGeometry.js
│ │ ├── TextGeometry.js
│ │ ├── TorusGeometry.js
│ │ ├── TorusKnotGeometry.js
│ │ ├── TubeGeometry.js
│ │ └── WireframeGeometry.js
│ │ ├── helpers
│ │ ├── ArrowHelper.js
│ │ ├── AxesHelper.js
│ │ ├── Box3Helper.js
│ │ ├── BoxHelper.js
│ │ ├── CameraHelper.js
│ │ ├── DirectionalLightHelper.js
│ │ ├── FaceNormalsHelper.js
│ │ ├── GridHelper.js
│ │ ├── HemisphereLightHelper.js
│ │ ├── PlaneHelper.js
│ │ ├── PointLightHelper.js
│ │ ├── PolarGridHelper.js
│ │ ├── RectAreaLightHelper.js
│ │ ├── SkeletonHelper.js
│ │ ├── SpotLightHelper.js
│ │ └── VertexNormalsHelper.js
│ │ ├── lights
│ │ ├── AmbientLight.js
│ │ ├── DirectionalLight.js
│ │ ├── DirectionalLightShadow.js
│ │ ├── HemisphereLight.js
│ │ ├── Light.js
│ │ ├── LightShadow.js
│ │ ├── PointLight.js
│ │ ├── RectAreaLight.js
│ │ ├── SpotLight.js
│ │ └── SpotLightShadow.js
│ │ ├── loaders
│ │ ├── AnimationLoader.js
│ │ ├── AudioLoader.js
│ │ ├── BufferGeometryLoader.js
│ │ ├── Cache.js
│ │ ├── CompressedTextureLoader.js
│ │ ├── CubeTextureLoader.js
│ │ ├── DataTextureLoader.js
│ │ ├── FileLoader.js
│ │ ├── FontLoader.js
│ │ ├── ImageBitmapLoader.js
│ │ ├── ImageLoader.js
│ │ ├── JSONLoader.js
│ │ ├── Loader.js
│ │ ├── LoaderUtils.js
│ │ ├── LoadingManager.js
│ │ ├── MaterialLoader.js
│ │ ├── ObjectLoader.js
│ │ └── TextureLoader.js
│ │ ├── materials
│ │ ├── LineBasicMaterial.js
│ │ ├── LineDashedMaterial.js
│ │ ├── Material.js
│ │ ├── Materials.js
│ │ ├── MeshBasicMaterial.js
│ │ ├── MeshDepthMaterial.js
│ │ ├── MeshDistanceMaterial.js
│ │ ├── MeshLambertMaterial.js
│ │ ├── MeshNormalMaterial.js
│ │ ├── MeshPhongMaterial.js
│ │ ├── MeshPhysicalMaterial.js
│ │ ├── MeshStandardMaterial.js
│ │ ├── MeshToonMaterial.js
│ │ ├── PointsMaterial.js
│ │ ├── RawShaderMaterial.js
│ │ ├── ShaderMaterial.js
│ │ ├── ShadowMaterial.js
│ │ └── SpriteMaterial.js
│ │ ├── math
│ │ ├── Box2.js
│ │ ├── Box3.js
│ │ ├── Color.js
│ │ ├── Cylindrical.js
│ │ ├── Euler.js
│ │ ├── Frustum.js
│ │ ├── Interpolant.js
│ │ ├── Line3.js
│ │ ├── Math.js
│ │ ├── Matrix3.js
│ │ ├── Matrix4.js
│ │ ├── Plane.js
│ │ ├── Quaternion.js
│ │ ├── Ray.js
│ │ ├── Sphere.js
│ │ ├── Spherical.js
│ │ ├── Triangle.js
│ │ ├── Vector2.js
│ │ ├── Vector3.js
│ │ ├── Vector4.js
│ │ └── interpolants
│ │ │ ├── CubicInterpolant.js
│ │ │ ├── DiscreteInterpolant.js
│ │ │ ├── LinearInterpolant.js
│ │ │ └── QuaternionLinearInterpolant.js
│ │ ├── objects
│ │ ├── Bone.js
│ │ ├── Group.js
│ │ ├── LOD.js
│ │ ├── LensFlare.js
│ │ ├── Line.js
│ │ ├── LineLoop.js
│ │ ├── LineSegments.js
│ │ ├── Mesh.js
│ │ ├── Points.js
│ │ ├── Skeleton.js
│ │ ├── SkinnedMesh.js
│ │ └── Sprite.js
│ │ ├── polyfills.js
│ │ ├── renderers
│ │ ├── WebGL2Renderer.js
│ │ ├── WebGLRenderTarget.js
│ │ ├── WebGLRenderTargetCube.js
│ │ ├── WebGLRenderer.js
│ │ ├── shaders
│ │ │ ├── ShaderChunk.js
│ │ │ ├── ShaderChunk
│ │ │ │ ├── alphamap_fragment.glsl
│ │ │ │ ├── alphamap_pars_fragment.glsl
│ │ │ │ ├── alphatest_fragment.glsl
│ │ │ │ ├── aomap_fragment.glsl
│ │ │ │ ├── aomap_pars_fragment.glsl
│ │ │ │ ├── begin_vertex.glsl
│ │ │ │ ├── beginnormal_vertex.glsl
│ │ │ │ ├── bsdfs.glsl
│ │ │ │ ├── bumpmap_pars_fragment.glsl
│ │ │ │ ├── clipping_planes_fragment.glsl
│ │ │ │ ├── clipping_planes_pars_fragment.glsl
│ │ │ │ ├── clipping_planes_pars_vertex.glsl
│ │ │ │ ├── clipping_planes_vertex.glsl
│ │ │ │ ├── color_fragment.glsl
│ │ │ │ ├── color_pars_fragment.glsl
│ │ │ │ ├── color_pars_vertex.glsl
│ │ │ │ ├── color_vertex.glsl
│ │ │ │ ├── common.glsl
│ │ │ │ ├── cube_uv_reflection_fragment.glsl
│ │ │ │ ├── defaultnormal_vertex.glsl
│ │ │ │ ├── displacementmap_pars_vertex.glsl
│ │ │ │ ├── displacementmap_vertex.glsl
│ │ │ │ ├── dithering_fragment.glsl
│ │ │ │ ├── dithering_pars_fragment.glsl
│ │ │ │ ├── emissivemap_fragment.glsl
│ │ │ │ ├── emissivemap_pars_fragment.glsl
│ │ │ │ ├── encodings_fragment.glsl
│ │ │ │ ├── encodings_pars_fragment.glsl
│ │ │ │ ├── envmap_fragment.glsl
│ │ │ │ ├── envmap_pars_fragment.glsl
│ │ │ │ ├── envmap_pars_vertex.glsl
│ │ │ │ ├── envmap_vertex.glsl
│ │ │ │ ├── fog_fragment.glsl
│ │ │ │ ├── fog_pars_fragment.glsl
│ │ │ │ ├── fog_pars_vertex.glsl
│ │ │ │ ├── fog_vertex.glsl
│ │ │ │ ├── gradientmap_pars_fragment.glsl
│ │ │ │ ├── lightmap_fragment.glsl
│ │ │ │ ├── lightmap_pars_fragment.glsl
│ │ │ │ ├── lights_lambert_vertex.glsl
│ │ │ │ ├── lights_pars.glsl
│ │ │ │ ├── lights_phong_fragment.glsl
│ │ │ │ ├── lights_phong_pars_fragment.glsl
│ │ │ │ ├── lights_physical_fragment.glsl
│ │ │ │ ├── lights_physical_pars_fragment.glsl
│ │ │ │ ├── lights_template.glsl
│ │ │ │ ├── logdepthbuf_fragment.glsl
│ │ │ │ ├── logdepthbuf_pars_fragment.glsl
│ │ │ │ ├── logdepthbuf_pars_vertex.glsl
│ │ │ │ ├── logdepthbuf_vertex.glsl
│ │ │ │ ├── map_fragment.glsl
│ │ │ │ ├── map_pars_fragment.glsl
│ │ │ │ ├── map_particle_fragment.glsl
│ │ │ │ ├── map_particle_pars_fragment.glsl
│ │ │ │ ├── metalnessmap_fragment.glsl
│ │ │ │ ├── metalnessmap_pars_fragment.glsl
│ │ │ │ ├── morphnormal_vertex.glsl
│ │ │ │ ├── morphtarget_pars_vertex.glsl
│ │ │ │ ├── morphtarget_vertex.glsl
│ │ │ │ ├── normal_fragment.glsl
│ │ │ │ ├── normalmap_pars_fragment.glsl
│ │ │ │ ├── packing.glsl
│ │ │ │ ├── premultiplied_alpha_fragment.glsl
│ │ │ │ ├── project_vertex.glsl
│ │ │ │ ├── roughnessmap_fragment.glsl
│ │ │ │ ├── roughnessmap_pars_fragment.glsl
│ │ │ │ ├── shadowmap_pars_fragment.glsl
│ │ │ │ ├── shadowmap_pars_vertex.glsl
│ │ │ │ ├── shadowmap_vertex.glsl
│ │ │ │ ├── shadowmask_pars_fragment.glsl
│ │ │ │ ├── skinbase_vertex.glsl
│ │ │ │ ├── skinning_pars_vertex.glsl
│ │ │ │ ├── skinning_vertex.glsl
│ │ │ │ ├── skinnormal_vertex.glsl
│ │ │ │ ├── specularmap_fragment.glsl
│ │ │ │ ├── specularmap_pars_fragment.glsl
│ │ │ │ ├── tonemapping_fragment.glsl
│ │ │ │ ├── tonemapping_pars_fragment.glsl
│ │ │ │ ├── uv2_pars_fragment.glsl
│ │ │ │ ├── uv2_pars_vertex.glsl
│ │ │ │ ├── uv2_vertex.glsl
│ │ │ │ ├── uv_pars_fragment.glsl
│ │ │ │ ├── uv_pars_vertex.glsl
│ │ │ │ ├── uv_vertex.glsl
│ │ │ │ └── worldpos_vertex.glsl
│ │ │ ├── ShaderLib.js
│ │ │ ├── ShaderLib
│ │ │ │ ├── cube_frag.glsl
│ │ │ │ ├── cube_vert.glsl
│ │ │ │ ├── depth_frag.glsl
│ │ │ │ ├── depth_vert.glsl
│ │ │ │ ├── distanceRGBA_frag.glsl
│ │ │ │ ├── distanceRGBA_vert.glsl
│ │ │ │ ├── equirect_frag.glsl
│ │ │ │ ├── equirect_vert.glsl
│ │ │ │ ├── linedashed_frag.glsl
│ │ │ │ ├── linedashed_vert.glsl
│ │ │ │ ├── meshbasic_frag.glsl
│ │ │ │ ├── meshbasic_vert.glsl
│ │ │ │ ├── meshlambert_frag.glsl
│ │ │ │ ├── meshlambert_vert.glsl
│ │ │ │ ├── meshphong_frag.glsl
│ │ │ │ ├── meshphong_vert.glsl
│ │ │ │ ├── meshphysical_frag.glsl
│ │ │ │ ├── meshphysical_vert.glsl
│ │ │ │ ├── normal_frag.glsl
│ │ │ │ ├── normal_vert.glsl
│ │ │ │ ├── points_frag.glsl
│ │ │ │ ├── points_vert.glsl
│ │ │ │ ├── shadow_frag.glsl
│ │ │ │ └── shadow_vert.glsl
│ │ │ ├── UniformsLib.js
│ │ │ └── UniformsUtils.js
│ │ ├── webgl
│ │ │ ├── WebGLAttributes.js
│ │ │ ├── WebGLBackground.js
│ │ │ ├── WebGLBufferRenderer.js
│ │ │ ├── WebGLCapabilities.js
│ │ │ ├── WebGLClipping.js
│ │ │ ├── WebGLExtensions.js
│ │ │ ├── WebGLFlareRenderer.js
│ │ │ ├── WebGLGeometries.js
│ │ │ ├── WebGLIndexedBufferRenderer.js
│ │ │ ├── WebGLLights.js
│ │ │ ├── WebGLMorphtargets.js
│ │ │ ├── WebGLObjects.js
│ │ │ ├── WebGLProgram.js
│ │ │ ├── WebGLPrograms.js
│ │ │ ├── WebGLProperties.js
│ │ │ ├── WebGLRenderLists.js
│ │ │ ├── WebGLShader.js
│ │ │ ├── WebGLShadowMap.js
│ │ │ ├── WebGLSpriteRenderer.js
│ │ │ ├── WebGLState.js
│ │ │ ├── WebGLTextures.js
│ │ │ ├── WebGLUniforms.js
│ │ │ └── WebGLUtils.js
│ │ └── webvr
│ │ │ └── WebVRManager.js
│ │ ├── scenes
│ │ ├── Fog.js
│ │ ├── FogExp2.js
│ │ └── Scene.js
│ │ ├── textures
│ │ ├── CanvasTexture.js
│ │ ├── CompressedTexture.js
│ │ ├── CubeTexture.js
│ │ ├── DataTexture.js
│ │ ├── DepthTexture.js
│ │ ├── Texture.js
│ │ └── VideoTexture.js
│ │ └── utils.js
├── tofu.js
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── build
│ │ ├── tofu.js
│ │ └── tofu.js.map
│ ├── esm
│ │ ├── index.js
│ │ └── index.js.map
│ ├── package.json
│ └── src
│ │ ├── animation
│ │ ├── Animate.js
│ │ ├── AnimateRunner.js
│ │ ├── PathMotion.js
│ │ ├── TimelineAnimations.js
│ │ └── Transition.js
│ │ ├── core
│ │ ├── ARGlue.js
│ │ ├── EffectComposer.js
│ │ ├── EffectPack.js
│ │ ├── LayerCompositor.js
│ │ ├── ViewConfig.js
│ │ ├── Viewer.js
│ │ ├── layer
│ │ │ ├── ARLayer.js
│ │ │ ├── Layer.js
│ │ │ ├── PrimerLayer.js
│ │ │ └── XRLayer.js
│ │ ├── primers
│ │ │ ├── CameraPrimer.js
│ │ │ ├── Primer.js
│ │ │ └── TexturePrimer.js
│ │ └── viewer
│ │ │ ├── ARViewer.js
│ │ │ ├── EffectComposer.js
│ │ │ ├── GraphicsLayer.js
│ │ │ ├── Layer.js
│ │ │ ├── PrimerLayer.js
│ │ │ └── XRViewer.js
│ │ ├── extras
│ │ ├── GltfMagic.js
│ │ └── panorama
│ │ │ ├── AnchorBase.js
│ │ │ ├── AnchorRippling.js
│ │ │ ├── CylinderWorld.js
│ │ │ └── SphereWorld.js
│ │ ├── index.js
│ │ ├── math
│ │ └── BezierEasing.js
│ │ ├── patch
│ │ └── Object3D.js
│ │ ├── postprocessing
│ │ ├── BloomPass.js
│ │ ├── ClearMaskPass.js
│ │ ├── FilmPass.js
│ │ ├── GlitchPass.js
│ │ ├── MaskPass.js
│ │ ├── MattingPass.js
│ │ ├── Pass.js
│ │ ├── RenderPass.js
│ │ └── ShaderPass.js
│ │ ├── shader
│ │ ├── ConvolutionShader.js
│ │ ├── CopyShader.js
│ │ ├── DigitalGlitch.js
│ │ ├── EdgeBlur.js
│ │ ├── FilmShader.js
│ │ ├── FocusShader.js
│ │ ├── MattingShader.js
│ │ ├── YCbCrShader.js
│ │ └── YUVShader.js
│ │ └── utils
│ │ ├── GLTFLoader.js
│ │ ├── Orienter.js
│ │ ├── Raf.js
│ │ ├── Smooth.js
│ │ ├── Tween.js
│ │ └── Utils.js
└── tofu.shaderprimer
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── build
│ ├── index.js
│ ├── index.js.map
│ ├── index.module.js
│ └── index.module.js.map
│ ├── package.json
│ └── src
│ └── index.js
├── package-lock.json
├── package.json
└── shaders
├── basic-polygon.glsl
├── basic-polygon2.glsl
├── basic-polygon3.glsl
├── bigwing-bit-coin.glsl
├── bigwing-line-link.glsl
├── bigwing-moon-night.glsl
├── dimian.glsl
├── domainwarp.glsl
├── domainwarp2.glsl
├── fade.glsl
├── gradientnoise.glsl
├── iqcloud.glsl
├── line-stroke.glsl
├── pbr-frag.glsl
├── pbr-vert.glsl
├── proteancloud.glsl
├── raymaching.glsl
├── raymaching2.glsl
├── raymaching3.glsl
├── raymarching-fbm.glsl
├── shadertoy1.js
├── shadertoy2.js
├── sin.glsl
├── svg-fill.glsl
├── svg-stroke.glsl
└── warpdomain.glsl
/.editorconfig:
--------------------------------------------------------------------------------
1 | # This file is for unifying the coding style for different editors and IDEs.
2 | # More information at http://EditorConfig.org
3 | root = true
4 |
5 | [*]
6 | charset = utf-8
7 | indent_size = 2
8 | end_of_line = lf
9 | indent_style = space
10 | insert_final_newline = true
11 | trim_trailing_whitespace = true
12 |
13 | [*.md]
14 | trim_trailing_whitespace = false
15 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | node_modules/**
2 |
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "globals": {
7 | "RAF": true,
8 | "CAF": true
9 | },
10 | "rules": {
11 | "no-bitwise": 0
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | my shader palyground
2 | =============
3 |
4 | Play with my shader program, use glsl in webgl.
5 |
6 | ## Introduction
7 |
8 | Take this opportunity to learn and consolidate glsl, hope i can become a shader painter 😝😝😝.
9 |
10 | ## Examples
11 |
12 | you can visit here [shader-studio]()
13 |
14 | or clone this repository and install dependencies.
15 |
16 | ```sh
17 | npm i
18 | ```
19 |
20 | after it all, run http-server and go to `./demos` path.
21 |
22 | ```sh
23 | npm run http
24 | ```
25 |
--------------------------------------------------------------------------------
/demos/2D-Gradient-Noise-Derivatives/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/2D-Gradient-Noise-Derivatives/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/2D-Gradient-Noise-Derivatives/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/2D-Gradient-Noise-Derivatives/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/2D-Value-Noise-Derivatives/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/2D-Value-Noise-Derivatives/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/2D-Value-Noise-Derivatives/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/2D-Value-Noise-Derivatives/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/3D-Noise-Analytical-Normals/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/3D-Noise-Analytical-Normals/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/3D-Noise-Analytical-Normals/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/3D-Noise-Analytical-Normals/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/3D-Value-Noise-Derivatives/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/3D-Value-Noise-Derivatives/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/3D-Value-Noise-Derivatives/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/3D-Value-Noise-Derivatives/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/Animate-Circle-Swing/README.md:
--------------------------------------------------------------------------------
1 | # jc-circle
2 |
3 | i was fascinated with pixel shader technology, after i read iq master's article, i decision start my pixel shader trip.
4 |
5 | let's getting start with bit snippet base knowledge.
6 |
7 | draw a very simple circle
8 |
9 |
10 |
--------------------------------------------------------------------------------
/demos/Animate-Circle-Swing/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Animate-Circle-Swing
8 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/demos/Animate-Circle-Swing/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/Animate-Circle-Swing/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/Animate-Circle-Swing/studio/fragmentShader.glsl:
--------------------------------------------------------------------------------
1 | uniform vec2 iResolution;
2 | uniform float iTime;
3 | uniform float iTimeDelta;
4 | #define cycle 1.5
5 | #define PI 3.1415926
6 |
7 | void main() {
8 | // Normalized pixel coordinates (from 0 to 1)
9 | vec2 p = (2.0 * gl_FragCoord.xy - iResolution.xy) / min(iResolution.y, iResolution.x);
10 |
11 | // background color
12 | vec3 bcol = vec3(0.29412, 0.70196, 0.63921) * (1.0 - 0.3 * length(p));
13 |
14 | // animate
15 | float tt = mod(iTime, cycle) / cycle;
16 | float ss = 1.0 + 0.5 * sin(tt * PI * 6.0 + p.y * 0.5) * exp(-tt * 4.0);
17 | p *= vec2(0.7, 1.5) + ss * vec2(0.3, -0.5);
18 |
19 | // draw a circle area
20 | float r = length(p);
21 | float d = 0.5;
22 |
23 | // set color
24 | vec3 ccol = vec3(1.0, 1.0, 1.0);
25 |
26 | // merge background color and circle color, with a mix effect when d-r in [-0.1, 0.1]
27 | vec3 col = mix(bcol, ccol, smoothstep(-0.002, 0.002, d-r));
28 |
29 | // Output to screen
30 | gl_FragColor = vec4(col, 1.0);
31 | }
32 |
--------------------------------------------------------------------------------
/demos/Animate-Circle-Swing/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/Animate-Circle-Swing/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/Animate-My-Logo/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Animate-My-Logo
8 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/demos/Animate-My-Logo/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/Animate-My-Logo/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/Animate-My-Logo/studio/fragmentShader.glsl:
--------------------------------------------------------------------------------
1 | uniform vec2 iResolution;
2 | uniform float iTime;
3 | uniform float iTimeDelta;
4 |
5 | #define cycle 1.5
6 | #define scale .5
7 | #define bg vec3(0, 0.6627451, 0.6196078)
8 | #define PI 3.1415926
9 | #define PI2 6.2831853
10 |
11 | mat2 rotate(float deg) {
12 | return mat2(cos(deg), sin(deg), -sin(deg), cos(deg));
13 | }
14 |
15 | float sector(vec2 p, vec2 a, vec2 b, float width, float blur) {
16 | vec2 pa = p - a;
17 | vec2 ba = b - a;
18 | vec2 dir = normalize(ba);
19 | float t = clamp(dot(pa, dir), 0., length(ba));
20 | float dist = length(pa - dir * t);
21 | return smoothstep(width - blur, width, dist);
22 | }
23 |
24 | void main() {
25 | // Normalized pixel coordinates (from 0 to 1)
26 | vec2 uv = (2.0 * gl_FragCoord.xy - iResolution.xy) / min(iResolution.y, iResolution.x);
27 | uv /= scale;
28 |
29 | // Time varying pixel color
30 | vec3 col = 0.5 + 0.5 * cos(iTime + uv.xyx + vec3(0, 2, 4));
31 |
32 | // Output to screen
33 | gl_FragColor = vec4(col, 1.0);
34 | }
35 |
--------------------------------------------------------------------------------
/demos/Animate-My-Logo/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/Animate-My-Logo/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/Animate-Square-Swing/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Animate-Square-Swing
8 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/demos/Animate-Square-Swing/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/Animate-Square-Swing/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/Animate-Square-Swing/studio/fragmentShader.glsl:
--------------------------------------------------------------------------------
1 | uniform vec2 iResolution;
2 | uniform float iTime;
3 | uniform float iTimeDelta;
4 | #define cycle 1.5
5 | #define PI 3.1415926
6 |
7 | void main() {
8 | // Normalized pixel coordinates (from 0 to 1)
9 | vec2 p = (2.0 * gl_FragCoord.xy - iResolution.xy) / min(iResolution.y, iResolution.x);
10 |
11 | // background color
12 | vec3 bcol = vec3(0.29412, 0.70196, 0.63921) * (1.0 - 0.3 * length(p));
13 |
14 | // animate
15 | float tt = mod(iTime, cycle) / cycle;
16 | float ss = 1.0 + 0.5 * sin(tt * PI * 6.0 + p.y * 0.5) * exp(-tt * 4.0);
17 | p *= vec2(0.7, 1.5) + ss * vec2(0.3, -0.5);
18 |
19 | // draw a square area
20 | vec2 ap = abs(p);
21 | float r = max(ap.x, ap.y);
22 | float d = 0.5;
23 |
24 | // set color
25 | vec3 ccol = vec3(1.0, 1.0, 1.0);
26 |
27 | // merge background color and square color, with a mix effect when d-r in [-0.1, 0.1]
28 | vec3 col = mix(bcol, ccol, smoothstep(-0.002, 0.002, d-r));
29 |
30 | // Output to screen
31 | gl_FragColor = vec4(col, 1.0);
32 | }
33 |
--------------------------------------------------------------------------------
/demos/Animate-Square-Swing/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/Animate-Square-Swing/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/BigWing-Road-Light/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | BigWing-Road-Light
8 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/demos/BigWing-Road-Light/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/BigWing-Road-Light/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/BigWing-Road-Light/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iMouse: {
12 | value: new Vector2(0, 0)
13 | },
14 | iTime: {
15 | value: 0.0
16 | },
17 | iTimeDelta: {
18 | value: 0.0
19 | },
20 | },
21 |
22 | vertexShader: vertexShader,
23 |
24 | fragmentShader: fragmentShader
25 |
26 | };
27 |
--------------------------------------------------------------------------------
/demos/BigWing-Road-Light/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/Circle-Bubble-Up/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Circle-Bubble-Up
8 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/demos/Circle-Bubble-Up/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/Circle-Bubble-Up/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/Circle-Bubble-Up/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/Circle-Bubble-Up/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/Clock-Line-Circle/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Clock-Line-Circle
8 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/demos/Clock-Line-Circle/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/Clock-Line-Circle/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | iHour: {
18 | value: 0.0
19 | },
20 | iMinute: {
21 | value: 0.0
22 | },
23 | iSecond: {
24 | value: 0.0
25 | },
26 | },
27 |
28 | vertexShader: vertexShader,
29 |
30 | fragmentShader: fragmentShader
31 |
32 | };
33 |
--------------------------------------------------------------------------------
/demos/Clock-Line-Circle/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/Draw-Path-Line/images/wechat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jasonChen1982/shader-studio/47c8cc134944358c92b0e3182c12cd0161870f07/demos/Draw-Path-Line/images/wechat.jpg
--------------------------------------------------------------------------------
/demos/Draw-Path-Line/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/Draw-Path-Line/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/Draw-Path-Line/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/Draw-Simple-Line/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Clock-Line-Circle
8 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/demos/Draw-Simple-Line/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/Draw-Simple-Line/studio/fragmentShader.glsl:
--------------------------------------------------------------------------------
1 | uniform vec2 iResolution;
2 | uniform float iTime;
3 | uniform float iTimeDelta;
4 |
5 | #define bg vec3(0, 0.6627451, 0.6196078)
6 |
7 | float line(vec2 p, vec2 a, vec2 b, float width, float blur) {
8 | vec2 pa = p - a;
9 | vec2 ba = b - a;
10 | vec2 dir = normalize(ba);
11 | float t = clamp(dot(pa, dir), 0., length(ba));
12 | vec2 pd = pa - dir * t;
13 | float d = dot(pd, pd);
14 | return smoothstep(width - blur, width, sqrt(d));
15 | }
16 |
17 | void main() {
18 | // 像素坐标系,屏幕中间为(0, 0)
19 | vec2 coord = gl_FragCoord.xy - iResolution.xy / 2.0;
20 |
21 | // 颜色混合
22 | vec3 color = bg;
23 | float d = line(coord, vec2(-50., 0.), vec2(50., -500.), 10., 1.);
24 | color = mix(vec3(1.0), color, d);
25 |
26 | // 输出到屏幕
27 | gl_FragColor = vec4(color, 1.0);
28 | }
29 |
--------------------------------------------------------------------------------
/demos/Draw-Simple-Line/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/Draw-Simple-Line/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/Glow-Line-Volumetric/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/Glow-Line-Volumetric/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/Glow-Line-Volumetric/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/Glow-Line-Volumetric/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/Glow-Line-With-Music/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/Glow-Line-With-Music/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/Glow-Line-With-Music/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/Glow-Line-With-Music/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/Just-Draw-Simple-Line/README.md:
--------------------------------------------------------------------------------
1 | # draw a line
2 |
3 |
4 |
--------------------------------------------------------------------------------
/demos/Just-Draw-Simple-Line/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/Just-Draw-Simple-Line/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/Just-Draw-Simple-Line/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/Just-Draw-Simple-Line/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/Line-Path-Style/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Clock-Line-Circle
8 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/demos/Line-Path-Style/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/Line-Path-Style/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/Line-Path-Style/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/MonteCarlo-Method-Heart/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/MonteCarlo-Method-Heart/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/MonteCarlo-Method-Heart/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/MonteCarlo-Method-Heart/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/Perlin-Noise-Fire-Ball/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/Perlin-Noise-Fire-Ball/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/Perlin-Noise-Fire-Ball/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/Perlin-Noise-Fire-Ball/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/Perlin-Noise-Function/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 | xrViewer.renderer.setPixelRatio(window.devicePixelRatio);
10 |
11 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
12 |
13 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
14 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
15 | xrViewer.on('posttimeline', function(info) {
16 | var iTimeDelta = info.snippet / 1000;
17 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
18 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
19 | });
20 |
21 | primerLayer.add(shaderPrimer);
22 |
23 | xrViewer.start();
24 |
25 |
--------------------------------------------------------------------------------
/demos/Perlin-Noise-Function/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/Perlin-Noise-Function/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/Perlin-Noise-Function/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/Pseudo-Random-Generate/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 | xrViewer.renderer.setPixelRatio(window.devicePixelRatio);
10 |
11 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
12 |
13 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
14 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
15 | xrViewer.on('posttimeline', function(info) {
16 | var iTimeDelta = info.snippet / 1000;
17 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
18 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
19 | });
20 |
21 | primerLayer.add(shaderPrimer);
22 |
23 | xrViewer.start();
24 |
25 |
--------------------------------------------------------------------------------
/demos/Pseudo-Random-Generate/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/Pseudo-Random-Generate/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/Pseudo-Random-Generate/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/RayMarching-FBM-Glowing-Circle/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/RayMarching-FBM-Glowing-Circle/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/RayMarching-FBM-Glowing-Circle/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/RayMarching-FBM-Glowing-Circle/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/RayMarching-Volumetric-FBM/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/RayMarching-Volumetric-FBM/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/RayMarching-Volumetric-FBM/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/RayMarching-Volumetric-FBM/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/Space-Sky-PassEffect/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/Space-Sky-PassEffect/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/Space-Sky-PassEffect/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iSpeed: {
15 | value: 1.0
16 | },
17 | iTimeDelta: {
18 | value: 0.0
19 | },
20 | },
21 |
22 | vertexShader: vertexShader,
23 |
24 | fragmentShader: fragmentShader
25 |
26 | };
27 |
--------------------------------------------------------------------------------
/demos/Space-Sky-PassEffect/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 | varying vec2 vUv;
4 |
5 | void main() {
6 | vUv = uv;
7 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
8 | gl_Position = vPosition;
9 | }
10 |
--------------------------------------------------------------------------------
/demos/fbm-volumetric-clouds/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/fbm-volumetric-clouds/js/shader.js:
--------------------------------------------------------------------------------
1 | var vertexShader = "#define GLSLIFY 1\nvarying vec4 vPosition;\n\nvoid main() {\n vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n gl_Position = vPosition;\n}\n"; // eslint-disable-line
2 |
3 | var fragmentShader = "#define GLSLIFY 1\nuniform vec2 iResolution;\nuniform float iTime;\nuniform float iTimeDelta;\n\nvoid main() {\n // Normalized pixel coordinates (from 0 to 1)\n vec2 uv = gl_FragCoord.xy / iResolution.xy;\n\n // Time varying pixel color\n vec3 col = 0.5 + 0.5 * cos(iTime + uv.xyx + vec3(0, 2, 4));\n\n // Output to screen\n gl_FragColor = vec4(col, 1.0);\n}\n"; // eslint-disable-line
4 |
5 | var Vector2 = THREE.Vector2;
6 |
7 | var shader = {
8 |
9 | uniforms: {
10 | iResolution: {
11 | value: new Vector2(300, 150)
12 | },
13 | iTime: {
14 | value: 0.0
15 | },
16 | iTimeDelta: {
17 | value: 0.0
18 | },
19 | },
20 |
21 | vertexShader: vertexShader,
22 |
23 | fragmentShader: fragmentShader
24 |
25 | };
26 |
--------------------------------------------------------------------------------
/demos/fbm-volumetric-clouds/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/fbm-volumetric-clouds/studio/fragmentShader.glsl:
--------------------------------------------------------------------------------
1 | uniform vec2 iResolution;
2 | uniform float iTime;
3 | uniform float iTimeDelta;
4 |
5 | void main() {
6 | // Normalized pixel coordinates (from 0 to 1)
7 | vec2 uv = gl_FragCoord.xy / iResolution.xy;
8 |
9 | // Time varying pixel color
10 | vec3 col = 0.5 + 0.5 * cos(iTime + uv.xyx + vec3(0, 2, 4));
11 |
12 | // Output to screen
13 | gl_FragColor = vec4(col, 1.0);
14 | }
15 |
--------------------------------------------------------------------------------
/demos/fbm-volumetric-clouds/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/fbm-volumetric-clouds/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/iq-compositing/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | iq-compositing
8 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/demos/iq-compositing/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/iq-compositing/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/iq-compositing/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/iq-compositing/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/iq-eye/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | iq-eye
8 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/demos/iq-eye/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/iq-eye/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/iq-eye/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/iq-eye/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/iq-heart/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jasonChen1982/shader-studio/47c8cc134944358c92b0e3182c12cd0161870f07/demos/iq-heart/README.md
--------------------------------------------------------------------------------
/demos/iq-heart/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | iq-heart
8 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/demos/iq-heart/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/iq-heart/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/iq-heart/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/iq-heart/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/iq-palette/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | iq-palette
8 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/demos/iq-palette/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/iq-palette/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/iq-palette/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/iq-palette/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/noise-sphere-moon/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | noise-sphere-moon
8 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/demos/noise-sphere-moon/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/noise-sphere-moon/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/noise-sphere-moon/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/noise-sphere-moon/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/noise-value-2d/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | noise-value-2d
8 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/demos/noise-value-2d/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | precision: 'highp',
9 | alpha: false,
10 | premultipliedAlpha: false,
11 | preserveDrawingBuffer: false
12 | });
13 |
14 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
15 |
16 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
17 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
18 | xrViewer.on('posttimeline', function(info) {
19 | var iTimeDelta = info.snippet / 1000;
20 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
21 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
22 | });
23 |
24 | primerLayer.add(shaderPrimer);
25 |
26 | xrViewer.start();
27 |
28 |
--------------------------------------------------------------------------------
/demos/noise-value-2d/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/noise-value-2d/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/noise-value-2d/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/polygon-ray-tracing/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/polygon-ray-tracing/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/polygon-ray-tracing/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/polygon-ray-tracing/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/demos/simple-value/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | simple-value
8 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/demos/simple-value/js/index.js:
--------------------------------------------------------------------------------
1 | var width = window.innerWidth;
2 | var height = window.innerHeight;
3 |
4 | var xrViewer = new Tofu.Viewer({
5 | canvas: '#shader-studio',
6 | width: width,
7 | height: height,
8 | });
9 |
10 | var primerLayer = xrViewer.createLayer(Tofu.PrimerLayer);
11 |
12 | var shaderPrimer = new Tofu.ShaderPrimer(shader);
13 | shaderPrimer.material.uniforms.iResolution.value = new THREE.Vector2(width, height);
14 | xrViewer.on('posttimeline', function(info) {
15 | var iTimeDelta = info.snippet / 1000;
16 | shaderPrimer.material.uniforms.iTime.value += iTimeDelta;
17 | shaderPrimer.material.uniforms.iTimeDelta.value = iTimeDelta;
18 | });
19 |
20 | primerLayer.add(shaderPrimer);
21 |
22 | xrViewer.start();
23 |
24 |
--------------------------------------------------------------------------------
/demos/simple-value/studio/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es6": true
5 | },
6 | "rules": {
7 | "no-bitwise": 0
8 | },
9 | "parserOptions": {
10 | "ecmaVersion": 6,
11 | "sourceType": "module"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/demos/simple-value/studio/fragmentShader.glsl:
--------------------------------------------------------------------------------
1 | uniform vec2 iResolution;
2 | uniform float iTime;
3 | uniform float iTimeDelta;
4 |
5 | #define PI 3.1415926
6 | #define PI2 6.2831853
7 |
8 | mat2 rotate(float deg) {
9 | return mat2(cos(deg), sin(deg), -sin(deg), cos(deg));
10 | }
11 |
12 | void main() {
13 | // Normalized pixel coordinates (from 0 to 1)
14 | vec2 uv = gl_FragCoord.xy / iResolution.xy;
15 |
16 | uv = rotate( iTime/40.0*PI2 ) * uv;
17 |
18 | // Time varying pixel color
19 | vec3 col = 0.5 + 0.5 * cos(iTime + uv.xyx + vec3(0, 2, 4));
20 |
21 | // Output to screen
22 | gl_FragColor = vec4(col, 1.0);
23 | }
24 |
--------------------------------------------------------------------------------
/demos/simple-value/studio/shader.js:
--------------------------------------------------------------------------------
1 | import vertexShader from './vertexShader.glsl';
2 | import fragmentShader from './fragmentShader.glsl';
3 | var Vector2 = THREE.Vector2;
4 |
5 | var shader = {
6 |
7 | uniforms: {
8 | iResolution: {
9 | value: new Vector2(300, 150)
10 | },
11 | iTime: {
12 | value: 0.0
13 | },
14 | iTimeDelta: {
15 | value: 0.0
16 | },
17 | },
18 |
19 | vertexShader: vertexShader,
20 |
21 | fragmentShader: fragmentShader
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/demos/simple-value/studio/vertexShader.glsl:
--------------------------------------------------------------------------------
1 |
2 | varying vec4 vPosition;
3 |
4 | void main() {
5 | vPosition = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
6 | gl_Position = vPosition;
7 | }
8 |
--------------------------------------------------------------------------------
/doc/TASKLINE.md:
--------------------------------------------------------------------------------
1 | # Spring Festival Schedule
2 |
3 | maybe this schedule is impossible to finish on time.
4 |
5 | - [ ] glow shader @02-14
6 | - [ ] music visualization component @02-15
7 | - [ ] siri wave @02-16
8 | - [ ] tofu.js main page @02-18
9 | - [ ] tofu.js main page @02-19
10 | - [ ] tofu.js pass gui component @02-20
11 | - [ ] shadertoy to find demo @02-21
12 | - [ ] zhihu draw light with c++ @02-22
13 | - [ ] learning c++ and develop a app @02-22
14 |
15 | # 函数图形
16 | - 心形图形
17 | - Montecarlo method
18 | - raymarching
19 | - fbm
20 |
21 | # 噪声与分形布朗运动
22 | - 噪声的前世今生
23 | - 噪声的种类
24 | - 噪声的运用
25 | - 分形布朗运动
26 | - 运用
27 |
28 | # ray tracing
29 | - camera lookat
30 | - cast-ray
31 | - 示例
32 |
--------------------------------------------------------------------------------
/doc/WORDS.md:
--------------------------------------------------------------------------------
1 | - bilinear interpolation : 双线性差值
2 | - lattice:格子
3 | - variations: 差异、差距
4 | - density:密度、浓度
5 | - compact:紧凑、小巧轻量
6 | - pseudo-random:伪随机
7 | - deterministic:确定的
8 | - intuitively:直观的
9 | - seamless:无缝的
10 |
--------------------------------------------------------------------------------
/lib/dat.gui/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | ["env", {
4 | "modules": false
5 | }]
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/lib/dat.gui/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "dat.gui",
3 | "version": "0.6.5",
4 | "homepage": "https://github.com/dataarts/dat.gui.git",
5 | "authors": [
6 | "Google Data Arts Team "
7 | ],
8 | "description": "dat.gui is a lightweight controller library for JavaScript.",
9 | "main": "build/dat.gui.js",
10 | "keywords": [
11 | "controller",
12 | "javascript",
13 | "gui",
14 | "slider"
15 | ],
16 | "license": "Apache License, Version 2.0",
17 | "ignore": [
18 | "**/.*",
19 | "node_modules",
20 | "bower_components",
21 | "app/bower_components",
22 | "test",
23 | "tests"
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/lib/dat.gui/licenseBanner.txt:
--------------------------------------------------------------------------------
1 | /**
2 | * dat-gui JavaScript Controller Library
3 | * http://code.google.com/p/dat-gui
4 | *
5 | * Copyright 2011 Data Arts Team, Google Creative Lab
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | */
13 |
--------------------------------------------------------------------------------
/lib/dat.gui/src/dat/gui/saveDialogue.html.js:
--------------------------------------------------------------------------------
1 | const saveDialogContents = `
2 |
3 | Here's the new load parameter for your
GUI's constructor:
4 |
5 |
6 |
7 |
8 |
9 |
Automatically save
10 | values to
localStorage on exit.
11 |
12 |
The values saved to localStorage will
13 | override those passed to dat.GUI's constructor. This makes it
14 | easier to work incrementally, but localStorage is fragile,
15 | and your friends may not see the same values you do.
16 |
17 |
18 |
19 |
20 |
21 |
`;
22 |
23 | export default saveDialogContents;
24 |
--------------------------------------------------------------------------------
/lib/dat.gui/src/dat/utils/requestAnimationFrame.js:
--------------------------------------------------------------------------------
1 | /**
2 | * dat-gui JavaScript Controller Library
3 | * http://code.google.com/p/dat-gui
4 | *
5 | * Copyright 2011 Data Arts Team, Google Creative Lab
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | */
13 |
14 | function requestAnimationFrame(callback) {
15 | setTimeout(callback, 1000 / 60);
16 | }
17 |
18 | export default window.requestAnimationFrame ||
19 | window.webkitRequestAnimationFrame ||
20 | window.mozRequestAnimationFrame ||
21 | window.oRequestAnimationFrame ||
22 | window.msRequestAnimationFrame ||
23 | requestAnimationFrame;
24 |
--------------------------------------------------------------------------------
/lib/dat.gui/tmp/common.js:
--------------------------------------------------------------------------------
1 | const dat = require('dat.gui');
2 |
3 | const gui = new dat.GUI();
4 | gui.add({message: 'hello world'}, 'message');
5 |
--------------------------------------------------------------------------------
/lib/dat.gui/tmp/es6.js:
--------------------------------------------------------------------------------
1 | import dat from 'dat.gui';
2 |
3 | const gui = new dat.GUI();
4 | gui.add({message: 'hello world'}, 'message');
5 |
--------------------------------------------------------------------------------
/lib/dat.gui/tmp/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/lib/dat.gui/tmp/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "tmp",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "bundle.js",
6 | "dependencies": {
7 | "dat.gui": "^0.7.0-0"
8 | },
9 | "devDependencies": {
10 | "rollup-plugin-node-resolve": "^3.0.0"
11 | },
12 | "scripts": {
13 | "test": "echo \"Error: no test specified\" && exit 1"
14 | },
15 | "author": "Don McCurdy (https://www.donmccurdy.com)",
16 | "license": "MIT"
17 | }
18 |
--------------------------------------------------------------------------------
/lib/dat.gui/tmp/rollup.config.js:
--------------------------------------------------------------------------------
1 | import resolve from 'rollup-plugin-node-resolve';
2 |
3 | export default {
4 | input: 'es6.js',
5 | output: {
6 | file: 'bundle.js',
7 | format: 'iife',
8 | name: 'myApp'
9 | },
10 | plugins: [
11 | resolve({module: true}),
12 | ]
13 | };
14 |
--------------------------------------------------------------------------------
/lib/dat.gui/tmp/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | entry: './es6.js',
3 | output: {
4 | filename: 'bundle.js'
5 | }
6 | };
7 |
--------------------------------------------------------------------------------
/lib/three/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "three.js",
3 | "homepage": "http://threejs.org/",
4 | "description": "JavaScript 3D library",
5 | "main": "build/three.js",
6 | "keywords": [
7 | "three",
8 | "threejs",
9 | "three.js",
10 | "3D",
11 | "webgl"
12 | ],
13 | "license": "MIT",
14 | "ignore": [
15 | "**/.*",
16 | "*.md",
17 | "/docs",
18 | "/editor",
19 | "/examples/*",
20 | "!/examples/js",
21 | "/src",
22 | "/test",
23 | "/utils",
24 | "/LICENSE"
25 | ]
26 | }
27 |
--------------------------------------------------------------------------------
/lib/three/examples/fonts/LICENSE:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jasonChen1982/shader-studio/47c8cc134944358c92b0e3182c12cd0161870f07/lib/three/examples/fonts/LICENSE
--------------------------------------------------------------------------------
/lib/three/examples/fonts/README:
--------------------------------------------------------------------------------
1 | Use Facetype.js to generate typeface.json fonts.
2 | http://gero3.github.io/facetype.js/
3 |
--------------------------------------------------------------------------------
/lib/three/examples/fonts/droid/README.txt:
--------------------------------------------------------------------------------
1 | Copyright (C) 2008 The Android Open Source Project
2 |
3 | Licensed under the Apache License, Version 2.0 (the "License");
4 | you may not use this file except in compliance with the License.
5 | You may obtain a copy of the License at
6 |
7 | http://www.apache.org/licenses/LICENSE-2.0
8 |
9 | Unless required by applicable law or agreed to in writing, software
10 | distributed under the License is distributed on an "AS IS" BASIS,
11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | See the License for the specific language governing permissions and
13 | limitations under the License.
14 |
15 | ##########
16 |
17 | This directory contains the fonts for the platform. They are licensed
18 | under the Apache 2 license.
19 |
--------------------------------------------------------------------------------
/lib/three/examples/fonts/ttf/kenpixel.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jasonChen1982/shader-studio/47c8cc134944358c92b0e3182c12cd0161870f07/lib/three/examples/fonts/ttf/kenpixel.ttf
--------------------------------------------------------------------------------
/lib/three/examples/js/PRNG.js:
--------------------------------------------------------------------------------
1 | // Park-Miller-Carta Pseudo-Random Number Generator
2 | // https://github.com/pnitsch/BitmapData.js/blob/master/js/BitmapData.js
3 |
4 | var PRNG = function () {
5 |
6 | this.seed = 1;
7 | this.next = function() {
8 |
9 | return ( this.gen() / 2147483647 );
10 |
11 | };
12 | this.nextRange = function( min, max ) {
13 |
14 | return min + ( ( max - min ) * this.next() )
15 |
16 | };
17 | this.gen = function() {
18 |
19 | return this.seed = ( this.seed * 16807 ) % 2147483647;
20 |
21 | };
22 |
23 | };
24 |
--------------------------------------------------------------------------------
/lib/three/examples/js/loaders/SVGLoader.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author mrdoob / http://mrdoob.com/
3 | * @author zz85 / http://joshuakoo.com/
4 | */
5 |
6 | THREE.SVGLoader = function ( manager ) {
7 |
8 | this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;
9 |
10 | };
11 |
12 | THREE.SVGLoader.prototype = {
13 |
14 | constructor: THREE.SVGLoader,
15 |
16 | load: function ( url, onLoad, onProgress, onError ) {
17 |
18 | var scope = this;
19 |
20 | var parser = new DOMParser();
21 |
22 | var loader = new THREE.FileLoader( scope.manager );
23 | loader.load( url, function ( svgString ) {
24 |
25 | var doc = parser.parseFromString( svgString, 'image/svg+xml' ); // application/xml
26 |
27 | onLoad( doc.documentElement );
28 |
29 | }, onProgress, onError );
30 |
31 | }
32 |
33 | };
34 |
--------------------------------------------------------------------------------
/lib/three/examples/js/loaders/ctm/CTMWorker.js:
--------------------------------------------------------------------------------
1 | importScripts( "lzma.js", "ctm.js" );
2 |
3 | self.onmessage = function ( event ) {
4 |
5 | var files = [];
6 |
7 | for ( var i = 0; i < event.data.offsets.length; i ++ ) {
8 |
9 | var stream = new CTM.Stream( event.data.data );
10 | stream.offset = event.data.offsets[ i ];
11 |
12 | files[ i ] = new CTM.File( stream, [ event.data.data.buffer ] );
13 |
14 | }
15 |
16 | self.postMessage( files );
17 | self.close();
18 |
19 | };
20 |
--------------------------------------------------------------------------------
/lib/three/examples/js/loaders/ctm/license/OpenCTM.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) 2009-2010 Marcus Geelnard
2 |
3 | This software is provided 'as-is', without any express or implied
4 | warranty. In no event will the authors be held liable for any damages
5 | arising from the use of this software.
6 |
7 | Permission is granted to anyone to use this software for any purpose,
8 | including commercial applications, and to alter it and redistribute it
9 | freely, subject to the following restrictions:
10 |
11 | 1. The origin of this software must not be misrepresented; you must not
12 | claim that you wrote the original software. If you use this software
13 | in a product, an acknowledgment in the product documentation would be
14 | appreciated but is not required.
15 |
16 | 2. Altered source versions must be plainly marked as such, and must not
17 | be misrepresented as being the original software.
18 |
19 | 3. This notice may not be removed or altered from any source
20 | distribution.
21 |
--------------------------------------------------------------------------------
/lib/three/examples/js/loaders/draco/draco_decoder.wasm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jasonChen1982/shader-studio/47c8cc134944358c92b0e3182c12cd0161870f07/lib/three/examples/js/loaders/draco/draco_decoder.wasm
--------------------------------------------------------------------------------
/lib/three/examples/js/modifiers/ExplodeModifier.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Make all faces use unique vertices
3 | * so that each face can be separated from others
4 | *
5 | * @author alteredq / http://alteredqualia.com/
6 | */
7 |
8 | THREE.ExplodeModifier = function () {
9 |
10 | };
11 |
12 | THREE.ExplodeModifier.prototype.modify = function ( geometry ) {
13 |
14 | var vertices = [];
15 |
16 | for ( var i = 0, il = geometry.faces.length; i < il; i ++ ) {
17 |
18 | var n = vertices.length;
19 |
20 | var face = geometry.faces[ i ];
21 |
22 | var a = face.a;
23 | var b = face.b;
24 | var c = face.c;
25 |
26 | var va = geometry.vertices[ a ];
27 | var vb = geometry.vertices[ b ];
28 | var vc = geometry.vertices[ c ];
29 |
30 | vertices.push( va.clone() );
31 | vertices.push( vb.clone() );
32 | vertices.push( vc.clone() );
33 |
34 | face.a = n;
35 | face.b = n + 1;
36 | face.c = n + 2;
37 |
38 | }
39 |
40 | geometry.vertices = vertices;
41 |
42 | };
43 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/RawNode.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.RawNode = function( value ) {
6 |
7 | THREE.GLNode.call( this, 'v4' );
8 |
9 | this.value = value;
10 |
11 | };
12 |
13 | THREE.RawNode.prototype = Object.create( THREE.GLNode.prototype );
14 | THREE.RawNode.prototype.constructor = THREE.RawNode;
15 |
16 | THREE.GLNode.prototype.generate = function( builder ) {
17 |
18 | var material = builder.material;
19 |
20 | var data = this.value.parseAndBuildCode( builder, this.type );
21 |
22 | var code = data.code + '\n';
23 |
24 | if ( builder.shader == 'vertex' ) {
25 |
26 | code += 'gl_Position = ' + data.result + ';';
27 |
28 | } else {
29 |
30 | code += 'gl_FragColor = ' + data.result + ';';
31 |
32 | }
33 |
34 | return code;
35 |
36 | };
37 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/VarNode.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.VarNode = function( type ) {
6 |
7 | THREE.GLNode.call( this, type );
8 |
9 | };
10 |
11 | THREE.VarNode.prototype = Object.create( THREE.GLNode.prototype );
12 | THREE.VarNode.prototype.constructor = THREE.VarNode;
13 |
14 | THREE.VarNode.prototype.getType = function( builder ) {
15 |
16 | return builder.getTypeByFormat( this.type );
17 |
18 | };
19 |
20 | THREE.VarNode.prototype.generate = function( builder, output ) {
21 |
22 | var varying = builder.material.getVar( this.uuid, this.type );
23 |
24 | return builder.format( varying.name, this.getType( builder ), output );
25 |
26 | };
27 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/accessors/ColorsNode.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.ColorsNode = function( index ) {
6 |
7 | THREE.TempNode.call( this, 'v4', { shared: false } );
8 |
9 | this.index = index || 0;
10 |
11 | };
12 |
13 | THREE.ColorsNode.vertexDict = [ 'color', 'color2' ];
14 | THREE.ColorsNode.fragmentDict = [ 'vColor', 'vColor2' ];
15 |
16 | THREE.ColorsNode.prototype = Object.create( THREE.TempNode.prototype );
17 | THREE.ColorsNode.prototype.constructor = THREE.ColorsNode;
18 |
19 | THREE.ColorsNode.prototype.generate = function( builder, output ) {
20 |
21 | var material = builder.material;
22 | var result;
23 |
24 | material.requestAttribs.color[ this.index ] = true;
25 |
26 | if ( builder.isShader( 'vertex' ) ) result = THREE.ColorsNode.vertexDict[ this.index ];
27 | else result = THREE.ColorsNode.fragmentDict[ this.index ];
28 |
29 | return builder.format( result, this.getType( builder ), output );
30 |
31 | };
32 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/accessors/LightNode.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.LightNode = function() {
6 |
7 | THREE.TempNode.call( this, 'v3', { shared: false } );
8 |
9 | };
10 |
11 | THREE.LightNode.prototype = Object.create( THREE.TempNode.prototype );
12 | THREE.LightNode.prototype.constructor = THREE.LightNode;
13 |
14 | THREE.LightNode.prototype.generate = function( builder, output ) {
15 |
16 | if ( builder.isCache( 'light' ) ) {
17 |
18 | return builder.format( 'reflectedLight.directDiffuse', this.getType( builder ), output )
19 |
20 | } else {
21 |
22 | console.warn( "THREE.LightNode is only compatible in \"light\" channel." );
23 |
24 | return builder.format( 'vec3( 0.0 )', this.getType( builder ), output );
25 |
26 | }
27 |
28 | };
29 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/accessors/ScreenUVNode.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.ScreenUVNode = function( resolution ) {
6 |
7 | THREE.TempNode.call( this, 'v2' );
8 |
9 | this.resolution = resolution;
10 |
11 | };
12 |
13 | THREE.ScreenUVNode.prototype = Object.create( THREE.TempNode.prototype );
14 | THREE.ScreenUVNode.prototype.constructor = THREE.ScreenUVNode;
15 |
16 | THREE.ScreenUVNode.prototype.generate = function( builder, output ) {
17 |
18 | var material = builder.material;
19 | var result;
20 |
21 | if ( builder.isShader( 'fragment' ) ) {
22 |
23 | result = '(gl_FragCoord.xy/' + this.resolution.build( builder, 'v2' ) + ')';
24 |
25 | } else {
26 |
27 | console.warn( "THREE.ScreenUVNode is not compatible with " + builder.shader + " shader." );
28 |
29 | result = 'vec2( 0.0 )';
30 |
31 | }
32 |
33 | return builder.format( result, this.getType( builder ), output );
34 |
35 | };
36 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/accessors/UVNode.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.UVNode = function( index ) {
6 |
7 | THREE.TempNode.call( this, 'v2', { shared: false } );
8 |
9 | this.index = index || 0;
10 |
11 | };
12 |
13 | THREE.UVNode.vertexDict = [ 'uv', 'uv2' ];
14 | THREE.UVNode.fragmentDict = [ 'vUv', 'vUv2' ];
15 |
16 | THREE.UVNode.prototype = Object.create( THREE.TempNode.prototype );
17 | THREE.UVNode.prototype.constructor = THREE.UVNode;
18 |
19 | THREE.UVNode.prototype.generate = function( builder, output ) {
20 |
21 | var material = builder.material;
22 | var result;
23 |
24 | material.requestAttribs.uv[ this.index ] = true;
25 |
26 | if ( builder.isShader( 'vertex' ) ) result = THREE.UVNode.vertexDict[ this.index ];
27 | else result = THREE.UVNode.fragmentDict[ this.index ];
28 |
29 | return builder.format( result, this.getType( builder ), output );
30 |
31 | };
32 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/inputs/ColorNode.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.ColorNode = function( color ) {
6 |
7 | THREE.InputNode.call( this, 'c' );
8 |
9 | this.value = new THREE.Color( color || 0 );
10 |
11 | };
12 |
13 | THREE.ColorNode.prototype = Object.create( THREE.InputNode.prototype );
14 | THREE.ColorNode.prototype.constructor = THREE.ColorNode;
15 |
16 | THREE.NodeMaterial.addShortcuts( THREE.ColorNode.prototype, 'value', [ 'r', 'g', 'b' ] );
17 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/inputs/FloatNode.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.FloatNode = function( value ) {
6 |
7 | THREE.InputNode.call( this, 'fv1' );
8 |
9 | this.value = [ value || 0 ];
10 |
11 | };
12 |
13 | THREE.FloatNode.prototype = Object.create( THREE.InputNode.prototype );
14 | THREE.FloatNode.prototype.constructor = THREE.FloatNode;
15 |
16 | Object.defineProperties( THREE.FloatNode.prototype, {
17 | number: {
18 | get: function() {
19 |
20 | return this.value[ 0 ];
21 |
22 | },
23 | set: function( val ) {
24 |
25 | this.value[ 0 ] = val;
26 |
27 | }
28 | }
29 | } );
30 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/inputs/IntNode.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.IntNode = function( value ) {
6 |
7 | THREE.InputNode.call( this, 'iv1' );
8 |
9 | this.value = [ Math.floor( value || 0 ) ];
10 |
11 | };
12 |
13 | THREE.IntNode.prototype = Object.create( THREE.InputNode.prototype );
14 | THREE.IntNode.prototype.constructor = THREE.IntNode;
15 |
16 | Object.defineProperties( THREE.IntNode.prototype, {
17 | number: {
18 | get: function() {
19 |
20 | return this.value[ 0 ];
21 |
22 | },
23 | set: function( val ) {
24 |
25 | this.value[ 0 ] = Math.floor( val );
26 |
27 | }
28 | }
29 | } );
30 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/inputs/Matrix4Node.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.Matrix4Node = function( matrix ) {
6 |
7 | THREE.InputNode.call( this, 'm4' );
8 |
9 | this.value = matrix || new THREE.Matrix4();
10 |
11 | };
12 |
13 | THREE.Matrix4Node.prototype = Object.create( THREE.InputNode.prototype );
14 | THREE.Matrix4Node.prototype.constructor = THREE.Matrix4Node;
15 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/inputs/ScreenNode.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.ScreenNode = function( coord ) {
6 |
7 | THREE.TextureNode.call( this, undefined, coord );
8 |
9 | };
10 |
11 | THREE.ScreenNode.prototype = Object.create( THREE.TextureNode.prototype );
12 | THREE.ScreenNode.prototype.constructor = THREE.ScreenNode;
13 |
14 | THREE.ScreenNode.prototype.isUnique = function() {
15 |
16 | return true;
17 |
18 | };
19 |
20 | THREE.ScreenNode.prototype.getTexture = function( builder, output ) {
21 |
22 | return THREE.InputNode.prototype.generate.call( this, builder, output, this.getUuid(), 't', 'renderTexture' );
23 |
24 | };
25 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/inputs/Vector2Node.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.Vector2Node = function( x, y ) {
6 |
7 | THREE.InputNode.call( this, 'v2' );
8 |
9 | this.value = new THREE.Vector2( x, y );
10 |
11 | };
12 |
13 | THREE.Vector2Node.prototype = Object.create( THREE.InputNode.prototype );
14 | THREE.Vector2Node.prototype.constructor = THREE.Vector2Node;
15 |
16 | THREE.NodeMaterial.addShortcuts( THREE.Vector2Node.prototype, 'value', [ 'x', 'y' ] );
17 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/inputs/Vector3Node.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.Vector3Node = function( x, y, z ) {
6 |
7 | THREE.InputNode.call( this, 'v3' );
8 |
9 | this.type = 'v3';
10 | this.value = new THREE.Vector3( x, y, z );
11 |
12 | };
13 |
14 | THREE.Vector3Node.prototype = Object.create( THREE.InputNode.prototype );
15 | THREE.Vector3Node.prototype.constructor = THREE.Vector3Node;
16 |
17 | THREE.NodeMaterial.addShortcuts( THREE.Vector3Node.prototype, 'value', [ 'x', 'y', 'z' ] );
18 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/inputs/Vector4Node.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.Vector4Node = function( x, y, z, w ) {
6 |
7 | THREE.InputNode.call( this, 'v4' );
8 |
9 | this.value = new THREE.Vector4( x, y, z, w );
10 |
11 | };
12 |
13 | THREE.Vector4Node.prototype = Object.create( THREE.InputNode.prototype );
14 | THREE.Vector4Node.prototype.constructor = THREE.Vector4Node;
15 |
16 | THREE.NodeMaterial.addShortcuts( THREE.Vector4Node.prototype, 'value', [ 'x', 'y', 'z', 'w' ] );
17 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/materials/PhongNodeMaterial.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.PhongNodeMaterial = function() {
6 |
7 | this.node = new THREE.PhongNode();
8 |
9 | THREE.NodeMaterial.call( this, this.node, this.node );
10 |
11 | };
12 |
13 | THREE.PhongNodeMaterial.prototype = Object.create( THREE.NodeMaterial.prototype );
14 | THREE.PhongNodeMaterial.prototype.constructor = THREE.PhongNodeMaterial;
15 |
16 | THREE.NodeMaterial.addShortcuts( THREE.PhongNodeMaterial.prototype, 'node',
17 | [ 'color', 'alpha', 'specular', 'shininess', 'normal', 'normalScale', 'emissive', 'ambient', 'light', 'shadow', 'ao', 'environment', 'environmentAlpha', 'transform' ] );
18 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/materials/SpriteNodeMaterial.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.SpriteNodeMaterial = function () {
6 |
7 | this.node = new THREE.SpriteNode();
8 |
9 | THREE.NodeMaterial.call( this, this.node, this.node );
10 |
11 | };
12 |
13 | THREE.SpriteNodeMaterial.prototype = Object.create( THREE.NodeMaterial.prototype );
14 | THREE.SpriteNodeMaterial.prototype.constructor = THREE.SpriteNodeMaterial;
15 |
16 | THREE.NodeMaterial.addShortcuts( THREE.SpriteNodeMaterial.prototype, 'node',
17 | [ 'color', 'alpha', 'transform', 'spherical' ] );
18 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/materials/StandardNodeMaterial.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.StandardNodeMaterial = function() {
6 |
7 | this.node = new THREE.StandardNode();
8 |
9 | THREE.NodeMaterial.call( this, this.node, this.node );
10 |
11 | };
12 |
13 | THREE.StandardNodeMaterial.prototype = Object.create( THREE.NodeMaterial.prototype );
14 | THREE.StandardNodeMaterial.prototype.constructor = THREE.StandardNodeMaterial;
15 |
16 | THREE.NodeMaterial.addShortcuts( THREE.StandardNodeMaterial.prototype, 'node',
17 | [ 'color', 'alpha', 'roughness', 'metalness', 'reflectivity', 'clearCoat', 'clearCoatRoughness', 'normal', 'normalScale', 'emissive', 'ambient', 'light', 'shadow', 'ao', 'environment', 'transform' ] );
18 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/postprocessing/NodePass.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.NodePass = function() {
6 |
7 | THREE.ShaderPass.call( this );
8 |
9 | this.textureID = 'renderTexture';
10 |
11 | this.fragment = new THREE.RawNode( new THREE.ScreenNode() );
12 |
13 | this.node = new THREE.NodeMaterial();
14 | this.node.fragment = this.fragment;
15 |
16 | this.build();
17 |
18 | };
19 |
20 | THREE.NodePass.prototype = Object.create( THREE.ShaderPass.prototype );
21 | THREE.NodePass.prototype.constructor = THREE.NodePass;
22 |
23 | THREE.NodeMaterial.addShortcuts( THREE.NodePass.prototype, 'fragment', [ 'value' ] );
24 |
25 | THREE.NodePass.prototype.build = function() {
26 |
27 | this.node.build();
28 |
29 | this.uniforms = this.node.uniforms;
30 | this.material = this.node;
31 |
32 | };
33 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/utils/LuminanceNode.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.LuminanceNode = function( rgb ) {
6 |
7 | THREE.TempNode.call( this, 'fv1' );
8 |
9 | this.rgb = rgb;
10 |
11 | };
12 |
13 | THREE.LuminanceNode.prototype = Object.create( THREE.TempNode.prototype );
14 | THREE.LuminanceNode.prototype.constructor = THREE.LuminanceNode;
15 |
16 | THREE.LuminanceNode.prototype.generate = function( builder, output ) {
17 |
18 | builder.include( 'luminance_rgb' );
19 |
20 | return builder.format( 'luminance_rgb(' + this.rgb.build( builder, 'v3' ) + ')', this.getType( builder ), output );
21 |
22 | };
23 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/utils/NoiseNode.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.NoiseNode = function( coord ) {
6 |
7 | THREE.TempNode.call( this, 'fv1' );
8 |
9 | this.coord = coord;
10 |
11 | };
12 |
13 | THREE.NoiseNode.prototype = Object.create( THREE.TempNode.prototype );
14 | THREE.NoiseNode.prototype.constructor = THREE.NoiseNode;
15 |
16 | THREE.NoiseNode.prototype.generate = function( builder, output ) {
17 |
18 | builder.include( 'snoise' );
19 |
20 | return builder.format( 'snoise(' + this.coord.build( builder, 'v2' ) + ')', this.getType( builder ), output );
21 |
22 | };
23 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/utils/ResolutionNode.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.ResolutionNode = function( renderer ) {
6 |
7 | THREE.Vector2Node.call( this );
8 |
9 | this.requestUpdate = true;
10 |
11 | this.renderer = renderer;
12 |
13 | };
14 |
15 | THREE.ResolutionNode.prototype = Object.create( THREE.Vector2Node.prototype );
16 | THREE.ResolutionNode.prototype.constructor = THREE.ResolutionNode;
17 |
18 | THREE.ResolutionNode.prototype.updateFrame = function( delta ) {
19 |
20 | var size = this.renderer.getSize(),
21 | pixelRatio = this.renderer.getPixelRatio();
22 |
23 | this.x = size.width * pixelRatio;
24 | this.y = size.height * pixelRatio;
25 |
26 | };
27 |
--------------------------------------------------------------------------------
/lib/three/examples/js/nodes/utils/TimerNode.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author sunag / http://www.sunag.com.br/
3 | */
4 |
5 | THREE.TimerNode = function( value, scale ) {
6 |
7 | THREE.FloatNode.call( this, value );
8 |
9 | this.requestUpdate = true;
10 |
11 | this.scale = scale !== undefined ? scale : 1;
12 |
13 | };
14 |
15 | THREE.TimerNode.prototype = Object.create( THREE.FloatNode.prototype );
16 | THREE.TimerNode.prototype.constructor = THREE.TimerNode;
17 |
18 | THREE.TimerNode.prototype.updateFrame = function( delta ) {
19 |
20 | this.number += delta * this.scale;
21 |
22 | };
23 |
--------------------------------------------------------------------------------
/lib/three/examples/js/objects/ReflectorRTT.js:
--------------------------------------------------------------------------------
1 | THREE.ReflectorRTT = function ( geometry, options ) {
2 |
3 | THREE.Reflector.call( this, geometry, options );
4 |
5 | this.geometry.setDrawRange( 0, 0 ); // avoid rendering geometry
6 |
7 | };
8 |
9 | THREE.ReflectorRTT.prototype = Object.create( THREE.Reflector.prototype );
10 |
--------------------------------------------------------------------------------
/lib/three/examples/js/shaders/BasicShader.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author mrdoob / http://www.mrdoob.com
3 | *
4 | * Simple test shader
5 | */
6 |
7 | THREE.BasicShader = {
8 |
9 | uniforms: {},
10 |
11 | vertexShader: [
12 |
13 | "void main() {",
14 |
15 | "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
16 |
17 | "}"
18 |
19 | ].join( "\n" ),
20 |
21 | fragmentShader: [
22 |
23 | "void main() {",
24 |
25 | "gl_FragColor = vec4( 1.0, 0.0, 0.0, 0.5 );",
26 |
27 | "}"
28 |
29 | ].join( "\n" )
30 |
31 | };
32 |
--------------------------------------------------------------------------------
/lib/three/examples/js/shaders/BlendShader.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author alteredq / http://alteredqualia.com/
3 | *
4 | * Blend two textures
5 | */
6 |
7 | THREE.BlendShader = {
8 |
9 | uniforms: {
10 |
11 | "tDiffuse1": { value: null },
12 | "tDiffuse2": { value: null },
13 | "mixRatio": { value: 0.5 },
14 | "opacity": { value: 1.0 }
15 |
16 | },
17 |
18 | vertexShader: [
19 |
20 | "varying vec2 vUv;",
21 |
22 | "void main() {",
23 |
24 | "vUv = uv;",
25 | "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
26 |
27 | "}"
28 |
29 | ].join( "\n" ),
30 |
31 | fragmentShader: [
32 |
33 | "uniform float opacity;",
34 | "uniform float mixRatio;",
35 |
36 | "uniform sampler2D tDiffuse1;",
37 | "uniform sampler2D tDiffuse2;",
38 |
39 | "varying vec2 vUv;",
40 |
41 | "void main() {",
42 |
43 | "vec4 texel1 = texture2D( tDiffuse1, vUv );",
44 | "vec4 texel2 = texture2D( tDiffuse2, vUv );",
45 | "gl_FragColor = opacity * mix( texel1, texel2, mixRatio );",
46 |
47 | "}"
48 |
49 | ].join( "\n" )
50 |
51 | };
52 |
--------------------------------------------------------------------------------
/lib/three/examples/js/shaders/ColorifyShader.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author alteredq / http://alteredqualia.com/
3 | *
4 | * Colorify shader
5 | */
6 |
7 | THREE.ColorifyShader = {
8 |
9 | uniforms: {
10 |
11 | "tDiffuse": { value: null },
12 | "color": { value: new THREE.Color( 0xffffff ) }
13 |
14 | },
15 |
16 | vertexShader: [
17 |
18 | "varying vec2 vUv;",
19 |
20 | "void main() {",
21 |
22 | "vUv = uv;",
23 | "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
24 |
25 | "}"
26 |
27 | ].join( "\n" ),
28 |
29 | fragmentShader: [
30 |
31 | "uniform vec3 color;",
32 | "uniform sampler2D tDiffuse;",
33 |
34 | "varying vec2 vUv;",
35 |
36 | "void main() {",
37 |
38 | "vec4 texel = texture2D( tDiffuse, vUv );",
39 |
40 | "vec3 luma = vec3( 0.299, 0.587, 0.114 );",
41 | "float v = dot( texel.xyz, luma );",
42 |
43 | "gl_FragColor = vec4( v * color, texel.w );",
44 |
45 | "}"
46 |
47 | ].join( "\n" )
48 |
49 | };
50 |
--------------------------------------------------------------------------------
/lib/three/examples/js/shaders/CopyShader.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author alteredq / http://alteredqualia.com/
3 | *
4 | * Full-screen textured quad shader
5 | */
6 |
7 | THREE.CopyShader = {
8 |
9 | uniforms: {
10 |
11 | "tDiffuse": { value: null },
12 | "opacity": { value: 1.0 }
13 |
14 | },
15 |
16 | vertexShader: [
17 |
18 | "varying vec2 vUv;",
19 |
20 | "void main() {",
21 |
22 | "vUv = uv;",
23 | "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
24 |
25 | "}"
26 |
27 | ].join( "\n" ),
28 |
29 | fragmentShader: [
30 |
31 | "uniform float opacity;",
32 |
33 | "uniform sampler2D tDiffuse;",
34 |
35 | "varying vec2 vUv;",
36 |
37 | "void main() {",
38 |
39 | "vec4 texel = texture2D( tDiffuse, vUv );",
40 | "gl_FragColor = opacity * texel;",
41 |
42 | "}"
43 |
44 | ].join( "\n" )
45 |
46 | };
47 |
--------------------------------------------------------------------------------
/lib/three/examples/js/shaders/GammaCorrectionShader.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author WestLangley / http://github.com/WestLangley
3 | *
4 | * Gamma Correction Shader
5 | * http://en.wikipedia.org/wiki/gamma_correction
6 | */
7 |
8 | THREE.GammaCorrectionShader = {
9 |
10 | uniforms: {
11 |
12 | "tDiffuse": { value: null }
13 |
14 | },
15 |
16 | vertexShader: [
17 |
18 | "varying vec2 vUv;",
19 |
20 | "void main() {",
21 |
22 | "vUv = uv;",
23 | "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
24 |
25 | "}"
26 |
27 | ].join( "\n" ),
28 |
29 | fragmentShader: [
30 |
31 | "uniform sampler2D tDiffuse;",
32 |
33 | "varying vec2 vUv;",
34 |
35 | "void main() {",
36 |
37 | "vec4 tex = texture2D( tDiffuse, vec2( vUv.x, vUv.y ) );",
38 |
39 | "gl_FragColor = LinearToGamma( tex, float( GAMMA_FACTOR ) );",
40 |
41 | "}"
42 |
43 | ].join( "\n" )
44 |
45 | };
46 |
--------------------------------------------------------------------------------
/lib/three/examples/js/shaders/LuminosityShader.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author alteredq / http://alteredqualia.com/
3 | *
4 | * Luminosity
5 | * http://en.wikipedia.org/wiki/Luminosity
6 | */
7 |
8 | THREE.LuminosityShader = {
9 |
10 | uniforms: {
11 |
12 | "tDiffuse": { value: null }
13 |
14 | },
15 |
16 | vertexShader: [
17 |
18 | "varying vec2 vUv;",
19 |
20 | "void main() {",
21 |
22 | "vUv = uv;",
23 |
24 | "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
25 |
26 | "}"
27 |
28 | ].join( "\n" ),
29 |
30 | fragmentShader: [
31 |
32 | "#include ",
33 |
34 | "uniform sampler2D tDiffuse;",
35 |
36 | "varying vec2 vUv;",
37 |
38 | "void main() {",
39 |
40 | "vec4 texel = texture2D( tDiffuse, vUv );",
41 |
42 | "float l = linearToRelativeLuminance( texel.rgb );",
43 |
44 | "gl_FragColor = vec4( l, l, l, texel.w );",
45 |
46 | "}"
47 |
48 | ].join( "\n" )
49 |
50 | };
51 |
--------------------------------------------------------------------------------
/lib/three/examples/js/shaders/UnpackDepthRGBAShader.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author alteredq / http://alteredqualia.com/
3 | *
4 | * Unpack RGBA depth shader
5 | * - show RGBA encoded depth as monochrome color
6 | */
7 |
8 | THREE.UnpackDepthRGBAShader = {
9 |
10 | uniforms: {
11 |
12 | "tDiffuse": { value: null },
13 | "opacity": { value: 1.0 }
14 |
15 | },
16 |
17 | vertexShader: [
18 |
19 | "varying vec2 vUv;",
20 |
21 | "void main() {",
22 |
23 | "vUv = uv;",
24 | "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
25 |
26 | "}"
27 |
28 | ].join( "\n" ),
29 |
30 | fragmentShader: [
31 |
32 | "uniform float opacity;",
33 |
34 | "uniform sampler2D tDiffuse;",
35 |
36 | "varying vec2 vUv;",
37 |
38 | "#include ",
39 |
40 | "void main() {",
41 |
42 | "float depth = 1.0 - unpackRGBAToDepth( texture2D( tDiffuse, vUv ) );",
43 | "gl_FragColor = opacity * vec4( vec3( depth ), 1.0 );",
44 |
45 | "}"
46 |
47 | ].join( "\n" )
48 |
49 | };
50 |
--------------------------------------------------------------------------------
/lib/three/src/animation/tracks/ColorKeyframeTrack.js:
--------------------------------------------------------------------------------
1 | import { KeyframeTrack } from '../KeyframeTrack.js';
2 |
3 | /**
4 | *
5 | * A Track of keyframe values that represent color.
6 | *
7 | *
8 | * @author Ben Houston / http://clara.io/
9 | * @author David Sarno / http://lighthaus.us/
10 | * @author tschw
11 | */
12 |
13 | function ColorKeyframeTrack( name, times, values, interpolation ) {
14 |
15 | KeyframeTrack.call( this, name, times, values, interpolation );
16 |
17 | }
18 |
19 | ColorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {
20 |
21 | constructor: ColorKeyframeTrack,
22 |
23 | ValueTypeName: 'color'
24 |
25 | // ValueBufferType is inherited
26 |
27 | // DefaultInterpolation is inherited
28 |
29 | // Note: Very basic implementation and nothing special yet.
30 | // However, this is the place for color space parameterization.
31 |
32 | } );
33 |
34 | export { ColorKeyframeTrack };
35 |
--------------------------------------------------------------------------------
/lib/three/src/animation/tracks/NumberKeyframeTrack.js:
--------------------------------------------------------------------------------
1 | import { KeyframeTrack } from '../KeyframeTrack.js';
2 |
3 | /**
4 | *
5 | * A Track of numeric keyframe values.
6 | *
7 | * @author Ben Houston / http://clara.io/
8 | * @author David Sarno / http://lighthaus.us/
9 | * @author tschw
10 | */
11 |
12 | function NumberKeyframeTrack( name, times, values, interpolation ) {
13 |
14 | KeyframeTrack.call( this, name, times, values, interpolation );
15 |
16 | }
17 |
18 | NumberKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {
19 |
20 | constructor: NumberKeyframeTrack,
21 |
22 | ValueTypeName: 'number'
23 |
24 | // ValueBufferType is inherited
25 |
26 | // DefaultInterpolation is inherited
27 |
28 | } );
29 |
30 | export { NumberKeyframeTrack };
31 |
--------------------------------------------------------------------------------
/lib/three/src/animation/tracks/StringKeyframeTrack.js:
--------------------------------------------------------------------------------
1 | import { InterpolateDiscrete } from '../../constants.js';
2 | import { KeyframeTrack } from '../KeyframeTrack.js';
3 |
4 | /**
5 | *
6 | * A Track that interpolates Strings
7 | *
8 | *
9 | * @author Ben Houston / http://clara.io/
10 | * @author David Sarno / http://lighthaus.us/
11 | * @author tschw
12 | */
13 |
14 | function StringKeyframeTrack( name, times, values, interpolation ) {
15 |
16 | KeyframeTrack.call( this, name, times, values, interpolation );
17 |
18 | }
19 |
20 | StringKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {
21 |
22 | constructor: StringKeyframeTrack,
23 |
24 | ValueTypeName: 'string',
25 | ValueBufferType: Array,
26 |
27 | DefaultInterpolation: InterpolateDiscrete,
28 |
29 | InterpolantFactoryMethodLinear: undefined,
30 |
31 | InterpolantFactoryMethodSmooth: undefined
32 |
33 | } );
34 |
35 | export { StringKeyframeTrack };
36 |
--------------------------------------------------------------------------------
/lib/three/src/animation/tracks/VectorKeyframeTrack.js:
--------------------------------------------------------------------------------
1 | import { KeyframeTrack } from '../KeyframeTrack.js';
2 |
3 | /**
4 | *
5 | * A Track of vectored keyframe values.
6 | *
7 | *
8 | * @author Ben Houston / http://clara.io/
9 | * @author David Sarno / http://lighthaus.us/
10 | * @author tschw
11 | */
12 |
13 | function VectorKeyframeTrack( name, times, values, interpolation ) {
14 |
15 | KeyframeTrack.call( this, name, times, values, interpolation );
16 |
17 | }
18 |
19 | VectorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {
20 |
21 | constructor: VectorKeyframeTrack,
22 |
23 | ValueTypeName: 'vector'
24 |
25 | // ValueBufferType is inherited
26 |
27 | // DefaultInterpolation is inherited
28 |
29 | } );
30 |
31 | export { VectorKeyframeTrack };
32 |
--------------------------------------------------------------------------------
/lib/three/src/audio/AudioAnalyser.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author mrdoob / http://mrdoob.com/
3 | */
4 |
5 | function AudioAnalyser( audio, fftSize ) {
6 |
7 | this.analyser = audio.context.createAnalyser();
8 | this.analyser.fftSize = fftSize !== undefined ? fftSize : 2048;
9 |
10 | this.data = new Uint8Array( this.analyser.frequencyBinCount );
11 |
12 | audio.getOutput().connect( this.analyser );
13 |
14 | }
15 |
16 | Object.assign( AudioAnalyser.prototype, {
17 |
18 | getFrequencyData: function () {
19 |
20 | this.analyser.getByteFrequencyData( this.data );
21 |
22 | return this.data;
23 |
24 | },
25 |
26 | getAverageFrequency: function () {
27 |
28 | var value = 0, data = this.getFrequencyData();
29 |
30 | for ( var i = 0; i < data.length; i ++ ) {
31 |
32 | value += data[ i ];
33 |
34 | }
35 |
36 | return value / data.length;
37 |
38 | }
39 |
40 | } );
41 |
42 | export { AudioAnalyser };
43 |
--------------------------------------------------------------------------------
/lib/three/src/audio/AudioContext.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author mrdoob / http://mrdoob.com/
3 | */
4 |
5 | var context;
6 |
7 | var AudioContext = {
8 |
9 | getContext: function () {
10 |
11 | if ( context === undefined ) {
12 |
13 | context = new ( window.AudioContext || window.webkitAudioContext )();
14 |
15 | }
16 |
17 | return context;
18 |
19 | },
20 |
21 | setContext: function ( value ) {
22 |
23 | context = value;
24 |
25 | }
26 |
27 | };
28 |
29 | export { AudioContext };
30 |
--------------------------------------------------------------------------------
/lib/three/src/cameras/ArrayCamera.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author mrdoob / http://mrdoob.com/
3 | */
4 |
5 | import { PerspectiveCamera } from './PerspectiveCamera.js';
6 |
7 | function ArrayCamera( array ) {
8 |
9 | PerspectiveCamera.call( this );
10 |
11 | this.cameras = array || [];
12 |
13 | }
14 |
15 | ArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), {
16 |
17 | constructor: ArrayCamera,
18 |
19 | isArrayCamera: true
20 |
21 | } );
22 |
23 |
24 | export { ArrayCamera };
25 |
--------------------------------------------------------------------------------
/lib/three/src/core/InstancedBufferAttribute.js:
--------------------------------------------------------------------------------
1 | import { BufferAttribute } from './BufferAttribute.js';
2 |
3 | /**
4 | * @author benaadams / https://twitter.com/ben_a_adams
5 | */
6 |
7 | function InstancedBufferAttribute( array, itemSize, meshPerAttribute ) {
8 |
9 | BufferAttribute.call( this, array, itemSize );
10 |
11 | this.meshPerAttribute = meshPerAttribute || 1;
12 |
13 | }
14 |
15 | InstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), {
16 |
17 | constructor: InstancedBufferAttribute,
18 |
19 | isInstancedBufferAttribute: true,
20 |
21 | copy: function ( source ) {
22 |
23 | BufferAttribute.prototype.copy.call( this, source );
24 |
25 | this.meshPerAttribute = source.meshPerAttribute;
26 |
27 | return this;
28 |
29 | }
30 |
31 | } );
32 |
33 |
34 |
35 | export { InstancedBufferAttribute };
36 |
--------------------------------------------------------------------------------
/lib/three/src/core/InstancedBufferGeometry.js:
--------------------------------------------------------------------------------
1 | import { BufferGeometry } from './BufferGeometry.js';
2 |
3 | /**
4 | * @author benaadams / https://twitter.com/ben_a_adams
5 | */
6 |
7 | function InstancedBufferGeometry() {
8 |
9 | BufferGeometry.call( this );
10 |
11 | this.type = 'InstancedBufferGeometry';
12 | this.maxInstancedCount = undefined;
13 |
14 | }
15 |
16 | InstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), {
17 |
18 | constructor: InstancedBufferGeometry,
19 |
20 | isInstancedBufferGeometry: true,
21 |
22 | copy: function ( source ) {
23 |
24 | BufferGeometry.prototype.copy.call( this, source );
25 |
26 | this.maxInstancedCount = source.maxInstancedCount;
27 |
28 | return this;
29 |
30 | },
31 |
32 | clone: function () {
33 |
34 | return new this.constructor().copy( this );
35 |
36 | }
37 |
38 | } );
39 |
40 | export { InstancedBufferGeometry };
41 |
--------------------------------------------------------------------------------
/lib/three/src/core/InstancedInterleavedBuffer.js:
--------------------------------------------------------------------------------
1 | import { InterleavedBuffer } from './InterleavedBuffer.js';
2 |
3 | /**
4 | * @author benaadams / https://twitter.com/ben_a_adams
5 | */
6 |
7 | function InstancedInterleavedBuffer( array, stride, meshPerAttribute ) {
8 |
9 | InterleavedBuffer.call( this, array, stride );
10 |
11 | this.meshPerAttribute = meshPerAttribute || 1;
12 |
13 | }
14 |
15 | InstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), {
16 |
17 | constructor: InstancedInterleavedBuffer,
18 |
19 | isInstancedInterleavedBuffer: true,
20 |
21 | copy: function ( source ) {
22 |
23 | InterleavedBuffer.prototype.copy.call( this, source );
24 |
25 | this.meshPerAttribute = source.meshPerAttribute;
26 |
27 | return this;
28 |
29 | }
30 |
31 | } );
32 |
33 | export { InstancedInterleavedBuffer };
34 |
--------------------------------------------------------------------------------
/lib/three/src/core/Layers.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author mrdoob / http://mrdoob.com/
3 | */
4 |
5 | function Layers() {
6 |
7 | this.mask = 1 | 0;
8 |
9 | }
10 |
11 | Object.assign( Layers.prototype, {
12 |
13 | set: function ( channel ) {
14 |
15 | this.mask = 1 << channel | 0;
16 |
17 | },
18 |
19 | enable: function ( channel ) {
20 |
21 | this.mask |= 1 << channel | 0;
22 |
23 | },
24 |
25 | toggle: function ( channel ) {
26 |
27 | this.mask ^= 1 << channel | 0;
28 |
29 | },
30 |
31 | disable: function ( channel ) {
32 |
33 | this.mask &= ~ ( 1 << channel | 0 );
34 |
35 | },
36 |
37 | test: function ( layers ) {
38 |
39 | return ( this.mask & layers.mask ) !== 0;
40 |
41 | }
42 |
43 | } );
44 |
45 |
46 | export { Layers };
47 |
--------------------------------------------------------------------------------
/lib/three/src/core/Uniform.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author mrdoob / http://mrdoob.com/
3 | */
4 |
5 | function Uniform( value ) {
6 |
7 | if ( typeof value === 'string' ) {
8 |
9 | console.warn( 'THREE.Uniform: Type parameter is no longer needed.' );
10 | value = arguments[ 1 ];
11 |
12 | }
13 |
14 | this.value = value;
15 |
16 | }
17 |
18 | Uniform.prototype.clone = function () {
19 |
20 | return new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );
21 |
22 | };
23 |
24 | export { Uniform };
25 |
--------------------------------------------------------------------------------
/lib/three/src/extras/SceneUtils.js:
--------------------------------------------------------------------------------
1 | import { Matrix4 } from '../math/Matrix4.js';
2 | import { Mesh } from '../objects/Mesh.js';
3 | import { Group } from '../objects/Group.js';
4 |
5 | /**
6 | * @author alteredq / http://alteredqualia.com/
7 | */
8 |
9 | var SceneUtils = {
10 |
11 | createMultiMaterialObject: function ( geometry, materials ) {
12 |
13 | var group = new Group();
14 |
15 | for ( var i = 0, l = materials.length; i < l; i ++ ) {
16 |
17 | group.add( new Mesh( geometry, materials[ i ] ) );
18 |
19 | }
20 |
21 | return group;
22 |
23 | },
24 |
25 | detach: function ( child, parent, scene ) {
26 |
27 | child.applyMatrix( parent.matrixWorld );
28 | parent.remove( child );
29 | scene.add( child );
30 |
31 | },
32 |
33 | attach: function ( child, scene, parent ) {
34 |
35 | child.applyMatrix( new Matrix4().getInverse( parent.matrixWorld ) );
36 |
37 | scene.remove( child );
38 | parent.add( child );
39 |
40 | }
41 |
42 | };
43 |
44 |
45 | export { SceneUtils };
46 |
--------------------------------------------------------------------------------
/lib/three/src/extras/curves/ArcCurve.js:
--------------------------------------------------------------------------------
1 | import { EllipseCurve } from './EllipseCurve.js';
2 |
3 |
4 | function ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {
5 |
6 | EllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );
7 |
8 | this.type = 'ArcCurve';
9 |
10 | }
11 |
12 | ArcCurve.prototype = Object.create( EllipseCurve.prototype );
13 | ArcCurve.prototype.constructor = ArcCurve;
14 |
15 | ArcCurve.prototype.isArcCurve = true;
16 |
17 |
18 | export { ArcCurve };
19 |
--------------------------------------------------------------------------------
/lib/three/src/extras/curves/Curves.js:
--------------------------------------------------------------------------------
1 | export { ArcCurve } from './ArcCurve.js';
2 | export { CatmullRomCurve3 } from './CatmullRomCurve3.js';
3 | export { CubicBezierCurve } from './CubicBezierCurve.js';
4 | export { CubicBezierCurve3 } from './CubicBezierCurve3.js';
5 | export { EllipseCurve } from './EllipseCurve.js';
6 | export { LineCurve } from './LineCurve.js';
7 | export { LineCurve3 } from './LineCurve3.js';
8 | export { QuadraticBezierCurve } from './QuadraticBezierCurve.js';
9 | export { QuadraticBezierCurve3 } from './QuadraticBezierCurve3.js';
10 | export { SplineCurve } from './SplineCurve.js';
11 |
--------------------------------------------------------------------------------
/lib/three/src/extras/objects/ImmediateRenderObject.js:
--------------------------------------------------------------------------------
1 | import { Object3D } from '../../core/Object3D.js';
2 |
3 | /**
4 | * @author alteredq / http://alteredqualia.com/
5 | */
6 |
7 | function ImmediateRenderObject( material ) {
8 |
9 | Object3D.call( this );
10 |
11 | this.material = material;
12 | this.render = function ( /* renderCallback */ ) {};
13 |
14 | }
15 |
16 | ImmediateRenderObject.prototype = Object.create( Object3D.prototype );
17 | ImmediateRenderObject.prototype.constructor = ImmediateRenderObject;
18 |
19 | ImmediateRenderObject.prototype.isImmediateRenderObject = true;
20 |
21 |
22 | export { ImmediateRenderObject };
23 |
--------------------------------------------------------------------------------
/lib/three/src/lights/AmbientLight.js:
--------------------------------------------------------------------------------
1 | import { Light } from './Light.js';
2 |
3 | /**
4 | * @author mrdoob / http://mrdoob.com/
5 | */
6 |
7 | function AmbientLight( color, intensity ) {
8 |
9 | Light.call( this, color, intensity );
10 |
11 | this.type = 'AmbientLight';
12 |
13 | this.castShadow = undefined;
14 |
15 | }
16 |
17 | AmbientLight.prototype = Object.assign( Object.create( Light.prototype ), {
18 |
19 | constructor: AmbientLight,
20 |
21 | isAmbientLight: true
22 |
23 | } );
24 |
25 |
26 | export { AmbientLight };
27 |
--------------------------------------------------------------------------------
/lib/three/src/lights/DirectionalLightShadow.js:
--------------------------------------------------------------------------------
1 | import { LightShadow } from './LightShadow.js';
2 | import { OrthographicCamera } from '../cameras/OrthographicCamera.js';
3 |
4 | /**
5 | * @author mrdoob / http://mrdoob.com/
6 | */
7 |
8 | function DirectionalLightShadow( ) {
9 |
10 | LightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );
11 |
12 | }
13 |
14 | DirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {
15 |
16 | constructor: DirectionalLightShadow
17 |
18 | } );
19 |
20 |
21 | export { DirectionalLightShadow };
22 |
--------------------------------------------------------------------------------
/lib/three/src/lights/HemisphereLight.js:
--------------------------------------------------------------------------------
1 | import { Light } from './Light.js';
2 | import { Color } from '../math/Color.js';
3 | import { Object3D } from '../core/Object3D.js';
4 |
5 | /**
6 | * @author alteredq / http://alteredqualia.com/
7 | */
8 |
9 | function HemisphereLight( skyColor, groundColor, intensity ) {
10 |
11 | Light.call( this, skyColor, intensity );
12 |
13 | this.type = 'HemisphereLight';
14 |
15 | this.castShadow = undefined;
16 |
17 | this.position.copy( Object3D.DefaultUp );
18 | this.updateMatrix();
19 |
20 | this.groundColor = new Color( groundColor );
21 |
22 | }
23 |
24 | HemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), {
25 |
26 | constructor: HemisphereLight,
27 |
28 | isHemisphereLight: true,
29 |
30 | copy: function ( source ) {
31 |
32 | Light.prototype.copy.call( this, source );
33 |
34 | this.groundColor.copy( source.groundColor );
35 |
36 | return this;
37 |
38 | }
39 |
40 | } );
41 |
42 |
43 | export { HemisphereLight };
44 |
--------------------------------------------------------------------------------
/lib/three/src/loaders/AudioLoader.js:
--------------------------------------------------------------------------------
1 | import { AudioContext } from '../audio/AudioContext.js';
2 | import { FileLoader } from './FileLoader.js';
3 | import { DefaultLoadingManager } from './LoadingManager.js';
4 |
5 | /**
6 | * @author Reece Aaron Lecrivain / http://reecenotes.com/
7 | */
8 |
9 | function AudioLoader( manager ) {
10 |
11 | this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;
12 |
13 | }
14 |
15 | Object.assign( AudioLoader.prototype, {
16 |
17 | load: function ( url, onLoad, onProgress, onError ) {
18 |
19 | var loader = new FileLoader( this.manager );
20 | loader.setResponseType( 'arraybuffer' );
21 | loader.load( url, function ( buffer ) {
22 |
23 | var context = AudioContext.getContext();
24 |
25 | context.decodeAudioData( buffer, function ( audioBuffer ) {
26 |
27 | onLoad( audioBuffer );
28 |
29 | } );
30 |
31 | }, onProgress, onError );
32 |
33 | }
34 |
35 | } );
36 |
37 |
38 | export { AudioLoader };
39 |
--------------------------------------------------------------------------------
/lib/three/src/loaders/Cache.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author mrdoob / http://mrdoob.com/
3 | */
4 |
5 | var Cache = {
6 |
7 | enabled: false,
8 |
9 | files: {},
10 |
11 | add: function ( key, file ) {
12 |
13 | if ( this.enabled === false ) return;
14 |
15 | // console.log( 'THREE.Cache', 'Adding key:', key );
16 |
17 | this.files[ key ] = file;
18 |
19 | },
20 |
21 | get: function ( key ) {
22 |
23 | if ( this.enabled === false ) return;
24 |
25 | // console.log( 'THREE.Cache', 'Checking key:', key );
26 |
27 | return this.files[ key ];
28 |
29 | },
30 |
31 | remove: function ( key ) {
32 |
33 | delete this.files[ key ];
34 |
35 | },
36 |
37 | clear: function () {
38 |
39 | this.files = {};
40 |
41 | }
42 |
43 | };
44 |
45 |
46 | export { Cache };
47 |
--------------------------------------------------------------------------------
/lib/three/src/loaders/LoaderUtils.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author Don McCurdy / https://www.donmccurdy.com
3 | */
4 |
5 | var LoaderUtils = {
6 |
7 | decodeText: function ( array ) {
8 |
9 | if ( typeof TextDecoder !== 'undefined' ) {
10 |
11 | return new TextDecoder().decode( array );
12 |
13 | }
14 |
15 | // Avoid the String.fromCharCode.apply(null, array) shortcut, which
16 | // throws a "maximum call stack size exceeded" error for large arrays.
17 |
18 | var s = '';
19 |
20 | for ( var i = 0, il = array.length; i < il; i ++ ) {
21 |
22 | // Implicitly assumes little-endian.
23 | s += String.fromCharCode( array[ i ] );
24 |
25 | }
26 |
27 | return s;
28 |
29 | },
30 |
31 | extractUrlBase: function ( url ) {
32 |
33 | var parts = url.split( '/' );
34 |
35 | if ( parts.length === 1 ) return './';
36 |
37 | parts.pop();
38 |
39 | return parts.join( '/' ) + '/';
40 |
41 | }
42 |
43 | };
44 |
45 | export { LoaderUtils };
46 |
--------------------------------------------------------------------------------
/lib/three/src/materials/Materials.js:
--------------------------------------------------------------------------------
1 | export { ShadowMaterial } from './ShadowMaterial.js';
2 | export { SpriteMaterial } from './SpriteMaterial.js';
3 | export { RawShaderMaterial } from './RawShaderMaterial.js';
4 | export { ShaderMaterial } from './ShaderMaterial.js';
5 | export { PointsMaterial } from './PointsMaterial.js';
6 | export { MeshPhysicalMaterial } from './MeshPhysicalMaterial.js';
7 | export { MeshStandardMaterial } from './MeshStandardMaterial.js';
8 | export { MeshPhongMaterial } from './MeshPhongMaterial.js';
9 | export { MeshToonMaterial } from './MeshToonMaterial.js';
10 | export { MeshNormalMaterial } from './MeshNormalMaterial.js';
11 | export { MeshLambertMaterial } from './MeshLambertMaterial.js';
12 | export { MeshDepthMaterial } from './MeshDepthMaterial.js';
13 | export { MeshDistanceMaterial } from './MeshDistanceMaterial.js';
14 | export { MeshBasicMaterial } from './MeshBasicMaterial.js';
15 | export { LineDashedMaterial } from './LineDashedMaterial.js';
16 | export { LineBasicMaterial } from './LineBasicMaterial.js';
17 | export { Material } from './Material.js';
18 |
--------------------------------------------------------------------------------
/lib/three/src/materials/MeshToonMaterial.js:
--------------------------------------------------------------------------------
1 | import { MeshPhongMaterial } from './MeshPhongMaterial.js';
2 |
3 | /**
4 | * @author takahirox / http://github.com/takahirox
5 | *
6 | * parameters = {
7 | * gradientMap: new THREE.Texture( )
8 | * }
9 | */
10 |
11 | function MeshToonMaterial( parameters ) {
12 |
13 | MeshPhongMaterial.call( this );
14 |
15 | this.defines = { 'TOON': '' };
16 |
17 | this.type = 'MeshToonMaterial';
18 |
19 | this.gradientMap = null;
20 |
21 | this.setValues( parameters );
22 |
23 | }
24 |
25 | MeshToonMaterial.prototype = Object.create( MeshPhongMaterial.prototype );
26 | MeshToonMaterial.prototype.constructor = MeshToonMaterial;
27 |
28 | MeshToonMaterial.prototype.isMeshToonMaterial = true;
29 |
30 | MeshToonMaterial.prototype.copy = function ( source ) {
31 |
32 | MeshPhongMaterial.prototype.copy.call( this, source );
33 |
34 | this.gradientMap = source.gradientMap;
35 |
36 | return this;
37 |
38 | };
39 |
40 |
41 | export { MeshToonMaterial };
42 |
--------------------------------------------------------------------------------
/lib/three/src/materials/RawShaderMaterial.js:
--------------------------------------------------------------------------------
1 | import { ShaderMaterial } from './ShaderMaterial.js';
2 |
3 | /**
4 | * @author mrdoob / http://mrdoob.com/
5 | */
6 |
7 | function RawShaderMaterial( parameters ) {
8 |
9 | ShaderMaterial.call( this, parameters );
10 |
11 | this.type = 'RawShaderMaterial';
12 |
13 | }
14 |
15 | RawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype );
16 | RawShaderMaterial.prototype.constructor = RawShaderMaterial;
17 |
18 | RawShaderMaterial.prototype.isRawShaderMaterial = true;
19 |
20 |
21 | export { RawShaderMaterial };
22 |
--------------------------------------------------------------------------------
/lib/three/src/materials/ShadowMaterial.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author mrdoob / http://mrdoob.com/
3 | *
4 | * parameters = {
5 | * color: ,
6 | * opacity:
7 | * }
8 | */
9 |
10 | import { Material } from './Material.js';
11 | import { Color } from '../math/Color.js';
12 |
13 | function ShadowMaterial( parameters ) {
14 |
15 | Material.call( this );
16 |
17 | this.type = 'ShadowMaterial';
18 |
19 | this.color = new Color( 0x000000 );
20 | this.opacity = 1.0;
21 |
22 | this.lights = true;
23 | this.transparent = true;
24 |
25 | this.setValues( parameters );
26 |
27 | }
28 |
29 | ShadowMaterial.prototype = Object.create( Material.prototype );
30 | ShadowMaterial.prototype.constructor = ShadowMaterial;
31 |
32 | ShadowMaterial.prototype.isShadowMaterial = true;
33 |
34 |
35 | export { ShadowMaterial };
36 |
--------------------------------------------------------------------------------
/lib/three/src/math/interpolants/DiscreteInterpolant.js:
--------------------------------------------------------------------------------
1 | import { Interpolant } from '../Interpolant.js';
2 |
3 | /**
4 | *
5 | * Interpolant that evaluates to the sample value at the position preceeding
6 | * the parameter.
7 | *
8 | * @author tschw
9 | */
10 |
11 | function DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {
12 |
13 | Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );
14 |
15 | }
16 |
17 | DiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {
18 |
19 | constructor: DiscreteInterpolant,
20 |
21 | interpolate_: function ( i1 /*, t0, t, t1 */ ) {
22 |
23 | return this.copySampleValue_( i1 - 1 );
24 |
25 | }
26 |
27 | } );
28 |
29 |
30 | export { DiscreteInterpolant };
31 |
--------------------------------------------------------------------------------
/lib/three/src/math/interpolants/LinearInterpolant.js:
--------------------------------------------------------------------------------
1 | import { Interpolant } from '../Interpolant.js';
2 |
3 | /**
4 | * @author tschw
5 | */
6 |
7 | function LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {
8 |
9 | Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );
10 |
11 | }
12 |
13 | LinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {
14 |
15 | constructor: LinearInterpolant,
16 |
17 | interpolate_: function ( i1, t0, t, t1 ) {
18 |
19 | var result = this.resultBuffer,
20 | values = this.sampleValues,
21 | stride = this.valueSize,
22 |
23 | offset1 = i1 * stride,
24 | offset0 = offset1 - stride,
25 |
26 | weight1 = ( t - t0 ) / ( t1 - t0 ),
27 | weight0 = 1 - weight1;
28 |
29 | for ( var i = 0; i !== stride; ++ i ) {
30 |
31 | result[ i ] =
32 | values[ offset0 + i ] * weight0 +
33 | values[ offset1 + i ] * weight1;
34 |
35 | }
36 |
37 | return result;
38 |
39 | }
40 |
41 | } );
42 |
43 |
44 | export { LinearInterpolant };
45 |
--------------------------------------------------------------------------------
/lib/three/src/objects/Bone.js:
--------------------------------------------------------------------------------
1 | import { Object3D } from '../core/Object3D.js';
2 |
3 | /**
4 | * @author mikael emtinger / http://gomo.se/
5 | * @author alteredq / http://alteredqualia.com/
6 | * @author ikerr / http://verold.com
7 | */
8 |
9 | function Bone() {
10 |
11 | Object3D.call( this );
12 |
13 | this.type = 'Bone';
14 |
15 | }
16 |
17 | Bone.prototype = Object.assign( Object.create( Object3D.prototype ), {
18 |
19 | constructor: Bone,
20 |
21 | isBone: true
22 |
23 | } );
24 |
25 |
26 | export { Bone };
27 |
--------------------------------------------------------------------------------
/lib/three/src/objects/Group.js:
--------------------------------------------------------------------------------
1 | import { Object3D } from '../core/Object3D.js';
2 |
3 | /**
4 | * @author mrdoob / http://mrdoob.com/
5 | */
6 |
7 | function Group() {
8 |
9 | Object3D.call( this );
10 |
11 | this.type = 'Group';
12 |
13 | }
14 |
15 | Group.prototype = Object.assign( Object.create( Object3D.prototype ), {
16 |
17 | constructor: Group,
18 |
19 | isGroup: true
20 |
21 | } );
22 |
23 |
24 | export { Group };
25 |
--------------------------------------------------------------------------------
/lib/three/src/objects/LineLoop.js:
--------------------------------------------------------------------------------
1 | import { Line } from './Line.js';
2 |
3 | /**
4 | * @author mgreter / http://github.com/mgreter
5 | */
6 |
7 | function LineLoop( geometry, material ) {
8 |
9 | Line.call( this, geometry, material );
10 |
11 | this.type = 'LineLoop';
12 |
13 | }
14 |
15 | LineLoop.prototype = Object.assign( Object.create( Line.prototype ), {
16 |
17 | constructor: LineLoop,
18 |
19 | isLineLoop: true,
20 |
21 | } );
22 |
23 |
24 | export { LineLoop };
25 |
--------------------------------------------------------------------------------
/lib/three/src/objects/LineSegments.js:
--------------------------------------------------------------------------------
1 | import { Line } from './Line.js';
2 |
3 | /**
4 | * @author mrdoob / http://mrdoob.com/
5 | */
6 |
7 | function LineSegments( geometry, material ) {
8 |
9 | Line.call( this, geometry, material );
10 |
11 | this.type = 'LineSegments';
12 |
13 | }
14 |
15 | LineSegments.prototype = Object.assign( Object.create( Line.prototype ), {
16 |
17 | constructor: LineSegments,
18 |
19 | isLineSegments: true
20 |
21 | } );
22 |
23 |
24 | export { LineSegments };
25 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/WebGLRenderTargetCube.js:
--------------------------------------------------------------------------------
1 | import { WebGLRenderTarget } from './WebGLRenderTarget.js';
2 |
3 | /**
4 | * @author alteredq / http://alteredqualia.com
5 | */
6 |
7 | function WebGLRenderTargetCube( width, height, options ) {
8 |
9 | WebGLRenderTarget.call( this, width, height, options );
10 |
11 | this.activeCubeFace = 0; // PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5
12 | this.activeMipMapLevel = 0;
13 |
14 | }
15 |
16 | WebGLRenderTargetCube.prototype = Object.create( WebGLRenderTarget.prototype );
17 | WebGLRenderTargetCube.prototype.constructor = WebGLRenderTargetCube;
18 |
19 | WebGLRenderTargetCube.prototype.isWebGLRenderTargetCube = true;
20 |
21 |
22 | export { WebGLRenderTargetCube };
23 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_ALPHAMAP
2 |
3 | diffuseColor.a *= texture2D( alphaMap, vUv ).g;
4 |
5 | #endif
6 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/alphamap_pars_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_ALPHAMAP
2 |
3 | uniform sampler2D alphaMap;
4 |
5 | #endif
6 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef ALPHATEST
2 |
3 | if ( diffuseColor.a < ALPHATEST ) discard;
4 |
5 | #endif
6 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_AOMAP
2 |
3 | // reads channel R, compatible with a combined OcclusionRoughnessMetallic (RGB) texture
4 | float ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;
5 |
6 | reflectedLight.indirectDiffuse *= ambientOcclusion;
7 |
8 | #if defined( USE_ENVMAP ) && defined( PHYSICAL )
9 |
10 | float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );
11 |
12 | reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );
13 |
14 | #endif
15 |
16 | #endif
17 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/aomap_pars_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_AOMAP
2 |
3 | uniform sampler2D aoMap;
4 | uniform float aoMapIntensity;
5 |
6 | #endif
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/begin_vertex.glsl:
--------------------------------------------------------------------------------
1 |
2 | vec3 transformed = vec3( position );
3 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/beginnormal_vertex.glsl:
--------------------------------------------------------------------------------
1 |
2 | vec3 objectNormal = vec3( normal );
3 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/clipping_planes_fragment.glsl:
--------------------------------------------------------------------------------
1 | #if NUM_CLIPPING_PLANES > 0
2 |
3 | for ( int i = 0; i < UNION_CLIPPING_PLANES; ++ i ) {
4 |
5 | vec4 plane = clippingPlanes[ i ];
6 | if ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;
7 |
8 | }
9 |
10 | #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES
11 |
12 | bool clipped = true;
13 | for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; ++ i ) {
14 | vec4 plane = clippingPlanes[ i ];
15 | clipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;
16 | }
17 |
18 | if ( clipped ) discard;
19 |
20 | #endif
21 |
22 | #endif
23 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/clipping_planes_pars_fragment.glsl:
--------------------------------------------------------------------------------
1 | #if NUM_CLIPPING_PLANES > 0
2 |
3 | #if ! defined( PHYSICAL ) && ! defined( PHONG )
4 | varying vec3 vViewPosition;
5 | #endif
6 |
7 | uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];
8 |
9 | #endif
10 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/clipping_planes_pars_vertex.glsl:
--------------------------------------------------------------------------------
1 | #if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )
2 | varying vec3 vViewPosition;
3 | #endif
4 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/clipping_planes_vertex.glsl:
--------------------------------------------------------------------------------
1 | #if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )
2 | vViewPosition = - mvPosition.xyz;
3 | #endif
4 |
5 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/color_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_COLOR
2 |
3 | diffuseColor.rgb *= vColor;
4 |
5 | #endif
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_COLOR
2 |
3 | varying vec3 vColor;
4 |
5 | #endif
6 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_COLOR
2 |
3 | varying vec3 vColor;
4 |
5 | #endif
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/color_vertex.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_COLOR
2 |
3 | vColor.xyz = color.xyz;
4 |
5 | #endif
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl:
--------------------------------------------------------------------------------
1 | vec3 transformedNormal = normalMatrix * objectNormal;
2 |
3 | #ifdef FLIP_SIDED
4 |
5 | transformedNormal = - transformedNormal;
6 |
7 | #endif
8 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/displacementmap_pars_vertex.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_DISPLACEMENTMAP
2 |
3 | uniform sampler2D displacementMap;
4 | uniform float displacementScale;
5 | uniform float displacementBias;
6 |
7 | #endif
8 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_DISPLACEMENTMAP
2 |
3 | transformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );
4 |
5 | #endif
6 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/dithering_fragment.glsl:
--------------------------------------------------------------------------------
1 | #if defined( DITHERING )
2 |
3 | gl_FragColor.rgb = dithering( gl_FragColor.rgb );
4 |
5 | #endif
6 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/dithering_pars_fragment.glsl:
--------------------------------------------------------------------------------
1 | #if defined( DITHERING )
2 |
3 | // based on https://www.shadertoy.com/view/MslGR8
4 | vec3 dithering( vec3 color ) {
5 | //Calculate grid position
6 | float grid_position = rand( gl_FragCoord.xy );
7 |
8 | //Shift the individual colors differently, thus making it even harder to see the dithering pattern
9 | vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );
10 |
11 | //modify shift acording to grid position.
12 | dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );
13 |
14 | //shift the color by dither_shift
15 | return color + dither_shift_RGB;
16 | }
17 |
18 | #endif
19 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_EMISSIVEMAP
2 |
3 | vec4 emissiveColor = texture2D( emissiveMap, vUv );
4 |
5 | emissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;
6 |
7 | totalEmissiveRadiance *= emissiveColor.rgb;
8 |
9 | #endif
10 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_EMISSIVEMAP
2 |
3 | uniform sampler2D emissiveMap;
4 |
5 | #endif
6 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/encodings_fragment.glsl:
--------------------------------------------------------------------------------
1 | gl_FragColor = linearToOutputTexel( gl_FragColor );
2 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl:
--------------------------------------------------------------------------------
1 | #if defined( USE_ENVMAP ) || defined( PHYSICAL )
2 | uniform float reflectivity;
3 | uniform float envMapIntensity;
4 | #endif
5 |
6 | #ifdef USE_ENVMAP
7 |
8 | #if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )
9 | varying vec3 vWorldPosition;
10 | #endif
11 |
12 | #ifdef ENVMAP_TYPE_CUBE
13 | uniform samplerCube envMap;
14 | #else
15 | uniform sampler2D envMap;
16 | #endif
17 | uniform float flipEnvMap;
18 |
19 | #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )
20 | uniform float refractionRatio;
21 | #else
22 | varying vec3 vReflect;
23 | #endif
24 |
25 | #endif
26 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_ENVMAP
2 |
3 | #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )
4 | varying vec3 vWorldPosition;
5 |
6 | #else
7 |
8 | varying vec3 vReflect;
9 | uniform float refractionRatio;
10 |
11 | #endif
12 |
13 | #endif
14 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_ENVMAP
2 |
3 | #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )
4 |
5 | vWorldPosition = worldPosition.xyz;
6 |
7 | #else
8 |
9 | vec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );
10 |
11 | vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );
12 |
13 | #ifdef ENVMAP_MODE_REFLECTION
14 |
15 | vReflect = reflect( cameraToVertex, worldNormal );
16 |
17 | #else
18 |
19 | vReflect = refract( cameraToVertex, worldNormal, refractionRatio );
20 |
21 | #endif
22 |
23 | #endif
24 |
25 | #endif
26 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/fog_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_FOG
2 |
3 | #ifdef FOG_EXP2
4 |
5 | float fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );
6 |
7 | #else
8 |
9 | float fogFactor = smoothstep( fogNear, fogFar, fogDepth );
10 |
11 | #endif
12 |
13 | gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );
14 |
15 | #endif
16 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/fog_pars_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_FOG
2 |
3 | uniform vec3 fogColor;
4 | varying float fogDepth;
5 |
6 | #ifdef FOG_EXP2
7 |
8 | uniform float fogDensity;
9 |
10 | #else
11 |
12 | uniform float fogNear;
13 | uniform float fogFar;
14 |
15 | #endif
16 |
17 | #endif
18 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/fog_pars_vertex.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_FOG
2 |
3 | varying float fogDepth;
4 |
5 | #endif
6 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/fog_vertex.glsl:
--------------------------------------------------------------------------------
1 |
2 | #ifdef USE_FOG
3 | fogDepth = -mvPosition.z;
4 | #endif
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef TOON
2 |
3 | uniform sampler2D gradientMap;
4 |
5 | vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {
6 |
7 | // dotNL will be from -1.0 to 1.0
8 | float dotNL = dot( normal, lightDirection );
9 | vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );
10 |
11 | #ifdef USE_GRADIENTMAP
12 |
13 | return texture2D( gradientMap, coord ).rgb;
14 |
15 | #else
16 |
17 | return ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );
18 |
19 | #endif
20 |
21 |
22 | }
23 |
24 | #endif
25 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_LIGHTMAP
2 |
3 | reflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity; // factor of PI should not be present; included here to prevent breakage
4 |
5 | #endif
6 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/lightmap_pars_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_LIGHTMAP
2 |
3 | uniform sampler2D lightMap;
4 | uniform float lightMapIntensity;
5 |
6 | #endif
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/lights_phong_fragment.glsl:
--------------------------------------------------------------------------------
1 | BlinnPhongMaterial material;
2 | material.diffuseColor = diffuseColor.rgb;
3 | material.specularColor = specular;
4 | material.specularShininess = shininess;
5 | material.specularStrength = specularStrength;
6 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl:
--------------------------------------------------------------------------------
1 | PhysicalMaterial material;
2 | material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );
3 | material.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );
4 | #ifdef STANDARD
5 | material.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );
6 | #else
7 | material.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );
8 | material.clearCoat = saturate( clearCoat ); // Burley clearcoat model
9 | material.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );
10 | #endif
11 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl:
--------------------------------------------------------------------------------
1 | #if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )
2 |
3 | gl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;
4 |
5 | #endif
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_LOGDEPTHBUF
2 |
3 | uniform float logDepthBufFC;
4 |
5 | #ifdef USE_LOGDEPTHBUF_EXT
6 |
7 | varying float vFragDepth;
8 |
9 | #endif
10 |
11 | #endif
12 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_LOGDEPTHBUF
2 |
3 | #ifdef USE_LOGDEPTHBUF_EXT
4 |
5 | varying float vFragDepth;
6 |
7 | #endif
8 |
9 | uniform float logDepthBufFC;
10 |
11 | #endif
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_LOGDEPTHBUF
2 |
3 | #ifdef USE_LOGDEPTHBUF_EXT
4 |
5 | vFragDepth = 1.0 + gl_Position.w;
6 |
7 | #else
8 |
9 | gl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;
10 |
11 | gl_Position.z *= gl_Position.w;
12 |
13 | #endif
14 |
15 | #endif
16 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/map_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_MAP
2 |
3 | vec4 texelColor = texture2D( map, vUv );
4 |
5 | texelColor = mapTexelToLinear( texelColor );
6 | diffuseColor *= texelColor;
7 |
8 | #endif
9 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_MAP
2 |
3 | uniform sampler2D map;
4 |
5 | #endif
6 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_MAP
2 |
3 | vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;
4 | vec4 mapTexel = texture2D( map, uv );
5 | diffuseColor *= mapTexelToLinear( mapTexel );
6 |
7 | #endif
8 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_MAP
2 |
3 | uniform mat3 uvTransform;
4 | uniform sampler2D map;
5 |
6 | #endif
7 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl:
--------------------------------------------------------------------------------
1 | float metalnessFactor = metalness;
2 |
3 | #ifdef USE_METALNESSMAP
4 |
5 | vec4 texelMetalness = texture2D( metalnessMap, vUv );
6 |
7 | // reads channel B, compatible with a combined OcclusionRoughnessMetallic (RGB) texture
8 | metalnessFactor *= texelMetalness.b;
9 |
10 | #endif
11 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/metalnessmap_pars_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_METALNESSMAP
2 |
3 | uniform sampler2D metalnessMap;
4 |
5 | #endif
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_MORPHNORMALS
2 |
3 | objectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];
4 | objectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];
5 | objectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];
6 | objectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];
7 |
8 | #endif
9 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_MORPHTARGETS
2 |
3 | #ifndef USE_MORPHNORMALS
4 |
5 | uniform float morphTargetInfluences[ 8 ];
6 |
7 | #else
8 |
9 | uniform float morphTargetInfluences[ 4 ];
10 |
11 | #endif
12 |
13 | #endif
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_MORPHTARGETS
2 |
3 | transformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];
4 | transformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];
5 | transformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];
6 | transformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];
7 |
8 | #ifndef USE_MORPHNORMALS
9 |
10 | transformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];
11 | transformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];
12 | transformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];
13 | transformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];
14 |
15 | #endif
16 |
17 | #endif
18 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/normal_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef FLAT_SHADED
2 |
3 | // Workaround for Adreno/Nexus5 not able able to do dFdx( vViewPosition ) ...
4 |
5 | vec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );
6 | vec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );
7 | vec3 normal = normalize( cross( fdx, fdy ) );
8 |
9 | #else
10 |
11 | vec3 normal = normalize( vNormal );
12 |
13 | #ifdef DOUBLE_SIDED
14 |
15 | normal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );
16 |
17 | #endif
18 |
19 | #endif
20 |
21 | #ifdef USE_NORMALMAP
22 |
23 | normal = perturbNormal2Arb( -vViewPosition, normal );
24 |
25 | #elif defined( USE_BUMPMAP )
26 |
27 | normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );
28 |
29 | #endif
30 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_NORMALMAP
2 |
3 | uniform sampler2D normalMap;
4 | uniform vec2 normalScale;
5 |
6 | // Per-Pixel Tangent Space Normal Mapping
7 | // http://hacksoflife.blogspot.ch/2009/11/per-pixel-tangent-space-normal-mapping.html
8 |
9 | vec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {
10 |
11 | // Workaround for Adreno 3XX dFd*( vec3 ) bug. See #9988
12 |
13 | vec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );
14 | vec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );
15 | vec2 st0 = dFdx( vUv.st );
16 | vec2 st1 = dFdy( vUv.st );
17 |
18 | vec3 S = normalize( q0 * st1.t - q1 * st0.t );
19 | vec3 T = normalize( -q0 * st1.s + q1 * st0.s );
20 | vec3 N = normalize( surf_norm );
21 |
22 | vec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;
23 | mapN.xy = normalScale * mapN.xy;
24 | mat3 tsn = mat3( S, T, N );
25 | return normalize( tsn * mapN );
26 |
27 | }
28 |
29 | #endif
30 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef PREMULTIPLIED_ALPHA
2 |
3 | // Get get normal blending with premultipled, use with CustomBlending, OneFactor, OneMinusSrcAlphaFactor, AddEquation.
4 | gl_FragColor.rgb *= gl_FragColor.a;
5 |
6 | #endif
7 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/project_vertex.glsl:
--------------------------------------------------------------------------------
1 | vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );
2 |
3 | gl_Position = projectionMatrix * mvPosition;
4 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl:
--------------------------------------------------------------------------------
1 | float roughnessFactor = roughness;
2 |
3 | #ifdef USE_ROUGHNESSMAP
4 |
5 | vec4 texelRoughness = texture2D( roughnessMap, vUv );
6 |
7 | // reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture
8 | roughnessFactor *= texelRoughness.g;
9 |
10 | #endif
11 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/roughnessmap_pars_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_ROUGHNESSMAP
2 |
3 | uniform sampler2D roughnessMap;
4 |
5 | #endif
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_SHADOWMAP
2 |
3 | #if NUM_DIR_LIGHTS > 0
4 |
5 | uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];
6 | varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];
7 |
8 | #endif
9 |
10 | #if NUM_SPOT_LIGHTS > 0
11 |
12 | uniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];
13 | varying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];
14 |
15 | #endif
16 |
17 | #if NUM_POINT_LIGHTS > 0
18 |
19 | uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];
20 | varying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];
21 |
22 | #endif
23 |
24 | /*
25 | #if NUM_RECT_AREA_LIGHTS > 0
26 |
27 | // TODO (abelnation): uniforms for area light shadows
28 |
29 | #endif
30 | */
31 |
32 | #endif
33 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_SHADOWMAP
2 |
3 | #if NUM_DIR_LIGHTS > 0
4 |
5 | for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {
6 |
7 | vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;
8 |
9 | }
10 |
11 | #endif
12 |
13 | #if NUM_SPOT_LIGHTS > 0
14 |
15 | for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {
16 |
17 | vSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;
18 |
19 | }
20 |
21 | #endif
22 |
23 | #if NUM_POINT_LIGHTS > 0
24 |
25 | for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {
26 |
27 | vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;
28 |
29 | }
30 |
31 | #endif
32 |
33 | /*
34 | #if NUM_RECT_AREA_LIGHTS > 0
35 |
36 | // TODO (abelnation): update vAreaShadowCoord with area light info
37 |
38 | #endif
39 | */
40 |
41 | #endif
42 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/skinbase_vertex.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_SKINNING
2 |
3 | mat4 boneMatX = getBoneMatrix( skinIndex.x );
4 | mat4 boneMatY = getBoneMatrix( skinIndex.y );
5 | mat4 boneMatZ = getBoneMatrix( skinIndex.z );
6 | mat4 boneMatW = getBoneMatrix( skinIndex.w );
7 |
8 | #endif
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/skinning_vertex.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_SKINNING
2 |
3 | vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );
4 |
5 | vec4 skinned = vec4( 0.0 );
6 | skinned += boneMatX * skinVertex * skinWeight.x;
7 | skinned += boneMatY * skinVertex * skinWeight.y;
8 | skinned += boneMatZ * skinVertex * skinWeight.z;
9 | skinned += boneMatW * skinVertex * skinWeight.w;
10 |
11 | transformed = ( bindMatrixInverse * skinned ).xyz;
12 |
13 | #endif
14 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/skinnormal_vertex.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_SKINNING
2 |
3 | mat4 skinMatrix = mat4( 0.0 );
4 | skinMatrix += skinWeight.x * boneMatX;
5 | skinMatrix += skinWeight.y * boneMatY;
6 | skinMatrix += skinWeight.z * boneMatZ;
7 | skinMatrix += skinWeight.w * boneMatW;
8 | skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;
9 |
10 | objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;
11 |
12 | #endif
13 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl:
--------------------------------------------------------------------------------
1 | float specularStrength;
2 |
3 | #ifdef USE_SPECULARMAP
4 |
5 | vec4 texelSpecular = texture2D( specularMap, vUv );
6 | specularStrength = texelSpecular.r;
7 |
8 | #else
9 |
10 | specularStrength = 1.0;
11 |
12 | #endif
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/specularmap_pars_fragment.glsl:
--------------------------------------------------------------------------------
1 | #ifdef USE_SPECULARMAP
2 |
3 | uniform sampler2D specularMap;
4 |
5 | #endif
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/tonemapping_fragment.glsl:
--------------------------------------------------------------------------------
1 | #if defined( TONE_MAPPING )
2 |
3 | gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );
4 |
5 | #endif
6 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/uv2_pars_fragment.glsl:
--------------------------------------------------------------------------------
1 | #if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )
2 |
3 | varying vec2 vUv2;
4 |
5 | #endif
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/uv2_pars_vertex.glsl:
--------------------------------------------------------------------------------
1 | #if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )
2 |
3 | attribute vec2 uv2;
4 | varying vec2 vUv2;
5 |
6 | #endif
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/uv2_vertex.glsl:
--------------------------------------------------------------------------------
1 | #if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )
2 |
3 | vUv2 = uv2;
4 |
5 | #endif
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl:
--------------------------------------------------------------------------------
1 | #if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )
2 |
3 | varying vec2 vUv;
4 |
5 | #endif
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl:
--------------------------------------------------------------------------------
1 | #if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )
2 |
3 | varying vec2 vUv;
4 | uniform mat3 uvTransform;
5 |
6 | #endif
7 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/uv_vertex.glsl:
--------------------------------------------------------------------------------
1 | #if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )
2 |
3 | vUv = ( uvTransform * vec3( uv, 1 ) ).xy;
4 |
5 | #endif
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl:
--------------------------------------------------------------------------------
1 | #if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )
2 |
3 | vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );
4 |
5 | #endif
6 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderLib/cube_frag.glsl:
--------------------------------------------------------------------------------
1 | uniform samplerCube tCube;
2 | uniform float tFlip;
3 | uniform float opacity;
4 |
5 | varying vec3 vWorldPosition;
6 |
7 | void main() {
8 |
9 | gl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );
10 | gl_FragColor.a *= opacity;
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderLib/cube_vert.glsl:
--------------------------------------------------------------------------------
1 | varying vec3 vWorldPosition;
2 |
3 | #include
4 |
5 | void main() {
6 |
7 | vWorldPosition = transformDirection( position, modelMatrix );
8 |
9 | #include
10 | #include
11 |
12 | gl_Position.z = gl_Position.w; // set z to camera.far
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderLib/depth_frag.glsl:
--------------------------------------------------------------------------------
1 | #if DEPTH_PACKING == 3200
2 |
3 | uniform float opacity;
4 |
5 | #endif
6 |
7 | #include
8 | #include
9 | #include
10 | #include
11 | #include
12 | #include
13 | #include
14 |
15 | void main() {
16 |
17 | #include
18 |
19 | vec4 diffuseColor = vec4( 1.0 );
20 |
21 | #if DEPTH_PACKING == 3200
22 |
23 | diffuseColor.a = opacity;
24 |
25 | #endif
26 |
27 | #include
28 | #include
29 | #include
30 |
31 | #include
32 |
33 | #if DEPTH_PACKING == 3200
34 |
35 | gl_FragColor = vec4( vec3( gl_FragCoord.z ), opacity );
36 |
37 | #elif DEPTH_PACKING == 3201
38 |
39 | gl_FragColor = packDepthToRGBA( gl_FragCoord.z );
40 |
41 | #endif
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderLib/depth_vert.glsl:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include
8 |
9 | void main() {
10 |
11 | #include
12 |
13 | #include
14 |
15 | #ifdef USE_DISPLACEMENTMAP
16 |
17 | #include
18 | #include
19 | #include
20 |
21 | #endif
22 |
23 | #include
24 | #include
25 | #include
26 | #include
27 | #include
28 | #include
29 | #include
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderLib/distanceRGBA_frag.glsl:
--------------------------------------------------------------------------------
1 | #define DISTANCE
2 |
3 | uniform vec3 referencePosition;
4 | uniform float nearDistance;
5 | uniform float farDistance;
6 | varying vec3 vWorldPosition;
7 |
8 | #include
9 | #include
10 | #include
11 | #include
12 | #include
13 | #include
14 |
15 | void main () {
16 |
17 | #include
18 |
19 | vec4 diffuseColor = vec4( 1.0 );
20 |
21 | #include
22 | #include
23 | #include
24 |
25 | float dist = length( vWorldPosition - referencePosition );
26 | dist = ( dist - nearDistance ) / ( farDistance - nearDistance );
27 | dist = saturate( dist ); // clamp to [ 0, 1 ]
28 |
29 | gl_FragColor = packDepthToRGBA( dist );
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderLib/distanceRGBA_vert.glsl:
--------------------------------------------------------------------------------
1 | #define DISTANCE
2 |
3 | varying vec3 vWorldPosition;
4 |
5 | #include
6 | #include
7 | #include
8 | #include
9 | #include
10 | #include
11 |
12 | void main() {
13 |
14 | #include
15 |
16 | #include
17 |
18 | #ifdef USE_DISPLACEMENTMAP
19 |
20 | #include
21 | #include
22 | #include
23 |
24 | #endif
25 |
26 | #include
27 | #include
28 | #include
29 | #include
30 | #include
31 | #include
32 | #include
33 |
34 | vWorldPosition = worldPosition.xyz;
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderLib/equirect_frag.glsl:
--------------------------------------------------------------------------------
1 | uniform sampler2D tEquirect;
2 |
3 | varying vec3 vWorldPosition;
4 |
5 | #include
6 |
7 | void main() {
8 |
9 | vec3 direction = normalize( vWorldPosition );
10 |
11 | vec2 sampleUV;
12 |
13 | sampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;
14 |
15 | sampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;
16 |
17 | gl_FragColor = texture2D( tEquirect, sampleUV );
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderLib/equirect_vert.glsl:
--------------------------------------------------------------------------------
1 | varying vec3 vWorldPosition;
2 |
3 | #include
4 |
5 | void main() {
6 |
7 | vWorldPosition = transformDirection( position, modelMatrix );
8 |
9 | #include
10 | #include
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderLib/linedashed_frag.glsl:
--------------------------------------------------------------------------------
1 | uniform vec3 diffuse;
2 | uniform float opacity;
3 |
4 | uniform float dashSize;
5 | uniform float totalSize;
6 |
7 | varying float vLineDistance;
8 |
9 | #include
10 | #include
11 | #include
12 | #include
13 | #include
14 |
15 | void main() {
16 |
17 | #include
18 |
19 | if ( mod( vLineDistance, totalSize ) > dashSize ) {
20 |
21 | discard;
22 |
23 | }
24 |
25 | vec3 outgoingLight = vec3( 0.0 );
26 | vec4 diffuseColor = vec4( diffuse, opacity );
27 |
28 | #include
29 | #include
30 |
31 | outgoingLight = diffuseColor.rgb; // simple shader
32 |
33 | gl_FragColor = vec4( outgoingLight, diffuseColor.a );
34 |
35 | #include
36 | #include
37 | #include
38 | #include
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderLib/linedashed_vert.glsl:
--------------------------------------------------------------------------------
1 | uniform float scale;
2 | attribute float lineDistance;
3 |
4 | varying float vLineDistance;
5 |
6 | #include
7 | #include
8 | #include
9 | #include
10 | #include
11 |
12 | void main() {
13 |
14 | #include
15 |
16 | vLineDistance = scale * lineDistance;
17 |
18 | vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );
19 | gl_Position = projectionMatrix * mvPosition;
20 |
21 | #include
22 | #include
23 | #include
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderLib/meshbasic_vert.glsl:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 | #include
10 | #include
11 |
12 | void main() {
13 |
14 | #include
15 | #include
16 | #include
17 | #include
18 |
19 | #ifdef USE_ENVMAP
20 |
21 | #include
22 | #include
23 | #include
24 | #include
25 |
26 | #endif
27 |
28 | #include
29 | #include
30 | #include
31 | #include
32 | #include
33 |
34 | #include
35 | #include
36 | #include
37 | #include
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderLib/normal_frag.glsl:
--------------------------------------------------------------------------------
1 | #define NORMAL
2 |
3 | uniform float opacity;
4 |
5 | #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )
6 |
7 | varying vec3 vViewPosition;
8 |
9 | #endif
10 |
11 | #ifndef FLAT_SHADED
12 |
13 | varying vec3 vNormal;
14 |
15 | #endif
16 |
17 | #include
18 | #include
19 | #include
20 | #include
21 | #include
22 |
23 | void main() {
24 |
25 | #include
26 | #include
27 |
28 | gl_FragColor = vec4( packNormalToRGB( normal ), opacity );
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderLib/points_frag.glsl:
--------------------------------------------------------------------------------
1 | uniform vec3 diffuse;
2 | uniform float opacity;
3 |
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 | #include
10 | #include
11 | #include
12 |
13 | void main() {
14 |
15 | #include
16 |
17 | vec3 outgoingLight = vec3( 0.0 );
18 | vec4 diffuseColor = vec4( diffuse, opacity );
19 |
20 | #include
21 | #include
22 | #include
23 | #include
24 |
25 | outgoingLight = diffuseColor.rgb;
26 |
27 | gl_FragColor = vec4( outgoingLight, diffuseColor.a );
28 |
29 | #include
30 | #include
31 | #include
32 | #include
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderLib/points_vert.glsl:
--------------------------------------------------------------------------------
1 | uniform float size;
2 | uniform float scale;
3 |
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 | #include
10 |
11 | void main() {
12 |
13 | #include
14 | #include
15 | #include
16 |
17 | #ifdef USE_SIZEATTENUATION
18 | gl_PointSize = size * ( scale / - mvPosition.z );
19 | #else
20 | gl_PointSize = size;
21 | #endif
22 |
23 | #include
24 | #include
25 | #include
26 | #include
27 | #include
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderLib/shadow_frag.glsl:
--------------------------------------------------------------------------------
1 | uniform vec3 color;
2 | uniform float opacity;
3 |
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 | #include
10 | #include
11 |
12 | void main() {
13 |
14 | gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );
15 |
16 | #include
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/shaders/ShaderLib/shadow_vert.glsl:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | void main() {
5 |
6 | #include
7 | #include
8 | #include
9 | #include
10 | #include
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/webgl/WebGLObjects.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author mrdoob / http://mrdoob.com/
3 | */
4 |
5 | function WebGLObjects( geometries, infoRender ) {
6 |
7 | var updateList = {};
8 |
9 | function update( object ) {
10 |
11 | var frame = infoRender.frame;
12 |
13 | var geometry = object.geometry;
14 | var buffergeometry = geometries.get( object, geometry );
15 |
16 | // Update once per frame
17 |
18 | if ( updateList[ buffergeometry.id ] !== frame ) {
19 |
20 | if ( geometry.isGeometry ) {
21 |
22 | buffergeometry.updateFromObject( object );
23 |
24 | }
25 |
26 | geometries.update( buffergeometry );
27 |
28 | updateList[ buffergeometry.id ] = frame;
29 |
30 | }
31 |
32 | return buffergeometry;
33 |
34 | }
35 |
36 | function clear() {
37 |
38 | updateList = {};
39 |
40 | }
41 |
42 | return {
43 |
44 | update: update,
45 | clear: clear
46 |
47 | };
48 |
49 | }
50 |
51 |
52 | export { WebGLObjects };
53 |
--------------------------------------------------------------------------------
/lib/three/src/renderers/webgl/WebGLProperties.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author fordacious / fordacious.github.io
3 | */
4 |
5 | function WebGLProperties() {
6 |
7 | var properties = {};
8 |
9 | function get( object ) {
10 |
11 | var uuid = object.uuid;
12 | var map = properties[ uuid ];
13 |
14 | if ( map === undefined ) {
15 |
16 | map = {};
17 | properties[ uuid ] = map;
18 |
19 | }
20 |
21 | return map;
22 |
23 | }
24 |
25 | function remove( object ) {
26 |
27 | delete properties[ object.uuid ];
28 |
29 | }
30 |
31 | function clear() {
32 |
33 | properties = {};
34 |
35 | }
36 |
37 | return {
38 | get: get,
39 | remove: remove,
40 | clear: clear
41 | };
42 |
43 | }
44 |
45 |
46 | export { WebGLProperties };
47 |
--------------------------------------------------------------------------------
/lib/three/src/scenes/Fog.js:
--------------------------------------------------------------------------------
1 | import { Color } from '../math/Color.js';
2 |
3 | /**
4 | * @author mrdoob / http://mrdoob.com/
5 | * @author alteredq / http://alteredqualia.com/
6 | */
7 |
8 | function Fog( color, near, far ) {
9 |
10 | this.name = '';
11 |
12 | this.color = new Color( color );
13 |
14 | this.near = ( near !== undefined ) ? near : 1;
15 | this.far = ( far !== undefined ) ? far : 1000;
16 |
17 | }
18 |
19 | Fog.prototype.isFog = true;
20 |
21 | Fog.prototype.clone = function () {
22 |
23 | return new Fog( this.color.getHex(), this.near, this.far );
24 |
25 | };
26 |
27 | Fog.prototype.toJSON = function ( /* meta */ ) {
28 |
29 | return {
30 | type: 'Fog',
31 | color: this.color.getHex(),
32 | near: this.near,
33 | far: this.far
34 | };
35 |
36 | };
37 |
38 | export { Fog };
39 |
--------------------------------------------------------------------------------
/lib/three/src/scenes/FogExp2.js:
--------------------------------------------------------------------------------
1 | import { Color } from '../math/Color.js';
2 |
3 | /**
4 | * @author mrdoob / http://mrdoob.com/
5 | * @author alteredq / http://alteredqualia.com/
6 | */
7 |
8 | function FogExp2( color, density ) {
9 |
10 | this.name = '';
11 |
12 | this.color = new Color( color );
13 | this.density = ( density !== undefined ) ? density : 0.00025;
14 |
15 | }
16 |
17 | FogExp2.prototype.isFogExp2 = true;
18 |
19 | FogExp2.prototype.clone = function () {
20 |
21 | return new FogExp2( this.color.getHex(), this.density );
22 |
23 | };
24 |
25 | FogExp2.prototype.toJSON = function ( /* meta */ ) {
26 |
27 | return {
28 | type: 'FogExp2',
29 | color: this.color.getHex(),
30 | density: this.density
31 | };
32 |
33 | };
34 |
35 | export { FogExp2 };
36 |
--------------------------------------------------------------------------------
/lib/three/src/textures/CanvasTexture.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author mrdoob / http://mrdoob.com/
3 | */
4 |
5 | import { Texture } from './Texture.js';
6 |
7 | function CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {
8 |
9 | Texture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
10 |
11 | this.needsUpdate = true;
12 |
13 | }
14 |
15 | CanvasTexture.prototype = Object.create( Texture.prototype );
16 | CanvasTexture.prototype.constructor = CanvasTexture;
17 |
18 |
19 | export { CanvasTexture };
20 |
--------------------------------------------------------------------------------
/lib/three/src/textures/CompressedTexture.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author alteredq / http://alteredqualia.com/
3 | */
4 |
5 | import { Texture } from './Texture.js';
6 |
7 | function CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {
8 |
9 | Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );
10 |
11 | this.image = { width: width, height: height };
12 | this.mipmaps = mipmaps;
13 |
14 | // no flipping for cube textures
15 | // (also flipping doesn't work for compressed textures )
16 |
17 | this.flipY = false;
18 |
19 | // can't generate mipmaps for compressed textures
20 | // mips must be embedded in DDS files
21 |
22 | this.generateMipmaps = false;
23 |
24 | }
25 |
26 | CompressedTexture.prototype = Object.create( Texture.prototype );
27 | CompressedTexture.prototype.constructor = CompressedTexture;
28 |
29 | CompressedTexture.prototype.isCompressedTexture = true;
30 |
31 |
32 | export { CompressedTexture };
33 |
--------------------------------------------------------------------------------
/lib/three/src/textures/CubeTexture.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author mrdoob / http://mrdoob.com/
3 | */
4 |
5 | import { Texture } from './Texture.js';
6 | import { CubeReflectionMapping } from '../constants.js';
7 |
8 | function CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {
9 |
10 | images = images !== undefined ? images : [];
11 | mapping = mapping !== undefined ? mapping : CubeReflectionMapping;
12 |
13 | Texture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );
14 |
15 | this.flipY = false;
16 |
17 | }
18 |
19 | CubeTexture.prototype = Object.create( Texture.prototype );
20 | CubeTexture.prototype.constructor = CubeTexture;
21 |
22 | CubeTexture.prototype.isCubeTexture = true;
23 |
24 | Object.defineProperty( CubeTexture.prototype, 'images', {
25 |
26 | get: function () {
27 |
28 | return this.image;
29 |
30 | },
31 |
32 | set: function ( value ) {
33 |
34 | this.image = value;
35 |
36 | }
37 |
38 | } );
39 |
40 |
41 | export { CubeTexture };
42 |
--------------------------------------------------------------------------------
/lib/three/src/textures/DataTexture.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author alteredq / http://alteredqualia.com/
3 | */
4 |
5 | import { Texture } from './Texture.js';
6 | import { NearestFilter } from '../constants.js';
7 |
8 | function DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {
9 |
10 | Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );
11 |
12 | this.image = { data: data, width: width, height: height };
13 |
14 | this.magFilter = magFilter !== undefined ? magFilter : NearestFilter;
15 | this.minFilter = minFilter !== undefined ? minFilter : NearestFilter;
16 |
17 | this.generateMipmaps = false;
18 | this.flipY = false;
19 | this.unpackAlignment = 1;
20 |
21 | }
22 |
23 | DataTexture.prototype = Object.create( Texture.prototype );
24 | DataTexture.prototype.constructor = DataTexture;
25 |
26 | DataTexture.prototype.isDataTexture = true;
27 |
28 |
29 | export { DataTexture };
30 |
--------------------------------------------------------------------------------
/lib/three/src/utils.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author mrdoob / http://mrdoob.com/
3 | */
4 |
5 | function arrayMin( array ) {
6 |
7 | if ( array.length === 0 ) return Infinity;
8 |
9 | var min = array[ 0 ];
10 |
11 | for ( var i = 1, l = array.length; i < l; ++ i ) {
12 |
13 | if ( array[ i ] < min ) min = array[ i ];
14 |
15 | }
16 |
17 | return min;
18 |
19 | }
20 |
21 | function arrayMax( array ) {
22 |
23 | if ( array.length === 0 ) return - Infinity;
24 |
25 | var max = array[ 0 ];
26 |
27 | for ( var i = 1, l = array.length; i < l; ++ i ) {
28 |
29 | if ( array[ i ] > max ) max = array[ i ];
30 |
31 | }
32 |
33 | return max;
34 |
35 | }
36 |
37 | export { arrayMin, arrayMax };
38 |
--------------------------------------------------------------------------------
/lib/tofu.js/src/extras/panorama/AnchorBase.js:
--------------------------------------------------------------------------------
1 | import { Group, Matrix4 } from 'three';
2 |
3 | /**
4 | * anchor class, help your to bind interaction event
5 | */
6 | class AnchorBase extends Group {
7 | /**
8 | * help you caculate anchor position, relative which parent
9 | *
10 | * @param {Vector3} point global position relative camera
11 | * @param {Object3D} parent relative which parent
12 | * @return {Vector3} position relative parent coordinate system
13 | */
14 | putWhere(point, parent) {
15 | point.multiplyScalar(0.9);
16 | point.applyMatrix4(new Matrix4().getInverse(parent.matrixWorld));
17 | this.position.set(point.x, point.y, point.z);
18 | this.lookAt(0, 0, 0);
19 | return point;
20 | }
21 |
22 | /**
23 | * put anchor to which posotion, position was relative it's parent
24 | *
25 | * @param {Vector3} position position was relative it's parent
26 | */
27 | putHere(position) {
28 | this.position.set(position.x, position.y, position.z);
29 | this.lookAt(0, 0, 0);
30 | }
31 | }
32 |
33 | export default AnchorBase;
34 |
--------------------------------------------------------------------------------
/lib/tofu.js/src/postprocessing/ClearMaskPass.js:
--------------------------------------------------------------------------------
1 | import Pass from './Pass';
2 |
3 | export default class ClearMaskPass extends Pass {
4 | constructor() {
5 | super();
6 | this.needsSwap = false;
7 | }
8 |
9 | render(renderer) {
10 | renderer.state.buffers.stencil.setTest(false);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/lib/tofu.js/src/postprocessing/Pass.js:
--------------------------------------------------------------------------------
1 | /* eslint no-unused-vars: 0 */
2 |
3 | export default class Pass {
4 | constructor() {
5 | // if set to true, the pass is processed by the composer
6 | this.enabled = true;
7 |
8 | // if set to true, the pass indicates to swap read and write buffer after rendering
9 | this.needsSwap = true;
10 |
11 | // if set to true, the pass clears its buffer before rendering
12 | this.clear = false;
13 |
14 | // if set to true, the result of the pass is rendered to screen
15 | this.renderToScreen = false;
16 | }
17 |
18 | setSize(width, height) {}
19 |
20 | render(renderer, writeBuffer, readBuffer, delta) {
21 | console.error('Pass: .render() must be implemented in derived pass.');
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/lib/tofu.js/src/shader/CopyShader.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author alteredq / http://alteredqualia.com/
3 | *
4 | * Full-screen textured quad shader
5 | * @private
6 | */
7 |
8 | const CopyShader = {
9 |
10 | uniforms: {
11 |
12 | tDiffuse: { value: null },
13 | opacity: { value: 1.0 },
14 |
15 | },
16 |
17 | vertexShader: `
18 | varying vec2 vUv;
19 | void main() {
20 | vUv = uv;
21 | gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
22 | }`,
23 |
24 | fragmentShader: `
25 | uniform float opacity;
26 | uniform sampler2D tDiffuse;
27 | varying vec2 vUv;
28 | void main() {
29 | vec4 texel = texture2D( tDiffuse, vUv );
30 | gl_FragColor = opacity * texel;
31 | }`,
32 |
33 | };
34 |
35 | export default CopyShader;
36 |
--------------------------------------------------------------------------------
/lib/tofu.js/src/utils/Smooth.js:
--------------------------------------------------------------------------------
1 | import { Vector3 } from 'three';
2 |
3 | export default class Smooth {
4 | constructor(object, options) {
5 | options = options || {};
6 | this.object = object;
7 | this.to = new Vector3().copy(object);
8 | this.now = this.to.clone();
9 | this.speed = options.speed || 0.02;
10 | this.noise = options.noise || 0.000001;
11 | }
12 | goto(x, y, z) {
13 | this.to.set(x, y, z);
14 | }
15 | update() {
16 | const space = this.to.clone().sub(this.now).multiplyScalar(this.speed);
17 | if (space.length() < this.noise) return;
18 | this.now.add(space);
19 | this.object.x = this.now.x;
20 | this.object.y = this.now.y;
21 | this.object.z = this.now.z;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/lib/tofu.shaderprimer/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4 |
5 |
6 | ## 0.0.1 (2018-08-27)
7 |
8 |
9 | ### Features
10 |
11 | * **init:** init project and build up some script ([ab1d1aa](https://github.com/jasonChen1982/tofu.shaderprimer/commit/ab1d1aa))
12 |
--------------------------------------------------------------------------------
/lib/tofu.shaderprimer/README.md:
--------------------------------------------------------------------------------
1 | tofu.shaderprimer — shader primer class
2 | =============
3 |
4 | ## Introduction
5 |
6 | use this library you can render a pixel-shader easy
7 |
8 | ## Examples
9 |
10 | you can visit here [shader-studio]()
11 |
12 | or clone this repository and install dependencies.
13 |
14 | ```sh
15 | npm i
16 | ```
17 |
18 | after it all, run http-server and go to `./demos` path.
19 |
20 | ```sh
21 | npm run http
22 | ```
23 |
--------------------------------------------------------------------------------
/lib/tofu.shaderprimer/src/index.js:
--------------------------------------------------------------------------------
1 | import {
2 | PlaneBufferGeometry,
3 | UniformsUtils,
4 | ShaderMaterial,
5 | } from 'three';
6 | import { Primer } from 'tofu.js';
7 |
8 | class ShaderPrimer extends Primer {
9 | constructor(shader) {
10 |
11 | /**
12 | * geometry for this 2D context
13 | * @member {PlaneBufferGeometry}
14 | * @private
15 | */
16 | const geo = new PlaneBufferGeometry(2, 2);
17 |
18 | const uniforms = UniformsUtils.clone(shader.uniforms);
19 |
20 | /**
21 | * material for this 2D context
22 | * @member {MeshBasicMaterial}
23 | * @private
24 | */
25 | const mat = new ShaderMaterial({
26 | uniforms,
27 | vertexShader: shader.vertexShader,
28 | fragmentShader: shader.fragmentShader,
29 | });
30 |
31 | super(geo, mat, {});
32 |
33 | this.uniforms = uniforms;
34 | }
35 | }
36 |
37 | export { ShaderPrimer };
38 |
--------------------------------------------------------------------------------