webgl_geometry_extrude_uvs.html 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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. var light = new THREE.DirectionalLight( 0xffffff );
  25. light.position.set( 0, 1, 2 ).normalize();
  26. scene.add( light );
  27. renderer = new THREE.WebGLRenderer( { antialias: true } );
  28. renderer.setSize( window.innerWidth, window.innerHeight );
  29. document.body.appendChild( renderer.domElement );
  30. setupModel();
  31. };
  32. function createMesh( g, texture ) {
  33. var m = new THREE.Mesh( g, new THREE.MeshFaceMaterial()) ;
  34. g.materials =
  35. [
  36. new THREE.MeshBasicMaterial( { map: texture } ),
  37. new THREE.MeshBasicMaterial( { color: 0xcc4488 } )
  38. ];
  39. return m;
  40. }
  41. function setupModel() {
  42. var img = new Image();
  43. img.onload = function() { texture.needsUpdate = true; }
  44. img.src = TEXDATA;
  45. var texture = new THREE.Texture( img );
  46. var s = new THREE.Shape();
  47. s.moveTo( 0,0 );
  48. s.lineTo( -4, -4 );
  49. s.lineTo( 4, -4 );
  50. s.lineTo( 5, 0 );
  51. s.lineTo( 4, 4 );
  52. s.lineTo( -4, 4 );
  53. var ho = new THREE.Shape();
  54. ho.moveTo( 1+ 0,0 );
  55. ho.lineTo( 1+ -2, -2 );
  56. ho.lineTo( 0.5+ 2, -2 );
  57. ho.lineTo( 1+ 2.5, 0 );
  58. ho.lineTo( 0.5+ 2, 2 );
  59. ho.lineTo( 1+ -2, 2 );
  60. s.holes.push(ho);
  61. var s2 = new THREE.Shape();
  62. s2.moveTo( 8+ 0,0 );
  63. s2.lineTo( 8+ -2, -2 );
  64. s2.lineTo( 8+ 2, -2 );
  65. s2.lineTo( 8+ 2.5, 0 );
  66. s2.lineTo( 8+ 2, 2 );
  67. s2.lineTo( 8+ -2, 2 );
  68. var exoption = {
  69. bevelEnabled: false,
  70. bevelSize: 1,
  71. amount: 6,
  72. extrudeMaterial: 0,
  73. material: 1
  74. };
  75. var geom = s.extrude( exoption );
  76. mesh = createMesh( geom, texture );
  77. mesh.position.set( -7, 0, -45 );
  78. mesh.doubleSided = true;
  79. scene.add( mesh );
  80. var geom2 = new THREE.ExtrudeGeometry( [s,s2], exoption );
  81. mesh2 = createMesh( geom2, texture );
  82. mesh2.position.set( 7, 0, -45 );
  83. mesh2.doubleSided = true;
  84. scene.add( mesh2 );
  85. }
  86. function animate() {
  87. requestAnimationFrame( animate );
  88. render();
  89. }
  90. function render() {
  91. angle = Date.now() * 0.001;
  92. mesh.rotation.set( -3.2, angle, 0 );
  93. mesh2.rotation.set( -3.2, angle, 0 );
  94. renderer.render( scene, camera );
  95. }
  96. </script>
  97. </body>
  98. </html>