index.html 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <html>
  2. <head>
  3. <meta charset="UTF-8" />
  4. <title>spine-threejs</title>
  5. <script src="https://unpkg.com/[email protected]/build/three.js"></script>
  6. <script src="../dist/iife/spine-threejs.js"></script>
  7. <script src="./OrbitalControls.js"></script>
  8. </head>
  9. <style>
  10. * {
  11. margin: 0;
  12. padding: 0;
  13. }
  14. body,
  15. html {
  16. height: 100%;
  17. }
  18. canvas {
  19. position: absolute;
  20. width: 100%;
  21. height: 100%;
  22. }
  23. </style>
  24. <body>
  25. <script>
  26. (function () {
  27. let scene, camera, renderer;
  28. let geometry, material, mesh, skeletonMesh;
  29. let assetManager;
  30. let canvas;
  31. let controls;
  32. let lastFrameTime = Date.now() / 1000;
  33. let baseUrl = "assets/";
  34. let skeletonFile = "raptor-pro.json";
  35. let atlasFile = skeletonFile
  36. .replace("-pro", "")
  37. .replace("-ess", "")
  38. .replace(".json", ".atlas");
  39. let animation = "walk";
  40. function init() {
  41. // create the THREE.JS camera, scene and renderer (WebGL)
  42. let width = window.innerWidth,
  43. height = window.innerHeight;
  44. camera = new THREE.PerspectiveCamera(75, width / height, 1, 3000);
  45. camera.position.y = 100;
  46. camera.position.z = 400;
  47. scene = new THREE.Scene();
  48. renderer = new THREE.WebGLRenderer();
  49. renderer.setSize(width, height);
  50. document.body.appendChild(renderer.domElement);
  51. canvas = renderer.domElement;
  52. controls = new OrbitControls(camera, renderer.domElement);
  53. // load the assets required to display the Raptor model
  54. assetManager = new spine.AssetManager(baseUrl);
  55. assetManager.loadText(skeletonFile);
  56. assetManager.loadTextureAtlas(atlasFile);
  57. requestAnimationFrame(load);
  58. }
  59. function load(name, scale) {
  60. if (assetManager.isLoadingComplete()) {
  61. // Add a box to the scene to which we attach the skeleton mesh
  62. geometry = new THREE.BoxGeometry(200, 200, 200);
  63. material = new THREE.MeshBasicMaterial({
  64. color: 0xff0000,
  65. wireframe: true,
  66. });
  67. mesh = new THREE.Mesh(geometry, material);
  68. scene.add(mesh);
  69. // Load the texture atlas using name.atlas and name.png from the AssetManager.
  70. // The function passed to TextureAtlas is used to resolve relative paths.
  71. atlas = assetManager.require(atlasFile);
  72. // Create a AtlasAttachmentLoader that resolves region, mesh, boundingbox and path attachments
  73. atlasLoader = new spine.AtlasAttachmentLoader(atlas);
  74. // Create a SkeletonJson instance for parsing the .json file.
  75. let skeletonJson = new spine.SkeletonJson(atlasLoader);
  76. // Set the scale to apply during parsing, parse the file, and create a new skeleton.
  77. skeletonJson.scale = 0.4;
  78. let skeletonData = skeletonJson.readSkeletonData(
  79. assetManager.require(skeletonFile)
  80. );
  81. // Create a SkeletonMesh from the data and attach it to the scene
  82. skeletonMesh = new spine.SkeletonMesh(
  83. skeletonData,
  84. (parameters) => {
  85. parameters.depthTest = true;
  86. parameters.depthWrite = true;
  87. parameters.alphaTest = 0.001;
  88. }
  89. );
  90. skeletonMesh.state.setAnimation(0, animation, true);
  91. mesh.add(skeletonMesh);
  92. requestAnimationFrame(render);
  93. } else requestAnimationFrame(load);
  94. }
  95. let lastTime = Date.now();
  96. function render() {
  97. // calculate delta time for animation purposes
  98. let now = Date.now() / 1000;
  99. let delta = now - lastFrameTime;
  100. lastFrameTime = now;
  101. // resize canvas to use full page, adjust camera/renderer
  102. resize();
  103. // Update orbital controls
  104. controls.update();
  105. // update the animation
  106. skeletonMesh.update(delta);
  107. // render the scene
  108. renderer.render(scene, camera);
  109. requestAnimationFrame(render);
  110. }
  111. function resize() {
  112. let w = window.innerWidth;
  113. let h = window.innerHeight;
  114. if (canvas.width != w || canvas.height != h) {
  115. canvas.width = w;
  116. canvas.height = h;
  117. }
  118. camera.aspect = w / h;
  119. camera.updateProjectionMatrix();
  120. renderer.setSize(w, h);
  121. }
  122. init();
  123. })();
  124. </script>
  125. </body>
  126. </html>