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

28. Three.js案例-创建圆角矩形并进行拉伸

28. Three.js案例-创建圆角矩形并进行拉伸

实现效果

效果

知识点

WebGLRenderer (WebGL渲染器)

WebGLRenderer 是 Three.js 中用于渲染 3D 场景的主要渲染器。

构造器

WebGLRenderer( parameters : Object )

参数类型描述
parametersObject渲染器的配置参数,可选。

常用参数:

  • antialias:布尔值,是否开启抗锯齿,默认为 false
  • alpha:布尔值,是否允许透明,默认为 false
  • precision:字符串,指定着色器的精度,可选值为 low, medium, high
方法
  • setSize(width, height): 设置渲染器的尺寸。
  • setClearColor(color, alpha): 设置渲染器的背景颜色和透明度。

PerspectiveCamera (透视相机)

PerspectiveCamera 是 Three.js 中用于创建透视投影相机的对象。

构造器

PerspectiveCamera(fov, aspect, near, far)

参数类型描述
fovNumber视野角度,单位为度。
aspectNumber相机的宽高比。
nearNumber近裁剪面距离。
farNumber远裁剪面距离。
方法
  • position.set(x, y, z): 设置相机的位置。
  • lookAt(vector): 设置相机的朝向。

Scene (场景)

Scene 是 Three.js 中用于存储和管理所有 3D 对象的容器。

构造器

Scene()

方法
  • add(object): 向场景中添加对象。
  • remove(object): 从场景中移除对象。

PointLight (点光源)

PointLight 是 Three.js 中用于创建点光源的对象。

构造器

PointLight(color, intensity, distance, decay)

参数类型描述
colorColor光源的颜色。
intensityNumber光源的强度,默认为 1
distanceNumber光源的最大影响距离,默认为 0,表示无限远。
decayNumber光源的衰减系数,默认为 1
方法
  • position.set(x, y, z): 设置光源的位置。

Shape (形状)

Shape 是 Three.js 中用于创建自定义 2D 形状的对象。

构造器

Shape(points)

参数类型描述
pointsArray一系列 Vector2 点,用于定义形状的轮廓。
方法
  • moveTo(x, y): 移动到指定点。
  • lineTo(x, y): 从当前点画直线到指定点。
  • quadraticCurveTo(cpx, cpy, x, y): 从当前点画二次贝塞尔曲线到指定点。

ExtrudeGeometry (拉伸几何体)

ExtrudeGeometry 是 Three.js 中用于创建拉伸几何体的对象。

构造器

ExtrudeGeometry(shape, options)

参数类型描述
shapeShape要拉伸的 2D 形状。
optionsObject拉伸选项,可选。

常用选项:

  • depth: 拉伸深度,默认为 100
  • bevelEnabled: 是否启用倒角,默认为 true
  • bevelThickness: 倒角厚度,默认为 6
  • bevelSize: 倒角大小,默认为 1
  • bevelOffset: 倒角偏移,默认为 0
  • bevelSegments: 倒角段数,默认为 1
  • extrudePath: 拉伸路径,可以是一个 Curve 对象。

Mesh (网格)

Mesh 是 Three.js 中用于创建网格对象的类。

构造器

Mesh(geometry, material)

参数类型描述
geometryGeometry网格的几何体。
materialMaterial网格的材质。
方法
  • translateX(amount): 沿 X 轴移动指定距离。
  • translateY(amount): 沿 Y 轴移动指定距离。
  • translateZ(amount): 沿 Z 轴移动指定距离。
  • scale.set(x, y, z): 设置网格的缩放比例。

MeshPhongMaterial (网格Phong材质)

MeshPhongMaterial 是 Three.js 中用于创建 Phong 着色材质的对象。

构造器

MeshPhongMaterial(parameters)

参数类型描述
parametersObject材质的配置参数,可选。

常用参数:

  • color: 材质的颜色。
  • specular: 高光颜色,默认为 0x111111
  • shininess: 高光强度,默认为 30

OrbitControls (轨道控制器)

OrbitControls 是 Three.js 中用于控制相机旋转、缩放和平移的控制器。

构造器

OrbitControls(camera, domElement)

参数类型描述
cameraCamera控制的相机对象。
domElementDOMElement控制器绑定的 DOM 元素。
方法
  • update(): 更新控制器状态。

代码

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><script src="ThreeJS/three.js"></script><script src="ThreeJS/jquery.js"></script><script src="ThreeJS/OrbitControls.js"></script>
</head>
<body>
<center id="myContainer"></center>
<script>// 创建渲染器var myRenderer = new THREE.WebGLRenderer({antialias: true});myRenderer.setSize(window.innerWidth, window.innerHeight);myRenderer.setClearColor('white', 1.0);$("#myContainer").append(myRenderer.domElement);// 创建相机var myCamera = new THREE.PerspectiveCamera(45, 1, 1, 1000);myCamera.position.set(200, 200, 200);myCamera.lookAt({x: 0, y: 0, z: 0});// 创建场景var myScene = new THREE.Scene();// 创建点光源var myPointLight = new THREE.PointLight('white');myPointLight.position.set(320, 200, 400);myScene.add(myPointLight);// 创建圆角矩形var myShape = new THREE.Shape();var x = 0, y = 0, myWidth = 30, myHeight = 40, myRadius = 6;myShape.moveTo(x, y + myRadius);myShape.lineTo(x, y + myHeight - myRadius);myShape.quadraticCurveTo(x, y + myHeight, x + myRadius, y + myHeight);myShape.lineTo(x + myWidth - myRadius, y + myHeight);myShape.quadraticCurveTo(x + myWidth, y + myHeight, x + myWidth, y + myHeight - myRadius);myShape.lineTo(x + myWidth, y + myRadius);myShape.quadraticCurveTo(x + myWidth, y, x + myWidth - myRadius, y);myShape.lineTo(x + myRadius, y);myShape.quadraticCurveTo(x, y, x, y + myRadius);// 设置拉伸圆角矩形的路径var myCurve = new THREE.CatmullRomCurve3([new THREE.Vector3(0, 0, 0), new THREE.Vector3(0, 30, 0)]);// 创建拉伸之后的圆角矩形var myGeometry = new THREE.ExtrudeGeometry(myShape, {extrudePath: myCurve});var myMaterial = new THREE.MeshPhongMaterial({color: 'cyan'});var myMesh = new THREE.Mesh(myGeometry, myMaterial);myMesh.translateX(100);myMesh.translateZ(100);myMesh.translateY(0);myScene.add(myMesh);// 渲染圆角矩形animate();var step = 0;function animate() {myRenderer.render(myScene, myCamera);step = step + 0.01;var myScale = 2 * Math.sin(step) + 2;myMesh.scale.y = myScale;myMesh.scale.x = 2;myMesh.scale.z = 2;requestAnimationFrame(animate);}// 创建轨道控制器var myOrbitControls = new THREE.OrbitControls(myCamera);
</script>
</body>
</html>

演示链接

示例链接

http://www.lryc.cn/news/504122.html

相关文章:

  • Shopee算法分析 - x-sap-ri
  • 日志相关的学习记录
  • HTML和JavaScript实现商品购物系统
  • 深度学习中的激活函数
  • 编写php项目所需环境
  • 华为机试HJ108 求最小公倍数
  • 【Python技术】同花顺wencai涨停分析基础上增加连板分析
  • 《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(五)
  • 【LeetCode】3356、零数组变换 II
  • Vue 子组件修改父组件传过来的值的三种方式
  • 4.Python 数字类型
  • MacOs 日常故障排除troubleshooting
  • (补)算法刷题Day19:BM55 没有重复项数字的全排列
  • golang中的值传递与引用传递,如何理解结构体的方法?
  • linux部署ansible自动化运维
  • docker—私有仓库搭建
  • 【SpringAOP】深入浅出SpringAOP从原理到源码
  • Java 从查询超时到性能提升 (实战讲解)
  • 《C 语言携手 PaddlePaddle C++ API:开启深度学习开发新征程》
  • Mysql之存储过程
  • XV6 开发环境搭建
  • Windows 系统下 Python 环境安装
  • VMware Workstation的有线连接消失了
  • 73页车企大数据平台规划与数据价值挖掘应用咨询项目方案解读
  • MIF格式详解,javascript加载导出 MIF文件示例
  • 若依实现图片上传时自动添加水印
  • 用于日语词汇学习的微信小程序+ssm
  • 【信息系统项目管理师】高分论文:论信息系统项目的范围管理(融媒体发布系统)
  • Kaggler日志--Day5
  • VScode MAC按任意键关闭终端 想要访问桌面文件