图形化开发(五)011-Three.js之Geometry几何体——立方体、圆形、圆锥

图形化开发(五)011-Three.js之Geometry几何体——立方体、圆形、圆锥

Geometry几何体

一个模型是由几何体Geometry和材质material组成。Three.js内置了很多的几何体种类,如:立方体、三棱锥、球、八面体、十二面体、二十面体等等,这一节我们将介绍一下这些类型几何体的模型创建和几何体的通用方法。

Geometry和BufferGeometry

当前Three.js内置了这两种几何体类型Geometry和BufferGeometry,这两个几何体类型都是用于存储模型的顶点位置、面的索引、法向量、颜色、uv纹理以及一些自定义的属性。

它们两个的区别是

  • Geometry
    • 使用了Three.js提供的THREE.Vector3或者THREE.Color这样的对象来存储数据
    • 易与阅读和编辑
    • 性能弱一些
    • 适合动画场景
  • BufferGeometry
    • 存储数据原始
    • 不易阅读和编辑
    • 性能好
    • 适合存储一些放入场景内不需要再额外操作的模型
互转

两种几何体类型可以互转,所以,不要害怕现在使用的是那种。

BufferGeometry转换成Geometry

//实例化一个Geometry对象
var geo = new THREE.Geometry(); 
//调用对象的fromBufferGeometry方法,并将需要转换的bufferGeometry传入
geo.fromBufferGeometry(bufferGeometry);
//geo为转换转换成的Geometry

Geometry转换成BufferGeometry

//实例化一个BufferGeometry对象
var bufferGeo = new THREE.BufferGeometry(); 
//调用对象的fromGeometry方法,并将需要转换的geometry传入
bufferGeo.fromGeometry(geometry);
//bufferGeo为geometry转换成的BufferGeometry
立方体

WebGL里面,所有的模型都是通过三角形面组成。

创建
var geometry = new THREE.BoxGeometry( 1, 1, 1 );
var material = new THREE.MeshBasicMaterial( {color: 0x00ff00} );
var cube = new THREE.Mesh( geometry, material );
scene.add( cube );
构造函数
BoxGeometry(width : 浮点类型, height : 浮点类型, depth : 浮点类型, widthSegments : 整数类型, heightSegments : 整数类型, depthSegments : 整数类型)

width — 沿x轴的宽度,默认值为1
height — 沿y轴的高度,默认值为1
depth — 沿z轴的深度,默认值为1
widthSegments — 可选,沿着边的宽度的分割面的数量。默认值为1
heightSegments — 可选,沿着边的高度的分割面的数量。默认值为1
depthSegments — 可选,沿着边的深度的分割面的数量。缺省值是1

widthSegments,heightSegments,depthSegments这三个参数有点类似切西瓜,分别朝3个方向将几何体切成一块一块。

在线示意:

https://threejs.org/docs/scenes/geometry-browser.html#BoxGeometry

比如我们要将西瓜切成小块,必须朝三个方向切才行。

在这里插入图片描述

在这里插入图片描述

圆形

圆形是由多个三角形分段构成,这些三角形分段围绕一个中心点延伸并且延伸到给定半径以外。

创建
var geometry = new THREE.CircleGeometry( 5, 32 );
var material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
var circle = new THREE.Mesh( geometry, material );
scene.add( circle );
构造函数
CircleGeometry(radius : 浮点类型, segments : 整数类型, thetaStart : 浮点类型, thetaLength : 浮点类型)

radius — 圆的半径,默认值为1
segments — 段数(三角形),最小值为3,默认值为8
thetaStart — 第一段的起始角度,默认值为0
thetaLength — 圆形扇形的中心角,通常称为theta。默认值是2 * Pi,画出一个整圆

在线示意

https://threejs.org/docs/scenes/geometry-browser.html#CircleGeometry

圆锥
创建
var geometry = new THREE.ConeGeometry( 5, 20, 32 );
var material = new THREE.MeshBasicMaterial( {color: 0xffff00} );
var cone = new THREE.Mesh( geometry, material );
scene.add( cone );
构造函数
ConeGeometry(radius : 浮点类型, height : 浮点类型, radialSegments : 整数类型, heightSegments : 整数类型, openEnded : 布尔类型, thetaStart : 浮点类型, thetaLength : 浮点类型)

radius — 底部圆锥的半径,默认值为1。
height — 圆锥体的高度,默认值为1。
radialSegments — 圆锥周围的分段面数,默认值为8。
heightSegments — 沿圆锥体高度的面的行数,默认值为1。
openEnded — 圆锥体底部是是隐藏还是显示,默认值为false,显示。
thetaStart — 第一段的起始角度,默认值是0(Three.js的0度位置)。
thetaLength — 圆形扇形的中心角,通常称为theta。默认值是2 * Pi,画出一个整圆

在线示意

— 圆锥体底部是是隐藏还是显示,默认值为false,显示。
thetaStart — 第一段的起始角度,默认值是0(Three.js的0度位置)。
thetaLength — 圆形扇形的中心角,通常称为theta。默认值是2 * Pi,画出一个整圆

在线示意

https://threejs.org/docs/scenes/geometry-browser.html#ConeGeometry

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
three.js是一个用于创建3D图形的JavaScript库。它提供了丰富的功能和工具,可以轻松地在Web浏览器中创建交互式的3D场景和动画效果。 渐变圆边立方体是指一个立方体,其边缘呈现出渐变的圆形效果。在three.js中,可以通过以下步骤来创建渐变圆边立方体: 1. 创建一个立方体几何体(BoxGeometry)并设置其大小和位置。 2. 创建一个渐变材质(MeshBasicMaterial)并设置其颜色属性为渐变色。 3. 将几何体和材质结合起来创建一个网格(Mesh)对象。 4. 将网格对象添加到场景中。 5. 创建一个渲染器(WebGLRenderer)并将其连接到HTML文档中的一个元素上。 6. 在每一帧中更新场景和相机,并使用渲染器进行渲染。 下面是一个示例代码,展示了如何使用three.js创建一个渐变圆边立方体: ```javascript // 创建场景 var scene = new THREE.Scene(); // 创建相机 var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); camera.position.z = 5; // 创建渲染器 var renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); // 创建立方体几何体 var geometry = new THREE.BoxGeometry(1, 1, 1); // 创建渐变材质 var material = new THREE.MeshBasicMaterial({ color: new THREE.Color(0xff0000), // 起始颜色 vertexColors: THREE.VertexColors // 使用顶点颜色 }); // 设置顶点颜色 geometry.faces.forEach(function(face) { var color = new THREE.Color(Math.random(), Math.random(), Math.random()); face.vertexColors.push(color, color, color); }); // 创建立方体网格 var cube = new THREE.Mesh(geometry, material); // 将立方体添加到场景中 scene.add(cube); // 渲染函数 function render() { requestAnimationFrame(render); // 旋转立方体 cube.rotation.x += 0.01; cube.rotation.y += 0.01; // 渲染场景和相机 renderer.render(scene, camera); } // 开始渲染 render(); ``` 这是一个基本的示例,你可以根据自己的需求进行修改和扩展。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值