threejs学习笔记--使用几何体

/*** 几何形状 ***/
new THREE.CubeGeometry(长, 宽, 高, 长的分割, 宽的分割, 高的分割);                           // 立方体
new THREE.PlanGeometry(长,宽, 长的分割, 宽的分割);                                          // 平面
new THREE.SphereGeometry(半径, 经度切片, 纬度分割, 经度分割, 经度跨过, 纬度开始, 纬度跨过); // 球体
new THREE.CircleGeometry(半径, 切片数, 开始, 跨过角度);                                     // 圆形
new THREE.CylinderGeometry(顶部面积, 底部面积, 高, 圆分割, 高分割, 是否没有顶面和底面);     // 圆台
new THREE.TetrahedronGeometry(半径, 细节);  // 正四边形
new THREE.OctahedronGeometry(半径, 细节);   // 正八边形
new THREE.IconsahedronGeometry(
let scene = new THREE.Scene();
let camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 0.1, 1000);    
let renderer = new THREE.WebGLRenderer();   
renderer.setSize(window.innerWidth, window.innerHeight);  
renderer.setClearColor(0xEEEEEE,1.0);
renderer.shadowMapEnabled = true;//告诉渲染器我需要阴影
document.body.appendChild(renderer.domElement);  

//首先在场景里添加一个光源  
let spotLight = new THREE.SpotLight(0x00ff00);  //通过spotLight()方法创建一个光源  
spotLight.position.set(-40,60,-10);   //灯光在这个位置照射场景  
spotLight.castShadow = true;
scene.add(spotLight);                 //加入场景  


//创建一个平面
let planeGeometry = new THREE.PlaneGeometry(100,50);
let planeMaterial = new THREE.MeshLambertMaterial( {color: 0xffffff} );
let plane = new THREE.Mesh(planeGeometry,planeMaterial);
plane.receiveShadow = true;//接收阴影
plane.rotation.x = -0.5*Math.PI;  //x轴旋转-90度
plane.position.set(15,0,0);
scene.add( plane ); 

//创建一个圆
let circleGeometry = new THREE.CircleGeometry(3,100);//第二个参数越大,越接近圆,如果参数为3(最小值),则是三角形,参数为4,则是矩形
let circleMaterial = new THREE.MeshLambertMaterial( {color: 0xffffff} );
let circle = new THREE.Mesh(circleGeometry,circleMaterial);
circle.receiveShadow = true;//接收阴影
circle.rotation.x = -0.5*Math.PI;  //x轴旋转-90度
circle.position.set(7,5,0);
scene.add( circle ); 

//创建一个方块
let cubeGeometry = new THREE.CubeGeometry(4,4,4);
let cubeMaterial = new THREE.MeshLambertMaterial( {color:0x7777ff} );//{color: 0xff0000}
let cube = new THREE.Mesh( cubeGeometry, cubeMaterial );
cube.castShadow = true;//投射阴影
cube.position.set(-8,3,0);
scene.add( cube ); 
 
//创建一个球体
let sphereGeometry = new THREE.SphereGeometry(4,20,20);
let sphereMaterial = new THREE.MeshLambertMaterial( {color: 0x7777ff} );
let sphere = new THREE.Mesh( sphereGeometry, sphereMaterial );
sphere.castShadow = true;
sphere.position.set(20,4,2);
sphere.scale.set(1.5,1.5,1.5);//缩放
scene.add( sphere ); 

//创建一个圆柱
let cylinderGeometry = new THREE.CylinderGeometry(2,2,5);  //顶部或底部为0,则变成圆锥
let cylinderMaterial = new THREE.MeshLambertMaterial( {color:0x7777ff} );//{color: 0xff0000}
let cylinder = new THREE.Mesh( cylinderGeometry, cylinderMaterial );
cylinder.castShadow = true;//投射阴影
cylinder.position.set(-4,3,-8);
scene.add( cylinder ); 

//创建一个圆环
let torusGeometry = new THREE.TorusGeometry(5,1,50,50);  //还有第五个参数控制是否绘制完整一个圆环
let torusMaterial = new THREE.MeshLambertMaterial( {color:0x7777ff} );//{color: 0xff0000}
let torus = new THREE.Mesh( torusGeometry, torusMaterial );
torus.position.set(-4,6,12);
scene.add( torus ); 

//创建一个环面扭结
let torusKnotGeometry = new THREE.TorusKnotGeometry(5,1,50,50);  //
let torusKnotMaterial = new THREE.MeshLambertMaterial( {color:0x7777ff} );//{color: 0xff0000}
let torusKnot = new THREE.Mesh( torusKnotGeometry, torusKnotMaterial );
torusKnot.castShadow = true;//投射阴影
torusKnot.position.set(20,12,16);
scene.add( torusKnot ); 

//利用PolyhedronGeometry创建多面体
let vertices = [1,0,1,1,0,-1,-1,0,-1,-1,0,1,0,1,0] ; //点坐标
let faces = [0,1,2,3,0,1,4,1,2,4,2,3,4,3,0,4] ;      //那几个点构成面

function createMesh(geometry){
    var meshMaterial = new THREE.MeshNormalMaterial();
    meshMaterial.side = THREE.DoubleSide; //侧面
    var wireFrameMaterial = new THREE.MeshBasicMaterial();
    wireFrameMaterial.wireframe = true;//是否显示线框

    var mesh = THREE.SceneUtils.createMultiMaterialObject(geometry,[meshMaterial,wireFrameMaterial]);//创建网格

    return mesh;
}
 let polyhedron= createMesh(new THREE.PolyhedronGeometry(vertices,faces));
 polyhedron.scale.set(3,3,3);//缩放
 scene.add(polyhedron);
 
 //创建一个正20面体
let icosahedronGeometry = new THREE.IcosahedronGeometry(4,0);  //
let icosahedronMaterial = new THREE.MeshLambertMaterial( {color:0x7777ff} );//{color: 0xff0000}
let icosahedron = new THREE.Mesh( icosahedronGeometry, icosahedronMaterial );
icosahedron.castShadow = true;//投射阴影
icosahedron.position.set(20,12,-10);
scene.add( icosahedron ); 

//坐标轴辅助    
let axes = new THREE.AxisHelper(100);    
scene.add(axes); 

//相机
camera.position.set(-30,40,30);
camera.lookAt(scene.position);
//相机往x轴移动10单位  
camera.lookAt(new THREE.Vector3(10,0,0));  


//动画(循环渲染) 
let step=0;
function updata(){  

    step+=0.04;
    //球体y轴运动
    sphere.position.y=20+(10*(Math.cos(step)));
    sphere.position.y=2+(10*Math.abs(Math.sin(step)));
    //方块y轴运动
    cube.position.y=20+(10*(Math.cos(step)));
    cube.position.y=2+(10*Math.abs(Math.sin(step)));
    //方块自我旋转
    cube.rotation.x+=0.02;
    cube.rotation.y+=0.02;
    cube.rotation.z+=0.02;
    //圆环自我旋转
    torus.rotation.x+=0.02;
    
    renderer.render(scene, camera);  
   requestAnimationFrame(updata);  
}  
updata(); 

半径, 细节); // 正十二边形new THREE.TorusGeometry(半径, 管道半径, 纬度分割, 经度分割, 圆环面的弧度); // 圆环面
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值