图形化开发(五)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

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

  1. 图形化开发(五)021-Three.js之材质——不受光影响-MeshBasicMaterial-同颜色MeshNormalMaterial-方向不同颜色LineBasicMaterial线条材质

    图形化开发(五)021-Three.js之材质--不受光影响-MeshBasicMaterial-整个物体颜色一样&MeshNormalMaterial-方向不同自动改变颜色 & Li ...

  2. 图形化开发(五)022-Three.js之材质——受光影响-MeshLambertMaterial 兰伯特材质 MeshPhongMaterial 高光材质

    图形化开发(五)022-Three.js之材质--受光影响-MeshLambertMaterial 兰伯特材质 & MeshPhongMaterial 高光材质 添加光 由于MeshBasic ...

  3. 图形化开发(一)——Three.js基本介绍-优缺点-在线编辑器 Babylon.JS是最好的JavaScript3D游戏引擎

    图形化开发(一)--Three.js基本介绍-优缺点-在线编辑器 & Babylon.JS是最好的JavaScript3D游戏引擎 课程主要学习目标 Threejs ( 3d ) D3 (做数 ...

  4. 图形化开发(六)01-Three.js之导入模型——3dmax和SketchUp-editor编辑器导出json文件,在创建模型initMesh中外部的JSON文件

    图形化开发(六)01-Three.js之导入模型--3dmax和SketchUp-editor编辑器导出json文件,在创建模型initMesh中外部的JSON文件 导入模型 官方推荐我们使用的3D模 ...

  5. 图形化开发(一)——D3.js的基本介绍、技术原理

    图形化开发(一)--D3.js的基本介绍.技术原理 D3.js 为什么学习D3 中文官网--https://www.d3js.org.cn/ github--https://github.com/d3 ...

  6. Arduino的图形化开发环境: ArduBlock

    转载自http://youngmakers.cn/groups/articles/54f9466b9835fed6656d4dd6 ArduBlock是一款为Arduino设计的开源图形化编程软件,由 ...

  7. 【MSP430G2553】图形化开发笔记(2) 系统时钟和低功耗模式

    目录 系统时钟概述 BCS+模块单元的基本构造 时钟-概览 介绍 Basic User 模式 Power User 模式 1. 数控振荡器 DCO 2. 出厂预校正频率 3. 低频振荡器 VLO 4. ...

  8. python 图形化开发用什么模块_用python进行GUI开发的选择/python的GUI模块(图形界面开发库)...

    Python最大的特点就在于她的快速开发功能.作为一种胶水型语言,python几乎可以渗透在我们编程过程中的各个领域.这里我简单介绍一下用python进行gui开发的一些选择. 1.Tkinter T ...

  9. pyqt5 不报错退出_最新版本Python图形化开发环境Anaconda(Python3.7) +PyQT5+Eric6

    Anaconda是完全免费的企业级的Python发行大规模数据处理.预测分析和科学计算工具.Anacoda是Python科学技术包的合集,所以不同的包所遵循的协议不一样.PyQt5与Eric6是众所周 ...

  10. 微信小程序开发(五) - 全局(app.js)逻辑 - js 文件

    微信小程序中使用的逻辑文件 ,本质上还是.js 文件,脚本中的很多东西进行了二次封装,本质上可以在外部调试中,查看 逻辑层(App Service) 小程序开发框架的逻辑层由 JavaScript 编 ...

最新文章

  1. c# 调用SQL Server存储过程返回值(转)
  2. Docker 容器技术 — 软件架构
  3. Django restful framework之 rest接口设计规范
  4. .NET Core 服务在 ARM64 服务器中的部署
  5. 洛谷 P2040 打开所有的灯-dfs
  6. java时间聚类_mongodb 按照时间聚类 java
  7. 绝佳的ASR学习方案:这是一套开源的中文语音识别系统
  8. 这视频里的人真是帅爆了!
  9. 设计模式 ( 六 ) 建造者模式
  10. linux下载jdk
  11. html如何设定页面4秒后自动跳转,js定时三秒后自动跳转页面
  12. linux如何备份内核,Linux 中我该如何备份系统
  13. kronecker积与hadamard积
  14. DBL_EPSILON和 FLT_EPSILON
  15. 容联智能云联络中心携手学而思 助力在线教育高速成长
  16. 亚马逊QA是什么意思?
  17. 一般通话记录能保存多少条_电话的通话记录可以保存多久
  18. 第四代计算机网络是高速互联的什么网,宽带接入网竞赛试题(选择题300道,判断题150道,填空题250道)...
  19. 计算机,计算器二进制小数计算如何避免进制转换造成的误差
  20. 成都星志远:拼多多店铺领航员指标有哪些?

热门文章

  1. 使用合取范式进行整数规划建模的方法
  2. 麦氏细菌浊度分析仪的校准物质选择
  3. vs2015升级旧工程报snprintf已有主体及“int8_t” 重定义
  4. 漂亮的网络验证php源码,好用的冰心php网络验证和源码例子
  5. postgres 坐标_用postgreSQL做基于地理位置的app(zz)
  6. echars折线图y轴自定义数值会被转换为整数的问题
  7. Various Image/Video Caption(视觉字幕化新任务)
  8. ORACLE解析SOAPXML报文,xmltype extractvalue extract LPX-00210 中文乱码
  9. 神奇的魔法师——教你在手机上如何一键创建相册
  10. 一个简单的出货补货网页php