当前位置: 首页 > wzjs >正文

南京品牌网站建设天津百度搜索网站排名

南京品牌网站建设,天津百度搜索网站排名,网页设计培训班上海,淘客推广佣金和服务费👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.LatheGeometry1.1.1 …

👨‍⚕️ 主页: gis分享者
👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅!
👨‍⚕️ 收录于专栏:threejs gis工程师


文章目录

  • 一、🍀前言
    • 1.1 ☘️THREE.LatheGeometry
      • 1.1.1 ☘️代码示例
      • 1.1.2 ☘️构造函数
      • 1.1.3 ☘️属性
      • 1.1.4 ☘️方法
  • 二、🍀使用LatheGeometry旋转体(榫卯体)几何体
    • 1. ☘️实现思路
    • 2. ☘️代码样例


一、🍀前言

本文详细介绍如何基于threejs在三维场景中使用LatheGeometry旋转体(榫卯体)几何体,亲测可用。希望能帮助到您。一起学习,加油!加油!

1.1 ☘️THREE.LatheGeometry

THREE.LatheGeometry创建具有轴对称性的网格,比如花瓶。车削绕着Y轴来进行旋转。

1.1.1 ☘️代码示例

代码示例

const points = [];
for ( let i = 0; i < 10; i ++ ) {points.push( new THREE.Vector2( Math.sin( i * 0.2 ) * 10 + 5, ( i - 5 ) * 2 ) );
}
const geometry = new THREE.LatheGeometry( points );
const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
const lathe = new THREE.Mesh( geometry, material );
scene.add( lathe );

1.1.2 ☘️构造函数

LatheGeometry(points : Array, segments : Integer, phiStart : Float, phiLength : Float)
points — 一个Vector2对象数组。每个点的X坐标必须大于0。 Default is an array with (0,-0.5), (0.5,0) and (0,0.5) which creates a simple diamond shape.
segments — 要生成的车削几何体圆周分段的数量,默认值是12。
phiStart — 以弧度表示的起始角度,默认值为0。
phiLength — 车削部分的弧度(0-2PI)范围,2PI将是一个完全闭合的、完整的车削几何体,小于2PI是部分的车削。默认值是2PI。

基于参数创建一个LatheGeometry。

1.1.3 ☘️属性

共有属性请参见其基类BufferGeometry。

.parameters : Object : Color
一个包含着构造函数中每个参数的对象。在对象实例化之后,对该属性的任何修改都不会改变这个几何体。

1.1.4 ☘️方法

共有方法请参见其基类BufferGeometry。

二、🍀使用LatheGeometry旋转体(榫卯体)几何体

1. ☘️实现思路

  • 1、初始化renderer渲染器。
  • 2、初始化Scene三维场景scene。
  • 3、初始化camera相机,定义相机位置 camera.position.set,设置相机方向camera.lookAt。
  • 4、加载几何模型:定义createMesh方法,使用MeshNormalMaterial网格法向材质和MeshBasicMaterial基础材质,生成mesh网格对象。定义generatePoints方法生成LatheGeometry旋转体数据latheGeometry,方法内调用createMesh方法创建旋转体网格对象latheMesh,场景scene添加latheMesh。加入gui控制,控制分段数、起始角度、车削部分的弧度。具体代码参考下面代码样例。
  • 5、加入stats监控器,监控帧数信息。

2. ☘️代码样例

<!DOCTYPE html>
<html>
<head><title>学习threejs,使用LatheGeometry旋转体(榫卯体)几何体</title><script type="text/javascript" src="../libs/three.js"></script><script type="text/javascript" src="../libs/stats.js"></script><script type="text/javascript" src="../libs/dat.gui.js"></script><style>body {margin: 0;overflow: hidden;}</style>
</head>
<body><div id="Stats-output">
</div>
<!-- Div which will hold the Output -->
<div id="WebGL-output">
</div><!-- Js 代码块 -->
<script type="text/javascript">// 初始化function init() {var stats = initStats();// 创建三维场景var scene = new THREE.Scene();// 创建透视相机var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);// 创建渲染器var webGLRenderer = new THREE.WebGLRenderer();webGLRenderer.setClearColor(new THREE.Color(0xEEEEEE, 1.0));webGLRenderer.setSize(window.innerWidth, window.innerHeight);webGLRenderer.shadowMapEnabled = true;// 设置相机位置和方向camera.position.x = -30;camera.position.y = 40;camera.position.z = 50;camera.lookAt(new THREE.Vector3(10, 0, 0));// 渲染器绑定html要素document.getElementById("WebGL-output").appendChild(webGLRenderer.domElement);var step = 0;var spGroup;// 旋转体网格对象var latheMesh;generatePoints(12, 2, 2 * Math.PI);// gui控制设置var controls = new function () {this.segments = 12;this.phiStart = 0;this.phiLength = 2 * Math.PI;this.redraw = function () {scene.remove(spGroup);scene.remove(latheMesh);generatePoints(controls.segments, controls.phiStart, controls.phiLength);};};var gui = new dat.GUI();gui.add(controls, 'segments', 0, 50).step(1).onChange(controls.redraw);gui.add(controls, 'phiStart', 0, 2 * Math.PI).onChange(controls.redraw);gui.add(controls, 'phiLength', 0, 2 * Math.PI).onChange(controls.redraw);render();function generatePoints(segments, phiStart, phiLength) {var points = [];var height = 5;var count = 30;for (var i = 0; i < count; i++) {points.push(new THREE.Vector3((Math.sin(i * 0.2) + Math.cos(i * 0.3)) * height + 12, 0, ( i - count ) + count / 2));}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);});// add the points as a group to the scenescene.add(spGroup);// 创建旋转几何体var latheGeometry = new THREE.LatheGeometry(points, segments, phiStart, phiLength);latheMesh = createMesh(latheGeometry);scene.add(latheMesh);}function createMesh(geom) {//  var meshMaterial = new THREE.MeshBasicMaterial({color:0x00ff00, transparent:true, opacity:0.6});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;}function render() {stats.update();spGroup.rotation.x = step;latheMesh.rotation.x = step += 0.01;requestAnimationFrame(render);webGLRenderer.render(scene, camera);}function initStats() {var stats = new Stats();stats.setMode(0);stats.domElement.style.position = 'absolute';stats.domElement.style.left = '0px';stats.domElement.style.top = '0px';document.getElementById("Stats-output").appendChild(stats.domElement);return stats;}}window.onload = init;
</script>
</body>
</html>

效果如下:
在这里插入图片描述

http://www.dtcms.com/wzjs/781483.html

相关文章:

  • 电影采集网站怎么做seo商城网站怎么做内链
  • 电脑做网站服务器改端口jpress wordpress
  • 手机怎么开网站wordpress搭建教育平台
  • 仿牌外贸网站推广潍坊高新建设局网站
  • 网站建设预算表样本网页搜索框下记录删不掉
  • 如何建公众号平邑网站优化
  • 专门做音效的网站wordpress配置网站
  • 网站建设都有什么功能公众号购买网站
  • 专门做化妆品平台的网站有哪些重庆响应式网站建设公司
  • 网站建设所用的工具做网站需要什么文件
  • 做电影网站哪个源码好搭建单位网站
  • 寻求网站建设技术wordpress is page
  • 北京网站搜索优化深圳企业年报
  • 购物网站建设代码教育机构网站建设加盟
  • 哪里有做网站培训的鹤城建设集团网站
  • 花溪区生态文明建设局网站拍摄宣传片的流程简要
  • 镇江做网站需要多少钱网站安全如何做
  • 桐乡市城市规划建设局网站专做淘宝的网站
  • 商城网站建设一般需要多少钱网站 数据库选择
  • 新华区设计网站公司和什么人合作做游戏视频网站
  • 超轻粘土做动漫网站衡水专业做wap网站
  • 爱站权重是怎么计算的广告平台代理
  • 网站建设实训总结及体会怎样申请一个免费网站
  • 如何建设网站服务器广州黄埔网站建设公司哪家好
  • 淘宝联盟 网站备案WordPress注册插件中文
  • 湛江网站建设产品优化关于做暧暧的网站
  • 茌平网站制作建设摩托车官网110
  • 西安招商型网站建设免费网站建设软件
  • 建设银行代发工资网站湛江企业网站
  • 青岛微信网站建设询价网站哪个好