首页 > 其他分享 >Three.js入门-常见几何体

Three.js入门-常见几何体

时间:2024-11-30 22:55:07浏览次数:7  
标签:默认值 const geometry THREE js Three new 几何体

这章节,我们将介绍 Three.js 中常见的几何体(Geometry),包括立方体、球体、圆柱体、平面、圆环、圆锥体等。几何体是构建 3D 模型的基础元素,通过不同的几何体可以创建出各种形状的物体。

在 Three.js 中,几何体是由顶点、面、法线等数据组成的,通过材质(Material)的渲染,可以将几何体显示在屏幕上。不同的几何体有不同的属性和用途,可以根据需求选择合适的几何体来构建 3D 场景。

1. BoxGeometry(立方体几何体)

函数

THREE.BoxGeometry(
  width,
  height,
  depth,
  widthSegments,
  heightSegments,
  depthSegments
);

参数

  • width:立方体的宽度(默认为 1)。
  • height:立方体的高度(默认为 1)。
  • depth:立方体的深度(默认为 1)。
  • widthSegments:水平分段数(默认为 1)。
  • heightSegments:垂直分段数(默认为 1)。
  • depthSegments:深度分段数(默认为 1)。
const geometry = new THREE.BoxGeometry(5, 5, 5); // 创建一个宽为5、高为5、深为5的立方体
const material = new THREE.MeshStandardMaterial({ color: 0x00ff00 }); // 创建支持灯光的绿色材质
const cube = new THREE.Mesh(geometry, material); // 将几何体和材质组合成网格物体
scene.add(cube); // 将立方体添加到场景中

file

2. SphereGeometry(球体几何体)

  • 函数
THREE.SphereGeometry(
  radius,
  widthSegments,
  heightSegments,
  phiStart,
  phiLength,
  thetaStart,
  thetaLength
);
  • 参数
    • radius:球体的半径(默认值为 1)。
    • widthSegments:球体的经度分段数,越大越平滑(默认值为 8)。
    • heightSegments:球体的纬度分段数,越大越平滑(默认值为 6)。
    • phiStart:开始的经度角度(默认为 0)。
    • phiLength:经度的弧长(默认为 Math.PI * 2)。
    • thetaStart:开始的纬度角度(默认为 0)。
    • thetaLength:纬度的弧长(默认为 Math.PI)。
const geometry = new THREE.SphereGeometry(5, 32, 32); // 创建半径为5的球体,32段纬度和经度
const material = new THREE.MeshStandardMaterial({ color: 0x0000ff }); // 创建蓝色材质
const sphere = new THREE.Mesh(geometry, material); // 创建球体物体
scene.add(sphere); // 将球体添加到场景中

file

3. CylinderGeometry(圆柱体几何体)

函数

THREE.CylinderGeometry(
  radiusTop,
  radiusBottom,
  height,
  radialSegments,
  heightSegments,
  openEnded,
  thetaStart,
  thetaLength
);

参数

  • radiusTop:圆柱顶部的半径(默认值为 1)。
  • radiusBottom:圆柱底部的半径(默认值为 1)。
  • height:圆柱的高度(默认值为 1)。
  • radialSegments:圆柱的圆周分段数(默认值为 8)。
  • heightSegments:圆柱的垂直分段数(默认值为 1)。
  • openEnded:是否是开口的圆柱(默认为 false)。
  • thetaStart:开始的角度(默认为 0)。
  • thetaLength:角度的弧长(默认为 Math.PI * 2)。
const geometry = new THREE.CylinderGeometry(3, 3, 10, 32); // 创建半径为3,高度为10的圆柱体
const material = new THREE.MeshStandardMaterial({ color: 0xff0000 }); // 创建红色材质
const cylinder = new THREE.Mesh(geometry, material); // 创建圆柱体物体
scene.add(cylinder); // 将圆柱体添加到场景中

file

4. PlaneGeometry(平面几何体)

函数

THREE.PlaneGeometry(width, height, widthSegments, heightSegments);

参数

  • width:平面的宽度(默认值为 1)。
  • height:平面的高度(默认值为 1)。
  • widthSegments:平面的水平分段数(默认值为 1)。
  • heightSegments:平面的垂直分段数(默认值为 1)。
  • side:平面材质的显示面,THREE.FrontSide(正面),THREE.BackSide(背面),THREE.DoubleSide(两面)。
const geometry = new THREE.PlaneGeometry(10, 10); // 创建宽为10,高为10的平面
const material = new THREE.MeshStandardMaterial({
  color: 0x00ffff,
  side: THREE.DoubleSide,
}); // 创建青色材质,双面渲染
const plane = new THREE.Mesh(geometry, material); // 创建平面物体
scene.add(plane); // 将平面添加到场景中

file

5. TorusGeometry(圆环几何体)

函数

THREE.TorusGeometry(radius, tube, radialSegments, tubularSegments, arc);

参数

  • radius:圆环的主半径(默认值为 1)。
  • tube:圆环的管道半径(默认值为 0.4)。
  • radialSegments:圆环的径向分段数(默认值为 8)。
  • tubularSegments:管道的圆周分段数(默认值为 6)。
  • arc:圆环的弧度范围(默认为 Math.PI * 2)。
const geometry = new THREE.TorusGeometry(5, 1, 16, 100); // 创建半径为5,管道半径为1的圆环
const material = new THREE.MeshStandardMaterial({ color: 0xffff00 }); // 创建黄色材质
const torus = new THREE.Mesh(geometry, material); // 创建圆环体
scene.add(torus); // 将圆环体添加到场景中

file

6. ConeGeometry(圆锥体几何体)

函数

THREE.ConeGeometry(
  radius,
  height,
  radialSegments,
  heightSegments,
  openEnded,
  thetaStart,
  thetaLength
);

参数

- `radius`:圆锥底部的半径(默认值为 1)。
- `height`:圆锥的高度(默认值为 1)。
- `radialSegments`:圆锥底部的分段数(默认值为 8)。
- `openEnded`:是否是开口的圆锥(默认为 `false`)。
- `thetaStart`:圆锥开始的角度(默认为 0)。
- `thetaLength`:圆锥的角度弧长(默认为 Math.PI * 2)。
const geometry = new THREE.ConeGeometry(5, 10, 32); // 创建半径为5,高度为10的圆锥
const material = new THREE.MeshStandardMaterial({ color: 0xff00ff }); // 创建紫色材质
const cone = new THREE.Mesh(geometry, material); // 创建圆锥物体
scene.add(cone); // 将圆锥添加到场景中

file

7. Custom Geometry(自定义几何体)

函数

THREE.BufferGeometry();

参数THREE.BufferGeometry 是一个高级构造器,允许你手动指定顶点数据和其他几何信息。常见的自定义属性包括:

- `position`:顶点的位置数据。
- `normal`:法线数据。
- `uv`:纹理坐标数据。
const geometry = new THREE.BufferGeometry();
const vertices = new Float32Array([
  0,
  0,
  0, // 顶点1
  1,
  0,
  0, // 顶点2
  0,
  1,
  0, // 顶点3
]);
geometry.setAttribute("position", new THREE.BufferAttribute(vertices, 3)); // 设置顶点数据
const material = new THREE.MeshStandardMaterial({ color: 0x00ff00 }); // 创建材质
const mesh = new THREE.Mesh(geometry, material); // 创建网格物体
scene.add(mesh); // 添加到场景

file

8. 总结

  • 在 Three.js 中,几何体是构建 3D 模型的基础元素。通过组合不同的几何体,可以构建出更复杂的物体。对不同几何体的熟悉和应用,可以帮助我们快速构建 3D 场景。
  • 除了标准几何体外,BufferGeometry 提供了更强的定制能力,可以满足更复杂的需求。
  • 通过调整不同几何体的细节(如分段数、参数等),可以在性能和渲染效果之间找到平衡。

Three.js学习:https://www.threejs3d.com/

标签:默认值,const,geometry,THREE,js,Three,new,几何体
From: https://www.cnblogs.com/zsboy/p/18579087

相关文章

  • 2019-8-29-02-JS-DOM
    图片轮播是Web开发中最常见的组件之一,这是一篇用原生JavaScript实现简单图片轮播的教程。要实现图片轮播,首先我们要将图片轮播拆分为图片容器、图片、上一页按钮、下一页按钮、底部点选容器、底部点选按钮。下面我们用HTML代码表示。...<divid="page"><divid="Container......
  • 48. Web前端网页案例——【王者荣耀游戏主题网页( 6页)】 大学生期末大作业 html5+css3+
    目录一、网页概述二、网页文件 三、网页效果四、代码展示1.html2.CSS3.JS五、总结1.简洁实用2.使用方便3.整体性好4.形象突出5.交互式强六、更多推荐♬♬♬​​​​​​​欢迎光临我的CSDN!这里是Web前端网页案例大集汇,有各行各业的前端网页案例,每天会持续更......
  • js逆向实战之某某查响应数据解密
    声明:本篇文章仅用于知识分享,不得用于其他用途网址:https://www.hanghangcha.com/securities-data解密逻辑看流量包,响应数据明显是加过密的。第一反应是去搜索interceptors,主要看响应拦截器,两处都没有。搜url关键字,只有一处。打断点,调试一番,发现没有跟解密相关的代码,行不......
  • Nuxt.js 应用中的 render:html 事件钩子
    title:Nuxt.js应用中的render:html事件钩子date:2024/11/30updated:2024/11/30author:cmdragonexcerpt:在构建HTML内容时,能够对其进行动态修改是非常有用的。render:html钩子为开发者提供了在HTML被构建之前的最后机会去调整内容。这对于自定义渲染行为、注入......
  • node.js毕设健身房预约管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于健身房预约管理系统的研究,现有研究主要以传统的健身房运营管理为主,专门针对健身房预约管理系统的研究较少。在国内外,健身房行业发展迅速,但随着会员......
  • node.js毕设露营活动装备租赁系统 程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容选题背景关于露营活动装备租赁系统的研究,现有研究多集中在露营地本身的管理或一般性租赁业务的运营模式上,专门针对露营活动装备租赁系统的研究较少。在国内外,露营产......
  • 纯js轻量级图片放大显示插件
    在线演示  下载lightense-images是一款可以将缩略图片在屏幕中间放大显示的纯JS插件。该图片放大插件的效果类似于Medium.com上的图片放大预览效果。它的特点有:轻量级,压缩后的版本仅2KB。点击缩略图后,以lightbox的方式来显示放大图片。可以自定义背景遮罩层的颜色和透......
  • fallingsnow.js-jquery下雪动画特效
    fallingsnow.js是一款小巧的jquery下雪动画特效插件。该jquery下雪动画特效兼容ie8浏览器,它会控制雪花的飘落速度,雪花的尺寸越小,下落的速度越慢,可以制作出雪花飞舞的视觉差效果。在线演示 下载 使用方法在页面中引入jquery.fallingsnow.css和jquery、jquery.fallingsnow.m......
  • Vue.js 组件开发
    代码、提高代码复用性以及构建复杂的用户界面。今天,我们就一起来深入学习Vue.js组件开发的相关知识。一、什么是Vue.js组件概念:Vue.js组件可以看作是页面中的一个个独立的、可复用的小块。就好比搭积木一样,每个组件都是一块有着特定功能和外观的积木块,我们可以通过组合......
  • 使用NodeJS搭建简易服务器
    什么是NodeJSNode.js基于Chrome浏览器的V8引擎,是一个JavaScript运行时环境。简单来说,Node.js提供了一个能够对JavaScript代码进行编译和执行的环境,同时Node.js还提供了一系列内置的API,使得开发者可以使用JavaScript进行后端开发。这些API涵盖了文件系统操作、......