webgl_geometry_extrude_uvs.html 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>three.js webgl - geometry extrude</title>
  6. </head>
  7. <body>
  8. <script src="../build/Three.js"></script>
  9. <script>
  10. var TEXDATA = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAMFB'+
  11. 'MVEWcEFqcGGOlIWOlIWulKWutOXOtOXutQnu1SoS6Uo69Y5zMfrHWnMbepc7erdbntd6d+uwA'+
  12. 'AAAAo0lEQVR42mNgoAL4jwaIEQDp405gYOBKYLjvwIAssIBhLwM7ssABhtUMXECB3Q0M3nsTG'+
  13. 'Lr3fmTwYuABGbqAIf9/AsP6/z8YWBjskQV+A/X2IwTccv4CBfYjBBi4/6MLoKnIWotmxvr/v4'+
  14. 'C2+CMLfGPwYOBHFvjAUAUyGW5t5gao02G2sME8BxcoYDgvwAgS2LVqPxCvWr1rFZAiKggJClA'+
  15. 'BAAC+WuzCiXr+gwAAAABJRU5ErkJggg==';
  16. var renderer, camera, scene, mesh, mesh2;
  17. var angle = 0;
  18. init();
  19. animate();
  20. function init() {
  21. scene = new THREE.Scene();
  22. camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 1000 );
  23. scene.add( camera );
  24. renderer = new THREE.WebGLRenderer( { antialias: true } );
  25. renderer.setSize( window.innerWidth, window.innerHeight );
  26. document.body.appendChild( renderer.domElement );
  27. setupModel();
  28. };
  29. function createMesh( g, texture ) {
  30. var m = new THREE.Mesh( g, new THREE.MeshFaceMaterial()) ;
  31. g.materials =
  32. [
  33. new THREE.MeshBasicMaterial( { map: texture } ),
  34. new THREE.MeshBasicMaterial( { color: 0xcc4488 } )
  35. ];
  36. return m;
  37. }
  38. function setupModel() {
  39. var img = new Image();
  40. img.onload = function() { texture.needsUpdate = true; }
  41. img.src = TEXDATA;
  42. var texture = new THREE.Texture( img );
  43. texture.minFilter = THREE.LinearFilter;
  44. var s = new THREE.Shape();
  45. s.moveTo( 0,0 );
  46. s.lineTo( -4, -4 );
  47. s.lineTo( 4, -4 );
  48. s.lineTo( 5, 0 );
  49. s.lineTo( 4, 4 );
  50. s.lineTo( -4, 4 );
  51. var ho = new THREE.Shape();
  52. ho.moveTo( 1+ 0,0 );
  53. ho.lineTo( 1+ -2, -2 );
  54. ho.lineTo( 0.5+ 2, -2 );
  55. ho.lineTo( 1+ 2.5, 0 );
  56. ho.lineTo( 0.5+ 2, 2 );
  57. ho.lineTo( 1+ -2, 2 );
  58. s.holes.push(ho);
  59. var s2 = new THREE.Shape();
  60. s2.moveTo( 8+ 0,0 );
  61. s2.lineTo( 8+ -2, -2 );
  62. s2.lineTo( 8+ 2, -2 );
  63. s2.lineTo( 8+ 2.5, 0 );
  64. s2.lineTo( 8+ 2, 2 );
  65. s2.lineTo( 8+ -2, 2 );
  66. var exoption = {
  67. bevelEnabled: false,
  68. bevelSize: 1,
  69. amount: 6,
  70. extrudeMaterial: 0,
  71. material: 1
  72. };
  73. var geom = s.extrude( exoption );
  74. mesh = createMesh( geom, texture );
  75. mesh.position.set( -7, 0, -45 );
  76. scene.add( mesh );
  77. var geom2 = new THREE.ExtrudeGeometry( [s,s2], exoption );
  78. mesh2 = createMesh( geom2, texture );
  79. mesh2.position.set( 7, 0, -45 );
  80. scene.add( mesh2 );
  81. }
  82. function animate() {
  83. requestAnimationFrame( animate );
  84. render();
  85. }
  86. function render() {
  87. angle = Date.now() * 0.001;
  88. mesh.rotation.set( -3.2, angle, 0 );
  89. mesh2.rotation.set( -3.2, angle, 0 );
  90. renderer.render( scene, camera );
  91. }
  92. </script>
  93. </body>
  94. </html>