2011-11-28 59 views
3

我正在嘗試創建圓柱體,但沒有成功。 這是我的代碼:three.js - 無法創建圓柱體

geometry02 = new THREE.CylinderGeometry(20, 100, 100, 1000); 
material02 = new THREE.MeshBasicMaterial({color: 0x0000ff}); 
cylinder02 = new THREE.Mesh(geometry02, material02); 
cylinder02.position.x = 300; 
scene.addObject(cylinder02); 

我忘記了,包括什麼?

+5

當您嘗試這會發生什麼?你是否收到某種錯誤信息? – Tobbe

回答

5

您剛剛發佈的代碼段沒有任何問題。如果我粘貼示例,我可以確認它運行正常。

確保:

  1. 目前沒有任何JavaScript錯誤(檢查瀏覽器的控制檯)
  2. 相機正朝着正確的方向指向
  3. 你的模型的位置/刻度有不俗的值/位於相機的可視區域內

作爲一個附註,您可能希望將segmentsRadius參數(1000)減小到較小的值。您可能會獲得類似的外觀/層次細節,但頂點/面較少。

+0

你又對了! :-) – BorisD

0

請嘗試以下代碼

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <title>3d cylinder</title> 
     <meta charset="utf-8"> 
     <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> 
     <style> 
      body { 
       font-family: Monospace; 
       background-color: #f0f0f0; 
       margin: 0px; 
       overflow: hidden; 
      } 
     </style> 
    </head> 
    <body> 

     <script src="three.min.js" type="text/javascript"></script> 
     <script src="Stats.js" type="text/javascript"></script> 
     <script src="Detector.js" type="text/javascript"></script> 

     <script> 
      if (! Detector.webgl) Detector.addGetWebGLMessage(); 

      var container, stats; 

      var camera, scene, renderer, light; 

      var cylinder, line, geometry; 

      var targetRotation = 0; 
      var targetRotationOnMouseDown = 0; 

      var mouseX = 0; 
      var mouseXOnMouseDown = 0; 

      var windowHalfX = window.innerWidth/2; 
      var windowHalfY = window.innerHeight/2; 

      init();      
      animate(); 

      function init() { 

       container = document.createElement('div'); 
       document.body.appendChild(container); 

       var info = document.createElement('div'); 
       info.style.position = 'absolute'; 
       info.style.top = '10px'; 
       info.style.width = '100%'; 
       info.style.textAlign = 'center'; 
       //info.innerHTML = 'Drag to spin the cylinder'; 
       container.appendChild(info); 

       // camera 

       camera = new THREE.PerspectiveCamera(60, window.innerWidth/window.innerHeight, 1, 20000); 
      camera.position.y = 100; 
      camera.position.z = 800; 

       // scene 

       scene = new THREE.Scene(); 

       // light 

       scene.add(new THREE.AmbientLight(0x404040)); 

       light = new THREE.DirectionalLight(0xffffff); 
       light.position.set(0, 1, 0); 
       scene.add(light); 

       // texture 

       var map = THREE.ImageUtils.loadTexture('ash_uvgrid01.jpg'); 
       map.wrapS = map.wrapT = THREE.RepeatWrapping; 
       map.anisotropy = 16; 

       materials = [ 
        new THREE.MeshLambertMaterial({ ambient: 0xbbbbbb, map: map, side: THREE.DoubleSide }), 
        new THREE.MeshBasicMaterial({ color: 0xffffff, wireframe: true, transparent: true, opacity: 0.1, side:          THREE.DoubleSide }) 
       ]; 

       // Grid 

       geometry = new THREE.Geometry(); 
       geometry.vertices.push(new THREE.Vector3(- 500, 0, 0)); 
       geometry.vertices.push(new THREE.Vector3(500, 0, 0)); 

       for (var i = 0; i <= 20; i ++) { 

        line = new THREE.Line(geometry, new THREE.LineBasicMaterial({ color: 0x000000, opacity: 0.2 })); 
        line.position.z = (i * 50) - 500; 
        scene.add(line); 

        line = new THREE.Line(geometry, new THREE.LineBasicMaterial({ color: 0x000000, opacity: 0.2 })); 
        line.position.x = (i * 50) - 500; 
        line.rotation.y = 90 * Math.PI/180; 
        scene.add(line); 

       } 

       // cylinder 

       cylinder = THREE.SceneUtils.createMultiMaterialObject(new THREE.CylinderGeometry(50, 50, 200, 25, 10, false), materials); 
       cylinder.overdraw = true; 
       scene.add(cylinder); 


       // renderer 

       renderer = new THREE.CanvasRenderer(); 
       renderer.setSize(window.innerWidth, window.innerHeight); 
       container.appendChild(renderer.domElement);    

       // stats 

       stats = new Stats(); 
       stats.domElement.style.position = 'absolute'; 
       stats.domElement.style.top = '0px'; 
       container.appendChild(stats.domElement); 

       document.addEventListener('mousedown', onDocumentMouseDown, false); 
       document.addEventListener('touchstart', onDocumentTouchStart, false); 
       document.addEventListener('touchmove', onDocumentTouchMove, false);    

       window.addEventListener('resize', onWindowResize, false); 

      } 

      function onWindowResize() { 

       camera.left = window.innerWidth/- 2; 
       camera.right = window.innerWidth/2; 
       camera.top = window.innerHeight/2; 
       camera.bottom = window.innerHeight/- 2; 
       camera.aspect = window.innerWidth/window.innerHeight; 
       camera.updateProjectionMatrix(); 

       renderer.setSize(window.innerWidth, window.innerHeight); 

      } 

      function onDocumentMouseDown(event) { 

       event.preventDefault(); 

       document.addEventListener('mousemove', onDocumentMouseMove, false); 
       document.addEventListener('mouseup', onDocumentMouseUp, false); 
       document.addEventListener('mouseout', onDocumentMouseOut, false); 

       mouseXOnMouseDown = event.clientX - windowHalfX; 
       targetRotationOnMouseDown = targetRotation; 

      } 

      function onDocumentMouseMove(event) { 

       mouseX = event.clientX - windowHalfX; 

       targetRotation = targetRotationOnMouseDown + (mouseX - mouseXOnMouseDown) * 0.02; 

      } 

      function onDocumentMouseUp(event) { 

       document.removeEventListener('mousemove', onDocumentMouseMove, false); 
       document.removeEventListener('mouseup', onDocumentMouseUp, false); 
       document.removeEventListener('mouseout', onDocumentMouseOut, false); 

      } 

      function onDocumentMouseOut(event) { 

       document.removeEventListener('mousemove', onDocumentMouseMove, false); 
       document.removeEventListener('mouseup', onDocumentMouseUp, false); 
       document.removeEventListener('mouseout', onDocumentMouseOut, false); 

      } 

      function onDocumentTouchStart(event) { 

       if (event.touches.length === 1) { 

        event.preventDefault(); 

        mouseXOnMouseDown = event.touches[ 0 ].pageX - windowHalfX; 
        targetRotationOnMouseDown = targetRotation; 

       } 

      } 

      function onDocumentTouchMove(event) { 
       if (event.touches.length === 1) { 
        event.preventDefault(); 
        mouseX = event.touches[ 0 ].pageX - windowHalfX; 
        targetRotation = targetRotationOnMouseDown + (mouseX - mouseXOnMouseDown) * 0.05; 
       } 
      } 

      function animate() { 
       requestAnimationFrame(animate); 
       render(); 
       stats.update(); 

      } 

      function render() {    
       cylinder.rotation.y += (targetRotation - cylinder.rotation.y) * 0.05; 
       renderer.render(scene, camera);    
      }   


     </script> 

    </body> 
</html>