简介

THREE.LatheGeometry允许你从一条光滑的曲线创建图形。此曲线是由多个点定义,通常称作样条曲线。然后再绕y轴旋转,就生成了一组车床类型的几何体模型。

简单实现

  • 首先,我们需要在平面上设置一个曲线的点,每个点都有x,y坐标,如图

    然后,我们使用这一组顶点的坐标去实例化一个THREE.LatheGeometry几何体。然后设置相关属性,即可生成一个模型

案例查看地址:http://www.wjceo.com/blog/threejs/2018-02-12/44.html

实例化方法

var latheGeometry = new THREE.LatheGeometry(points, segments, phiStart, phiLength);

属性详解

属性 是否必需 描述
points 该属性指定构成样条曲线的点,然后基于这些点来生成相关的模型
segments 该属性指定创建图形时所使用的分段数目。这个数值越高,模型越圆滑。默认12
phiStart 该属性指定创建图形时从圆的何处开始。取值范围是0到2*Math.PI。默认为0
phiLength 该属性指定创建的图形有多完整。例如四分之一图形就是0.5*Math.PI。默认是完整的360度图形

案例代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style type="text/css">html, body {margin: 0;height: 100%;}canvas {display: block;}</style>
</head>
<body onload="draw();"></body>
<script src="https://johnson2heng.github.io/three.js-demo/lib/three.js"></script>
<script src="https://johnson2heng.github.io/three.js-demo/lib/js/QuickHull.js"></script>
<script src="https://johnson2heng.github.io/three.js-demo/lib/js/geometries/ConvexGeometry.js"></script>
<script src="https://johnson2heng.github.io/three.js-demo/lib/js/controls/OrbitControls.js"></script>
<script src="https://johnson2heng.github.io/three.js-demo/lib/js/libs/stats.min.js"></script>
<script src="https://johnson2heng.github.io/three.js-demo/lib/js/libs/dat.gui.min.js"></script>
<script>var renderer;function initRender() {renderer = new THREE.WebGLRenderer({antialias:true});renderer.setSize(window.innerWidth, window.innerHeight);document.body.appendChild(renderer.domElement);}var camera;function initCamera() {camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 1, 10000);camera.position.set(0, 0, 60);}var scene;function initScene() {scene = new THREE.Scene();}var light;function initLight() {scene.add(new THREE.AmbientLight(0x404040));light = new THREE.DirectionalLight(0xffffff);light.position.set(1,1,1);scene.add(light);}function initModel() {generatePoints(120, 2, 2 * Math.PI);}//生成模型调用的方法function generatePoints(segments, phiStart, phiLength) {// add 10 random spheresvar points = []; //存储顶点位置的数组var height = 5;var count = 40;for (var i = 0; i < count; i++) {//将顶点坐标push进入数组points.push(new THREE.Vector3((Math.sin(i * 0.2) + Math.cos(i * 0.3)) * height + 12, ( i - count ) + count / 2, 0));}//创建一个存储顶点球体的对象spGroup = new THREE.Object3D();var material = new THREE.MeshBasicMaterial({color: 0xff0000, transparent: false}); //声明顶点球体使用的纹理points.forEach(function (point) {var spGeom = new THREE.SphereGeometry(0.2); //实例化球形几何体var spMesh = new THREE.Mesh(spGeom, material); //生成网格spMesh.position.copy(point); //将当前顶点的坐标位置赋值给当前球体spGroup.add(spMesh); //添加到对象当中});// 将存储顶点球体的对象添加到场景当中scene.add(spGroup);// 实例化一个THREE.LatheGeometry,并设置相关的信息var latheGeometry = new THREE.LatheGeometry(points, segments, phiStart, phiLength);latheMesh = createMesh(latheGeometry);scene.add(latheMesh);}function createMesh(geom) {//  实例化一个法向量的材质var meshMaterial = new THREE.MeshNormalMaterial();meshMaterial.side = THREE.DoubleSide; //设置两面都可见var wireFrameMat = new THREE.MeshBasicMaterial();wireFrameMat.wireframe = true; //把材质渲染成线框// 将两种材质都赋给几何体var mesh = THREE.SceneUtils.createMultiMaterialObject(geom, [meshMaterial, wireFrameMat]);return mesh;}//初始化性能插件var stats;function initStats() {stats = new Stats();document.body.appendChild(stats.dom);}//用户交互插件 鼠标左键按住旋转,右键按住平移,滚轮缩放var controls;function initControls() {controls = new THREE.OrbitControls( camera, renderer.domElement );// 如果使用animate方法时,将此函数删除//controls.addEventListener( 'change', render );// 使动画循环使用时阻尼或自转 意思是否有惯性controls.enableDamping = true;//动态阻尼系数 就是鼠标拖拽旋转灵敏度//controls.dampingFactor = 0.25;//是否可以缩放controls.enableZoom = true;//是否自动旋转controls.autoRotate = false;//设置相机距离原点的最远距离controls.minDistance  = 20;//设置相机距离原点的最远距离controls.maxDistance  = 160;//是否开启右键拖拽controls.enablePan = true;}function render() {renderer.render( scene, camera );}//窗口变动触发的函数function onWindowResize() {camera.aspect = window.innerWidth / window.innerHeight;camera.updateProjectionMatrix();render();renderer.setSize( window.innerWidth, window.innerHeight );}function animate() {//更新控制器controls.update();render();//更新性能插件stats.update();requestAnimationFrame(animate);}function draw() {initRender();initScene();initCamera();initLight();initModel();initControls();initStats();animate();window.onresize = onWindowResize;}
</script>
</html>

42 Three.js高级几何体车床模型THREE.LatheGeometry相关推荐

  1. 《Ext JS 高级程序设计》的目录与样张

    第一部分 Ext Core 第1 章 Ext Core 重要概念 ············· 2 1.1 Ext.Element······························· 2 1. ...

  2. 前端面试题总结(js高级部分)

    七.JS 高级 1.JQuery 一个对象可以同时绑定多个事件,这是如何实现的? 2.知道什么是 webkit 么? 知道怎么用浏览器的各种工具来调试和 debug 代码么? 3.如何测试前端代码么? ...

  3. 前端知识点总结——JS高级(持续更新中)

    前端知识点总结--JS高级(持续更新中) 1.字符串 什么是: 连续存储多个字符的字符数组 相同: 1. 下标 2. .length 3. 遍历 4. 选取: slice(starti[, endi] ...

  4. 【带着canvas去流浪(14)】Three.js中凹浮雕模型的生成方式

    [摘要] 使用three.js生成凹浮雕模型. 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文目录 ...

  5. three.js使用OrbitControls.js控制几何体旋转、平移、缩放

    附带一个可用的OrbitControls.js http://www.yanhuangxueyuan.com/threejs/examples/js/controls/OrbitControls.js ...

  6. JS高级+ES678

    js高级 数据类型 基本(值)类型 Number: 任意数值 String: 任意文本 Boolean: true/false undefined: undefined null: null 对象(引 ...

  7. 【汇总】JS高级知识汇总

    文章目录 前言 1.浏览器工作原理和V8引擎 2.JavaScript函数执行.作用域链以及内存管理 3.底层剖析JavaScript闭包执行以及内存模型.内存泄露 4.this的四个绑定规则及其细节 ...

  8. JS高级之JavaScript简介

    JS高级系列是对JavaScript高级程序设计的总结. 一.基本概念 1.最早的JavaScript版本: Netscape公司的Netscape Navigator中的JavaScript 微软的 ...

  9. ~【笔记】黑马js高级和尚硅谷ES6笔记(部分)~

    点击通往->黑马pink讲js高级. 点击通往->尚硅谷ES6视频. 目录: js高级: 第一部分.构造函数.原型和继承 第二部分.函数进阶 一.函数的定义和调用 二.this 三.严格模 ...

最新文章

  1. 理解shared_ptrT
  2. MySQL数据表字段内容的批量修改、复制命令
  3. Drupal 通过API动态的加入样式文件
  4. CSS基础(part7)--字体样式属性
  5. throwable_您想了解的所有Throwable
  6. Laravel Composer 命令大全
  7. java 上传文件及预览_SpringBoot上传下载文件及在线预览
  8. 20172315 2017-2018-2 《程序设计与数据结构》第九周学习总结
  9. 银行存款都有哪些误区,你都有踩坑吗?
  10. powershell自动化操作AD域、Exchange邮箱系列(1)——powershell 简介
  11. matlab图像融合代码,图像融合+源代码+matlab
  12. 项目文档----项目描述
  13. 降维 php,线性降维方法 - 百度开发者中心的个人空间 - OSCHINA - 中文开源技术交流社区...
  14. 如何高效设计游戏——从抽奖模型到圆桌算法(上)
  15. php 路径解析,ThinkPHP 5 结构与路径解析
  16. 关于hive当中的double的数据类型
  17. 四川创峄信息科技有限公司企业公章管理
  18. PlatformIO使用Arduino[Ticker]库(ESP8266)
  19. 360 冰刃实验室研究员获得微软史上最高漏洞赏金
  20. 学会通过商品id来获得商品详情

热门文章

  1. javascript验证_使用JavaScript验证信用卡
  2. 揭秘移动研发平台EMAS的前世今生
  3. mysql 没有 advisor_MySQL之安装美团点评的SQLAdvisor
  4. r语言plotmds_在R语言中使用MDS(多维标度法)
  5. android 传感器 鼠标,记录学习第一天------android多线程的开发和传感器的初步认识...
  6. numpy.pad使用详解
  7. 李开复给中国大学生的第七封信---21世纪最需要的七种人才
  8. 大一计算机实操知识试题及答案,大学计算机一级考试操作题及答案
  9. 简单实现优酷视频上传
  10. Opera之10周年庆典,免费送注册码