【问题标题】:how to convert 2d drawings to 3drawing using three.js/webgl如何使用 three.js/webgl 将 2d 绘图转换为 3drawing
【发布时间】:2015-05-10 11:32:06
【问题描述】:

您好,我正在尝试使用 js 在画布中绘制 2d 对象。如果单击该按钮,它将更改为位于同一页面中的另一个画布中的 3d 对象。 我尝试使用 three.js。如果我想绘制 3d 对象,我在代码中手动给出点。但我不知道如何转换为 3d 坐标。请提出任何想法

这是我绘制几何平面图的代码

   function init() 
   {
 // SCENE
    scene = new THREE.Scene();
// CAMERA
   var SCREEN_WIDTH = window.innerWidth, SCREEN_HEIGHT =  window.innerHeight;
   var VIEW_ANGLE = 45, ASPECT = SCREEN_WIDTH / SCREEN_HEIGHT, NEAR = 0.1, FAR = 20000;
  camera = new THREE.PerspectiveCamera( VIEW_ANGLE, ASPECT, NEAR, FAR);
  scene.add(camera);
  camera.position.set(0,150,400);
  camera.lookAt(scene.position);    
  // RENDERER
  if ( Detector.webgl )
    renderer = new THREE.WebGLRenderer( {antialias:true} );
   else
    renderer = new THREE.CanvasRenderer(); 
    renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
   container = document.getElementById( 'ThreeJS' );
   container.appendChild( renderer.domElement );
// EVENTS
   THREEx.WindowResize(renderer, camera);
   THREEx.FullScreen.bindKey({ charCode : 'm'.charCodeAt(0) });
// CONTROLS
   controls = new THREE.OrbitControls( camera, renderer.domElement );
// STATS
   stats = new Stats();
    stats.domElement.style.position = 'absolute';
   stats.domElement.style.bottom = '0px';
   stats.domElement.style.zIndex = 100;
   container.appendChild( stats.domElement );
   // LIGHT
   var light = new THREE.PointLight(0xffffff);
   light.position.set(0,250,0);
   scene.add(light);
// FLOOR
   var floorTexture = new THREE.ImageUtils.loadTexture( 'images/checkerboard.jpg' );
   floorTexture.wrapS = floorTexture.wrapT = THREE.RepeatWrapping; 
    floorTexture.repeat.set( 10, 10 );
    var floorMaterial = new THREE.MeshBasicMaterial( { map: floorTexture, side: THREE.DoubleSide } );
    var floorGeometry = new THREE.PlaneGeometry(1000, 1000, 10, 10);
  var floor = new THREE.Mesh(floorGeometry, floorMaterial);
  floor.position.y = -0.5;
  floor.rotation.x = Math.PI / 2;
  scene.add(floor);
  // SKYBOX/FOG
  var skyBoxGeometry = new THREE.CubeGeometry( 10000, 10000, 10000 );
  var skyBoxMaterial = new THREE.MeshBasicMaterial( { color: 0x9999ff,    side: THREE.BackSide } );
    var skyBox = new THREE.Mesh( skyBoxGeometry, skyBoxMaterial );
       scene.fog = new THREE.FogExp2( 0x9999ff, 0.00025 );

  var starPoints = [];
  starPoints.push( new THREE.Vector2 (   10, 50 ) );
  starPoints.push( new THREE.Vector2 (  50, 100 ) );
  starPoints.push( new THREE.Vector2 (  100, 150 ) );
  starPoints.push( new THREE.Vector2 (  150, 200 ) );

 /*starPoints.push( new THREE.Vector2 (  30, -50 ) );
  starPoints.push( new THREE.Vector2 (   0, -20 ) );
  starPoints.push( new THREE.Vector2 ( -30, -50 ) );
  starPoints.push( new THREE.Vector2 ( -20, -10 ) );
  starPoints.push( new THREE.Vector2 ( -40,  10 ) );
  starPoints.push( new THREE.Vector2 ( -10,  10 ) );*/

   var starShape = new THREE.Shape( starPoints );

   var extrusionSettings = {
    size: 30, height: 4, curveSegments: 3,
    bevelThickness: 1, bevelSize: 2, bevelEnabled: false,
    material: 0, extrudeMaterial: 1
    };

    var starGeometry = new THREE.ExtrudeGeometry( starShape,   extrusionSettings );

    var materialFront = new THREE.MeshBasicMaterial( { color: 0xffff00   } );
    var materialSide = new THREE.MeshBasicMaterial( { color: 0xff8800 } );
    var materialArray = [ materialFront, materialSide ];
    var starMaterial = new THREE.MeshFaceMaterial(materialArray);

    var star = new THREE.Mesh( starGeometry, starMaterial );
    star.position.set(0,50,0);
    scene.add(star);

   // add a wireframe to model
    var wireframeTexture = new THREE.MeshBasicMaterial( { color: 0x000000, wireframe: true, transparent: true } ); 
   var star = new THREE.Mesh( starGeometry, wireframeTexture );
   star.position.set(0,50,0);
   scene.add(star);
   }

   function animate() 
   {
   requestAnimationFrame( animate );
   render();        
    update();
    }

  function update()
   {
   if ( keyboard.pressed("z") ) 
   { 
   // do something

    }
    controls.update();
    stats.update();
   }

   function render() 
   {
    renderer.render( scene, camera );
   }

【问题讨论】:

    标签: javascript html three.js webgl


    【解决方案1】:

    我想帮忙,

    您可以访问: http://stemkoski.github.io/Three.js/Extrusion.html

    方法是:

    var extrusionSettings = {
            size: 30, height: 4, curveSegments: 3,
            bevelThickness: 1, bevelSize: 2, bevelEnabled: false,
            material: 0, extrudeMaterial: 1
        };
    
        var starGeometry = new THREE.ExtrudeGeometry( starShape, extrusionSettings );
    

    【讨论】:

    • 感谢您的回复我已经看到了这个网址..我不知道如何将 2d 坐标更改为 3d 坐标
    • 我已经使用了 babylon.js.get into babylon.js...你会得到一些想法
    【解决方案2】:

    您的意思是从构造函数创建一个 3d 点吗? 如果是这样,它只是three.js中的一行。

     new THREE.Vector3( x, y, z );
    

    【讨论】:

      猜你喜欢
      • 2013-10-05
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多