15. Three.js案例-绘制空心圆与实心圆

15. Three.js案例-绘制空心圆与实心圆

实现效果

效果

知识点

WebGLRenderer

WebGLRenderer 是 Three.js 中用于渲染 WebGL 场景的主要类。

构造器

WebGLRenderer(parameters : object)

参数类型描述
parametersobject渲染器的配置参数。

常用参数:

  • antialias:布尔值,表示是否开启抗锯齿。默认为 false
  • alpha:布尔值,表示是否允许透明背景。默认为 false
  • preserveDrawingBuffer:布尔值,表示是否保留绘图缓冲区。默认为 false
方法
  • setSize(width : Integer, height : Integer): 设置渲染器的尺寸。
  • render(scene : Scene, camera : Camera): 渲染指定的场景和相机。

Scene

Scene 是 Three.js 中用于存储场景对象的容器。

构造器

Scene()

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

PerspectiveCamera

PerspectiveCamera 是 Three.js 中用于创建透视相机的类。

构造器

PerspectiveCamera(fov : Float, aspect : Float, near : Float, far : Float)

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

CircleGeometry

CircleGeometry 是 Three.js 中用于创建圆形几何体的类。

构造器

CircleGeometry(radius : Float, segments : Integer, thetaStart : Float, thetaLength : Float)

参数类型描述
radiusFloat圆的半径。
segmentsInteger圆的分段数,决定了圆的平滑度。
thetaStartFloat开始角度(以弧度为单位)。
thetaLengthFloat弧度长度(以弧度为单位)。
方法
  • vertices.shift(): 移除第一个顶点,用于创建空心圆。

MeshBasicMaterial

MeshBasicMaterial 是 Three.js 中用于创建基本材质的类。

构造器

MeshBasicMaterial(parameters : object)

参数类型描述
colorColor材质的颜色。
wireframeBoolean是否显示线框。
sideInteger渲染哪一面,默认为 FrontSide

Line

Line 是 Three.js 中用于创建线条对象的类。

构造器

Line(geometry : Geometry, material : Material)

参数类型描述
geometryGeometry线条的几何体。
materialMaterial线条的材质。

Mesh

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

构造器

Mesh(geometry : Geometry, material : Material)

参数类型描述
geometryGeometry网格的几何体。
materialMaterial网格的材质。

jQuery

jQuery 是一个快速、小巧、功能丰富的库。它使 HTML 文档遍历和操作、事件处理、动画和 Ajax 更加简单。

方法
  • $(selector).click(function() { ... }): 绑定点击事件处理器。
  • $(selector).append(element): 将元素添加到指定的选择器中。

代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <script src="ThreeJS/three.js"></script>
    <script src="ThreeJS/jquery.js"></script>
</head>
<body>
<p>
    <button id="myButton1">绘制空心圆</button>
    <button id="myButton2">绘制实心圆</button>
</p>
<center id="myContainer"></center>
<script>
    // 创建渲染器
    var myRenderer = new THREE.WebGLRenderer({antialias: true});
    myRenderer.setSize(window.innerHeight, window.innerHeight);
    $("#myContainer").append(myRenderer.domElement);

    // 创建场景
    var myScene = new THREE.Scene();
    myScene.background = new THREE.Color('white');

    // 创建相机
    var myCamera = new THREE.PerspectiveCamera(45, 1, 1, 1000);
    myCamera.position.set(0, 0, 160);
    myCamera.lookAt(myScene.position);

    var myCircle;

    // 渲染循环
    function animate() {
        myRenderer.render(myScene, myCamera);
        requestAnimationFrame(animate);
    }

    // 绘制空心圆
    $("#myButton1").click(function () {
        if (myCircle) myScene.remove(myCircle);
        var myMaterial = new THREE.MeshBasicMaterial({color: 0x0000ff});
        var myGeometry = new THREE.CircleGeometry(50, 1000);
        myGeometry.vertices.shift(); // 移除第一个顶点,创建空心圆
        myCircle = new THREE.Line(myGeometry, myMaterial);
        myScene.add(myCircle);
    });

    // 绘制实心圆
    $("#myButton2").click(function () {
        if (myCircle) myScene.remove(myCircle);
        var myMaterial = new THREE.MeshBasicMaterial({color: 0x0000ff});
        var myGeometry = new THREE.CircleGeometry(50, 1000);
        myCircle = new THREE.Mesh(myGeometry, myMaterial);
        myScene.add(myCircle);
    });

    // 开始渲染
    animate();
</script>
</body>
</html>

演示链接

示例链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MossGrower

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值