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

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

实现效果

知识点

WebGLRenderer (WebGL渲染器)

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

构造器

WebGLRenderer( parameters : Object )

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

常用参数:

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

PerspectiveCamera (透视相机)

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

构造器

PerspectiveCamera(fov, aspect, near, far)

参数 类型 描述
fov Number 视野角度,单位为度。
aspect Number 相机的宽高比。
near Number 近裁剪面距离。
far Number 远裁剪面距离。
方法
  • 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)

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

Shape (形状)

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

构造器

Shape(points)

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

ExtrudeGeometry (拉伸几何体)

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

构造器

ExtrudeGeometry(shape, options)

参数 类型 描述
shape Shape 要拉伸的 2D 形状。
options Object 拉伸选项,可选。

常用选项:

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

Mesh (网格)

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

构造器

Mesh(geometry, material)

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

MeshPhongMaterial (网格Phong材质)

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

构造器

MeshPhongMaterial(parameters)

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

常用参数:

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

OrbitControls (轨道控制器)

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

构造器

OrbitControls(camera, domElement)

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

代码

html 复制代码
<!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>

演示链接

示例链接

相关推荐
一粒马豆3 天前
three.js实现裸眼双目平行立体视觉
3d·vr·three.js·裸眼双目平行立体视觉
匹马夕阳3 天前
(十四)WebGL纹理坐标初识
前端框架·图形渲染·webgl
咔咔库奇3 天前
【three.js】纹理贴图
开发语言·javascript·three.js·贴图·three
浩哥的技术博客4 天前
Threejs的学习-入门
前端·前端框架·webgl
xhload3d5 天前
正泰电工×图扑软件:变电站数字孪生巡检平台
3d·智慧城市·html5·webgl·数字孪生·可视化·变电站·工业互联网·智慧电力·轻量化·电力能源·合作共赢
omegayy8 天前
Unity WebGL:本机部署,运行到手机
unity·游戏引擎·webgl
程序员小淞11 天前
1、如何本地部署Threejs官网文档
前端·three.js
谢泽浩12 天前
Unity Webgl + WebAPI 之 SqlSugar根据Mysql表反向生成实体类
mysql·unity·webgl
布兰妮甜12 天前
Three.js 扩展与插件:增强3D开发的利器
javascript·3d·three.js·扩展与插件
布兰妮甜12 天前
Three.js 性能优化:打造流畅高效的3D应用
javascript·3d·性能优化·three.js