30. Three.js案例-绘制并渲染圆弧

30. Three.js案例-绘制并渲染圆弧

实现效果

效果

知识点

WebGLRenderer

WebGLRenderer 是 Three.js 中用于渲染 3D 场景的核心类。它利用 WebGL 技术在浏览器中渲染 3D 图形。

构造器

new THREE.WebGLRenderer(parameters)

参数类型描述
parametersObject可选参数对象,包含以下属性:
antialiasBoolean是否开启抗锯齿,默认为 false
alphaBoolean是否透明,默认为 false
premultipliedAlphaBoolean是否使用预乘 Alpha,默认为 true
preserveDrawingBufferBoolean是否保留绘图缓冲区,默认为 false
stencilBoolean是否使用模板缓冲区,默认为 true
depthBoolean是否使用深度缓冲区,默认为 true
logarithmicDepthBufferBoolean是否使用对数深度缓冲区,默认为 false
powerPreferenceStringGPU 性能偏好,默认为 "default"

Scene

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

构造器

new THREE.Scene()

PerspectiveCamera

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

构造器

new THREE.PerspectiveCamera(fov, aspect, near, far)

参数类型描述
fovNumber视野角度,单位为度。
aspectNumber相机的宽高比。
nearNumber近裁剪面距离。
farNumber远裁剪面距离。

ArcCurve

ArcCurve 是 Three.js 中用于创建圆弧曲线的类。

构造器

new THREE.ArcCurve(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise)

参数类型描述
aXNumber圆心的 X 坐标。
aYNumber圆心的 Y 坐标。
aRadiusNumber圆的半径。
aStartAngleNumber起始角度,单位为弧度。
aEndAngleNumber结束角度,单位为弧度。
aClockwiseBoolean是否顺时针方向,默认为 false

LineBasicMaterial

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

构造器

new THREE.LineBasicMaterial(parameters)

参数类型描述
colorColor线条颜色,默认为 0xffffff
opacityNumber线条透明度,默认为 1.0
linewidthNumber线条宽度,默认为 1.0
linecapString线条端点样式,默认为 "round"
linejoinString线条连接样式,默认为 "round"
fogBoolean是否启用雾化效果,默认为 true
transparentBoolean是否启用透明效果,默认为 false
depthTestBoolean是否启用深度测试,默认为 true
depthWriteBoolean是否写入深度缓冲区,默认为 true
vertexColorsBoolean是否启用顶点颜色,默认为 false
blendingBlending混合模式,默认为 NormalBlending
blendSrcNumber源混合因子,默认为 OneFactor
blendDstNumber目标混合因子,默认为 ZeroFactor
blendEquationNumber混合方程,默认为 AddEquation
blendSrcAlphaNumber源混合因子(Alpha),默认为 OneFactor
blendDstAlphaNumber目标混合因子(Alpha),默认为 ZeroFactor
blendEquationAlphaNumber混合方程(Alpha),默认为 AddEquation
ditheringBoolean是否启用抖动效果,默认为 false
polygonOffsetBoolean是否启用多边形偏移,默认为 false
polygonOffsetFactorNumber多边形偏移因子,默认为 0
polygonOffsetUnitsNumber多边形偏移单位,默认为 0
alphaTestNumberAlpha 测试阈值,默认为 0
premultipliedAlphaBoolean是否使用预乘 Alpha,默认为 false
overdrawBoolean是否启用过度绘制,默认为 false
visibleBoolean是否可见,默认为 true
needsUpdateBoolean是否需要更新,默认为 false

Geometry

Geometry 是 Three.js 中用于存储几何数据的类。

方法
  • setFromPoints(points): 从点数组创建几何体。

Line

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

构造器

new THREE.Line(geometry, material)

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

animate 函数

animate 函数用于持续渲染场景。

function animate() {
    myRenderer.render(myScene, myCamera);
    requestAnimationFrame(animate);
}

代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <script src="ThreeJS/three.js"></script>
    <script src="ThreeJS/jquery.js"></script>
</head>
<body>
<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 myMaterial = new THREE.LineBasicMaterial({color: 'blue'});
    var myGeometry = new THREE.Geometry();
    var myArcCurve = new THREE.ArcCurve(0, 0, 40, 0, Math.PI * 2 / 4 * 3);
    var myPoints = myArcCurve.getPoints(1000);
    myGeometry.setFromPoints(myPoints);
    var myArc = new THREE.Line(myGeometry, myMaterial);
    myScene.add(myArc);

    // 渲染圆弧
    animate();

    function animate() {
        myRenderer.render(myScene, myCamera);
        requestAnimationFrame(animate);
    }
</script>
</body>
</html>

演示链接

示例链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/939427.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLO8 改进 009:引入 ASFF 对 YOLOv8 检测头进行优化(适用于小目标检测任务)

论文题目&#xff1a;Learning Spatial Fusion for Single-Shot Object Detection 论文地址&#xff1a;Paper - ASFF 官方源码&#xff1a;GitHub - GOATmessi8/ASFF 简 介 多尺度特征融合是解决多尺度目标检测问题的关键技术&#xff0c;其中 FPN&#xff08;特征金字塔网络…

【数据集】生菜病害检测数据集530张6类YOLO+VOC格式

数据集格式&#xff1a;VOC格式YOLO格式 压缩包内含&#xff1a;3个文件夹&#xff0c;分别存储图片、xml、txt文件 JPEGImages文件夹中jpg图片总计&#xff1a;530 Annotations文件夹中xml文件总计&#xff1a;530 labels文件夹中txt文件总计&#xff1a;530 标签种类数&#…

设计模式2

23中设计模式分类 创建型模式&#xff1a;对象实例化的模式&#xff0c;创建型模式用于解耦对象的实例化过程。&#xff08;对象的创建和对象的使用分离&#xff09; 5种&#xff1a;单例模式、工厂模式、抽象工厂模式、原型模式、建造者模式 结构型模式&#xff1a;把类或对…

CSS边框的样式

边框阴影 让元素更有立体感 img {box-shadow: 2px 10px 5px 20px #ff0000;border-radius: 44px;}语法&#xff1a;box-shadow&#xff1a;值1 值2 值3 值4 值5 值1&#xff1a;水平阴影的位置值2&#xff1a;垂直阴影的位置值3&#xff1a;模糊距离值4&#xff1a;阴影的尺寸…

Spring篇--xml方式整合第三方框架

Spring xml方式整合第三方框架 xml整合第三方框架有两种整合方案&#xff1a; ​ 不需要自定义名空间&#xff0c;不需要使用Spring的配置文件配置第三方框架本身内容&#xff0c;例如&#xff1a;MyBatis&#xff1b; ​ 需要引入第三方框架命名空间&#xff0c;需要使用…

Javascript-web API-day02

文章目录 01-事件监听02-点击关闭广告03-随机点名案例04-鼠标经过或离开事件05-可点击的轮播图06-小米搜索框07-键盘类型事件08-键盘事件-发布评论案例09-focus选择器10-评论回车发布11-事件对象12-trim方法13-环境对象14-回调函数15-tab栏切换 01-事件监听 <!DOCTYPE html…

powershell(1)

免责声明 学习视频来自 B 站up主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下代码、网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 泷羽sec官网&#xff1a;http…

GraphReader: 将长文本结构化为图,并让 agent 自主探索,结合的大模型长文本处理增强方法

GraphReader: 将长文本结构化为图&#xff0c;并让 agent 自主探索&#xff0c;结合的大模型长文本处理增强方法 论文大纲理解为什么大模型和知识图谱不够&#xff1f;还要多智能体 设计思路数据分析解法拆解全流程核心模式提问为什么传统的长文本处理方法会随着文本长度增加而…

如何一站式计算抗体和蛋白信息

在生物医药研究领域&#xff0c;蛋白质&#xff08;抗体、多肽等&#xff09;的性质计算是理解生命机制、分离/纯化/鉴定/生产蛋白、以及开发蛋白新药的重要研究手段。然而&#xff0c;很多相关功能分散在不同的软件中&#xff0c;十分不方便。鹰谷电子实验记录本InELN一站式内…

物理信息神经网络(PINN)八课时教案

物理信息神经网络&#xff08;PINN&#xff09;八课时教案 第一课&#xff1a;物理信息神经网络概述 1.1 PINN的定义与背景 物理信息神经网络&#xff08;Physics-Informed Neural Networks&#xff0c;简称PINN&#xff09;是一种将物理定律融入神经网络训练过程中的先进方…

gitlab初始化+API批量操作

几年没接触gitlab了&#xff0c;新版本装完以后代码提交到默认的main分支&#xff0c;master不再是主分支 项目有几十个仓库&#xff0c;研发提交代码后仓库地址和之前的发生了变化 有几个点 需要注意 1、修改全局默认分支 2、关闭分支保护 上面修改了全局配置不会影响已经创…

【记录50】uniapp安装uview插件,样式引入失败分析及解决

SassError: Undefined variable: "$u-border-color". 表示样式变量$u-border-color没定义&#xff0c;实际是定义的 首先确保安装了scss/sass 其次&#xff0c;根目录下 app.vue中是否全局引入 <style lang"scss">import /uni_modules/uview-ui/in…

STM32CUBEMX+STM32H743ZIT6+MPU+DMA+UART下发指令对MPU配置管理

实现stm32H7的IAP过程&#xff0c;没有想象中的顺利。 需要解决串口DMA和MPU配置管理。 查看正点原子的MPU管理例程&#xff0c;想自己用串口下发指令&#xff0c;实现MPU打开&#xff0c;读取和写入指令。 中间遇到很多坑&#xff0c;比如串口DMA方式下发指令&#xff0c;没反…

8. 数组拼接

题目描述 现在有多组整数数组&#xff0c;需要将它们合并成一个新的数组。合并规则&#xff0c;从每个数组里按顺序取出固定长度的内容合并到新的数组中&#xff0c;取完的内容会删除掉&#xff0c;如果该行不足固定长度或者已经为空&#xff0c;则直接取出剩余部分的内容放到新…

Chrome 浏览器原生功能截长屏

我偶尔需要截取一些网页内容作为素材&#xff0c;但偶尔内容很长无法截全&#xff0c;需要多次截屏再拼接&#xff0c;过于麻烦。所以记录下这个通过浏览器原生功能截长屏的方案。 注意 这种方案并不是百分百完美&#xff0c;如果涉及到一些需要滚动加载的数据或者悬浮区块&am…

学技术学英文:代码中的锁:悲观锁和乐观锁

本文导读&#xff1a; 1. 举例说明加锁的场景&#xff1a; 多线程并发情况下有资源竞争的时候&#xff0c;如果不加锁&#xff0c;会出现数据错误&#xff0c;举例说明&#xff1a; 业务需求&#xff1a;账户余额>取款金额&#xff0c;才能取钱。 时间线 两人共有账户 …

深度学习之目标检测——RCNN

Selective Search 背景:事先不知道需要检测哪个类别,且候选目标存在层级关系与尺度关系 常规解决方法&#xff1a;穷举法&#xff0c;在原始图片上进行不同尺度不同大小的滑窗&#xff0c;获取每个可能的位置 弊端&#xff1a;计算量大&#xff0c;且尺度不能兼顾 Selective …

数字人在虚拟展厅中的应用方向有哪些?

数字人在虚拟展厅中的应用日益丰富&#xff0c;为参观者带来了前所未有的互动体验。以下是数字人在虚拟展厅中的几大主要应用方向&#xff1a; 1. 智能导览与讲解 在虚拟展厅中&#xff0c;数字人以其独特的魅力担任着导览员的角色。它们不仅为参观者提供精准的信息和指引&am…

WEB开发: 全栈工程师起步 - Python Flask +SQLite的管理系统实现

一、前言 罗马不是一天建成的。 每个全栈工程师都是从HELLO WORLD 起步的。 之前我们分别用NODE.JS 、ASP.NET Core 这两个框架实现过基于WebServer的全栈工程师入门教程。 今天我们用更简单的来实现&#xff1a; Python。 我们将用Python来实现一个学生管理应用&#xff0…

【我的 PWN 学习手札】IO_FILE 之 stdin任意地址写

我们知道&#xff0c;stdin会往“缓冲区”先读入数据&#xff0c;如果我们劫持这个所谓“缓冲区”到其他地址呢&#xff1f;是否可以读入数据到任意地址&#xff1f;答案是肯定的。 注意&#xff01;代码中的“-------”分隔&#xff0c;是为了区分一条调用链上不同代码片段&am…