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

server/2024/12/17 16:52:28/

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

实现效果

效果

知识点

WebGLRenderer_WebGL_8">WebGLRenderer (WebGL渲染器)

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

构造器

WebGLRenderer( parameters : Object )

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

常用参数:

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

PerspectiveCamera (透视相机)

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

构造器

PerspectiveCamera(fov, aspect, near, far)

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

Scene (场景)

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

构造器

Scene()

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

PointLight (点光源)

PointLightThree.js 中用于创建点光源的对象。

构造器

PointLight(color, intensity, distance, decay)

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

Shape (形状)

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

构造器

Shape(points)

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

ExtrudeGeometry (拉伸几何体)

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

构造器

ExtrudeGeometry(shape, options)

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

常用选项:

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

Mesh (网格)

MeshThree.js 中用于创建网格对象的类。

构造器

Mesh(geometry, material)

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

MeshPhongMaterial (网格Phong材质)

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

构造器

MeshPhongMaterial(parameters)

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

常用参数:

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

OrbitControls (轨道控制器)

OrbitControlsThree.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.ppmy.cn/server/150951.html

相关文章

计算机网络知识点全梳理(一.TCP/IP网络模型)

目录 TCP/IP网络模型概述 应用层 什么是应用层 应用层功能 应用层协议 传输层 什么是传输层 传输层功能 传输层协议 网络层 什么是网络层 网络层功能 网络层协议 数据链路层 什么是数据链路层 数据链路层功能 物理层 物理层的概念和功能 写在前面 本系列文…

vue webpack详情配置说明

Vue 和 Webpack 使用说明1. 创建 Vue 项目使用 Vue CLI 创建一个新的 Vue 项目是最简单的方式。Vue CLI 内部使用 Webpack 进行构建。npm install -g vue/cli vue create my-project cd my-project npm run serve## 2. 项目结构创建的 Vue 项目通常具有以下结构&#xff1a;my-…

RabbitMQ 和 Kafka

RabbitMQ和Kafka是两种广泛使用的消息队列系统&#xff0c;它们在多个方面有着显著的差异。以下是对它们的全方位深度对比&#xff1a; 设计理念&#xff1a; RabbitMQ基于AMQP协议&#xff0c;强调易用性和灵活性&#xff0c;支持多种消息模式和可靠的消息传递。Kafka专为处理…

后端开发工程师需要掌握哪些设计模式?

大家好&#xff0c;我是袁庭新。 作为后端开发者&#xff0c;学习和掌握设计模式是非常有必要的。不仅可以帮助后端开发者更好地设计和实现软件架构&#xff0c;还可以提高代码的质量和可维护性。此外&#xff0c;设计模式也是后端开发面试中常见的考点之一&#xff0c;掌握它…

动态导出word文件支持转pdf

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、功能说明二、使用步骤1.controller2.工具类 DocumentUtil 导出样式 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff…

Web安全攻防入门教程——hvv行动详解

Web安全攻防入门教程 Web安全攻防是指在Web应用程序的开发、部署和运行过程中&#xff0c;保护Web应用免受攻击和恶意行为的技术与策略。这个领域不仅涉及防御措施的实现&#xff0c;还包括通过渗透测试、漏洞挖掘和模拟攻击来识别潜在的安全问题。 本教程将带你入门Web安全攻…

SpringMVC 学习笔记

在 Web 开发的世界里&#xff0c;SpringMVC 是一个极为重要的框架&#xff0c;它能够帮助我们构建高效、灵活的 Web 应用程序。 一、MVC 设计理念 MVC&#xff0c;即 Model - View - Controller&#xff0c;是一种将软件系统划分为三个主要部分的设计模式。它的出现旨在实现各…

AI监控赋能健身馆与游泳馆全方位守护,提升安全效率

一、AI视频监控技术的崛起 随着人工智能技术的不断发展&#xff0c;AI视频监控正成为各行业保障安全、提升效率的关键工具。相比传统监控系统&#xff0c;AI技术赋予监控系统实时分析、智能识别和精准预警的能力&#xff0c;让“被动监视”转变为“主动防控”。 二、AI监控应用…