threepipe
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

getting-started.md 9.8KB

1 vuosi sitten
1 vuosi sitten
1 vuosi sitten
1 vuosi sitten
1 vuosi sitten
1 vuosi sitten
1 vuosi sitten
11 kuukautta sitten
1 vuosi sitten
1 vuosi sitten
11 kuukautta sitten
1 vuosi sitten
1 vuosi sitten
1 vuosi sitten
1 vuosi sitten
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. ---
  2. prev:
  3. text: 'What is Threepipe?'
  4. link: './introduction'
  5. next:
  6. text: 'Editors in Threepipe'
  7. link: './editors'
  8. ---
  9. # Getting Started
  10. Getting started with Threepipe is easy. You can use it in your HTML/JS, React, Vue.js, Svelte, or any other web framework. The best way to use it is as an ES module in your project. Simply install the package `threepipe` from npm, or include it in html from any CDN like [unpkg](https://unpkg.com/threepipe) or [jsdelivr](https://cdn.jsdelivr.net/npm/threepipe@latest).
  11. [![NPM Package](https://img.shields.io/npm/v/threepipe.svg)](https://www.npmjs.com/package/threepipe)
  12. ## What you need
  13. - A 3D Model (GLTF, GLB, OBJ, FBX, etc). Optionally, the model, scene, and plugins can be configured, compressed and exported using the [Threepipe Editor](https://editor.threepipe.org) or [Tweakpane Editor](https://threepipe.org/examples/tweakpane-editor/). Here is a sample model with configured settings - [classic-watch.glb](https://asset-samples.threepipe.org/demos/classic-watch.glb)
  14. - A modern browser that supports [WebGL2](https://caniuse.com/webgl2) and [WebAssembly](https://caniuse.com/webassembly) (for some plugins).
  15. - Node.js (optional, only for local development). Node 18+ is recommended.
  16. - An existing project or willingness to start a new one
  17. - Basic knowledge of JavaScript/TypeScript
  18. ## Quickstart
  19. ### Codepen
  20. You can quickly prototype in JavaScript on Codepen. Here is a starter pen with the basic setup: [Threepipe Starter Codepen](https://codepen.io/repalash/pen/GRbEONZ?editors=0010) (with JS scripts), or [with import maps](https://codepen.io/repalash/pen/poXpKEQ?editors=0010)
  21. Simply fork the pen and start coding.
  22. Each example on [Threepipe Examples](https://threepipe.org/examples) also has a Codepen Button <input type="image" src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/t-1/cp-arrow-right.svg" width="35" height="35" style="margin-bottom: -0.6rem; cursor: unset;"> to open the example directly in Codepen.
  23. ### Local Setup
  24. To get started with a new project using Threepipe locally, you need to have Node.js installed on your machine.
  25. A new project can be quickly created using the `npm create` command. Open your terminal and run the following command:
  26. ```bash
  27. npm create threepipe@latest
  28. ```
  29. and follow the prompts to pick a project name, select a template/framework and pick between JavaScript or TypeScript. Supported templates -
  30. - `vanilla`
  31. - `vanilla-ts`
  32. This will create a ready-to-use project with all the necessary dependencies and configurations.
  33. Now, code from any of the examples on the [Threepipe Examples](https://threepipe.org/examples) page can be copied and pasted into the project to get started.
  34. ## Install in existing projects
  35. ### HTML/JS
  36. ```html
  37. <canvas id="three-canvas" style="width: 800px; height: 600px;"></canvas>
  38. <script src="https://unpkg.com/threepipe"></script>
  39. <script type="module">
  40. const {ThreeViewer, DepthBufferPlugin} = threepipe
  41. // import {ThreeViewer, DepthBufferPlugin} from 'threepipe' // using npm or importmaps
  42. window.THREE = threepipe // optional (if using THREE.Xyz style code)
  43. const viewer = new ThreeViewer({canvas: document.getElementById('three-canvas')})
  44. // Add some plugins
  45. viewer.addPluginSync(new DepthBufferPlugin())
  46. // Load an environment map
  47. const envPromise = viewer.setEnvironmentMap('https://threejs.org/examples/textures/equirectangular/venice_sunset_1k.hdr')
  48. const modelPromise = viewer.load('https://threejs.org/examples/models/gltf/DamagedHelmet/glTF/DamagedHelmet.gltf', {
  49. autoCenter: true,
  50. autoScale: true,
  51. })
  52. Promise.all([envPromise, modelPromise]).then(([env, model]) => {
  53. console.log('Loaded', model, env, viewer)
  54. })
  55. </script>
  56. ```
  57. Check it in action: [html-js-sample](https://threepipe.org/examples/#html-js-sample/)
  58. Check out the details about [ThreeViewer API](../guide/viewer-api) and more [plugins](../guide/core-plugins.md).
  59. ::: details Import Maps
  60. Import maps are an upcoming feature in browsers that allows you to import modules using a simple JSON format. This is useful for loading modules without needing a bundler or package manager.
  61. Threepipe can be used with import maps to load modules directly from a CDN like unpkg or jsdelivr.
  62. ```html
  63. <script async src="https://unpkg.com/es-module-shims@1.6.3/dist/es-module-shims.js"></script>
  64. <script type="importmap">{
  65. "imports": {
  66. "threepipe": "https://unpkg.com/threepipe/dist/index.mjs",
  67. "@threepipe/plugin-tweakpane": "https://unpkg.com/@threepipe/plugin-tweakpane/dist/index.mjs"
  68. "three": "https://unpkg.com/threepipe/dist/index.mjs",
  69. }
  70. }</script>
  71. <script type="module">
  72. import {ThreeViewer} from 'threepipe'
  73. // your code
  74. </script>
  75. ```
  76. In the above code, we are adding `es-module-shims` script to support import maps in browsers that do not support it natively. Then, we define an import map with the `threepipe` module pointing to the latest version on `unpkg`. Finally, we can import `ThreeViewer` from `threepipe` and use it in our code.
  77. A reference to "three" is also added to be same as threepipe, this way any libraries/addons that import from three will now import from threepipe instead.
  78. :::
  79. ### NPM
  80. #### Installation
  81. ```bash
  82. npm install threepipe
  83. ```
  84. #### Loading a 3D Model
  85. First, create a canvas element in your HTML page:
  86. ```html
  87. <canvas id="three-canvas" style="width: 800px; height: 600px;"></canvas>
  88. ```
  89. Then, import the viewer and create a new instance:
  90. ```typescript
  91. import {ThreeViewer, IObject3D} from 'threepipe'
  92. // Create a viewer
  93. const viewer = new ThreeViewer({canvas: document.getElementById('three-canvas') as HTMLCanvasElement})
  94. // Load an environment map
  95. await viewer.setEnvironmentMap('https://threejs.org/examples/textures/equirectangular/venice_sunset_1k.hdr')
  96. // Load a model
  97. const result = await viewer.load<IObject3D>('https://threejs.org/examples/models/gltf/DamagedHelmet/glTF/DamagedHelmet.gltf', {
  98. autoCenter: true,
  99. autoScale: true,
  100. })
  101. ```
  102. That's it! You should now see a 3D model on your page.
  103. The 3D model can be opened in the [editor](https://threepipe.org/examples/tweakpane-editor/) to view and edit the scene settings, objects, materials, lights, cameras, post-processing, etc. and exported as a GLB file. All settings are automatically serialized and saved in the GLB file, which can be loaded into the viewer. Any plugins used in the editor can be added to the viewer to add the same functionality. The plugin data is automatically loaded(if the plugin is added) when the model is added to the scene.
  104. The viewer initializes with a Scene, Camera, Camera controls(Orbit Controls), several importers, exporters and a default rendering pipeline. Additional functionality can be added with plugins.
  105. Check out the GLTF Load example to see it in action or to check the JS equivalent code: [Example: gltf-load](https://threepipe.org/examples/#gltf-load/)
  106. Check out the [Plugins](https://threepipe.org/guide/features.html#plugin-system) section to learn how to add additional functionality to the viewer.
  107. ### React
  108. A sample [react](https://react.dev) component in tsx to render a model with an environment map.
  109. ```tsx
  110. import React from 'react'
  111. function ThreeViewerComponent({src, env}: {src: string, env: string}) {
  112. const canvasRef = React.useRef(null)
  113. React.useEffect(() => {
  114. const viewer = new ThreeViewer({canvas: canvasRef.current})
  115. const envPromise = viewer.setEnvironmentMap(env)
  116. const modelPromise = viewer.load(src)
  117. Promise.all([envPromise, modelPromise]).then(([env, model]) => {
  118. console.log('Loaded', model, env, viewer)
  119. })
  120. return () => {
  121. viewer.dispose()
  122. }
  123. }, [])
  124. return (
  125. <canvas id="three-canvas" style={{width: 800, height: 600}} ref={canvasRef} />
  126. )
  127. }
  128. ```
  129. Check it in action: [react-tsx-sample](https://threepipe.org/examples/#react-tsx-sample/)
  130. Other examples in js: [react-js-sample](https://threepipe.org/examples/#react-js-sample/) and jsx: [react-jsx-sample](https://threepipe.org/examples/#react-jsx-sample/)
  131. ### Vue.js
  132. A sample [vue.js](https://vuejs.org/) component in js to render a model with an environment map.
  133. ```js
  134. const ThreeViewerComponent = {
  135. setup() {
  136. const canvasRef = ref(null);
  137. onMounted(() => {
  138. const viewer = new ThreeViewer({ canvas: canvasRef.value });
  139. const envPromise = viewer.setEnvironmentMap('https://threejs.org/examples/textures/equirectangular/venice_sunset_1k.hdr');
  140. const modelPromise = viewer.load('https://threejs.org/examples/models/gltf/DamagedHelmet/glTF/DamagedHelmet.gltf');
  141. Promise.all([envPromise, modelPromise]).then(([env, model]) => {
  142. console.log('Loaded', model, env, viewer)
  143. })
  144. onBeforeUnmount(() => {
  145. viewer.dispose();
  146. });
  147. });
  148. return { canvasRef };
  149. },
  150. };
  151. ```
  152. Check it in action: [vue-html-sample](https://threepipe.org/examples/#vue-html-sample/)
  153. Another example with Vue SFC(Single file component): [Example: vue-sfc-sample](https://threepipe.org/examples/#vue-sfc-sample/)
  154. ### Svelte 4
  155. A sample [svelte](https://svelte.dev/) 4 component in js to render a model with an environment map.
  156. ```html
  157. <script>
  158. import {onDestroy, onMount} from 'svelte';
  159. import {ThreeViewer} from 'threepipe';
  160. let canvasRef;
  161. let viewer;
  162. onMount(() => {
  163. viewer = new ThreeViewer({canvas: canvasRef});
  164. const envPromise = viewer.setEnvironmentMap('https://threejs.org/examples/textures/equirectangular/venice_sunset_1k.hdr');
  165. const modelPromise = viewer.load('https://threejs.org/examples/models/gltf/DamagedHelmet/glTF/DamagedHelmet.gltf');
  166. Promise.all([envPromise, modelPromise]).then(([env, model]) => {
  167. console.log('Loaded', model, env, viewer)
  168. })
  169. });
  170. onDestroy(() => viewer.dispose())
  171. </script>
  172. <canvas bind:this={canvasRef} id="three-canvas" style="width: 800px; height: 600px"></canvas>
  173. ```
  174. Check it in action: [svelte-sample](https://threepipe.org/examples/#svelte-sample/)