首页 > 其他分享 >Three.js教程:访问几何体对象的数据

Three.js教程:访问几何体对象的数据

时间:2023-05-06 14:45:30浏览次数:48  
标签:geometry THREE js Three 顶点 100 几何体 BoxGeometry

推荐:将NSDT场景编辑器加入你的3D工具链
其他系列工具:NSDT简石数字孪生

访问几何体对象的数据

实际开发项目的时候,可能会加载外部模型,有些时候需要获取模型几何体的顶点数据,如果想获取几何体的顶点数据首先要熟悉three.js几何体BoxGeometryBufferGeometry的结构。

访问几何体顶点数据其实很简单,刚开始学习不用刻意记忆,直接查看threejs文档,就像访问javascript对象的属性一样。

测试BoxGeometry

调用BoxGeometry创建一个立方体,执行THREE.BoxGeometry构造函数会自动生成几何体对象的顶点位置坐标、顶点法向量等数据。

你可以通过执行下面代码,然后查看浏览器控制台打印的数据

var geometry = new THREE.BoxGeometry(100, 100, 100); //创建一个立方体几何对象Geometry
console.log(geometry);
console.log('几何体顶点位置数据',geometry.vertices);
console.log('三角行面数据',geometry.faces);

BoxGeometryPlaneGeometrySphereGeometry等几何体类的基类是Geometry,所以访问这些几何体的顶点数据,不知道具体属性名称,可以查问threejs文档Geometry

测试PlaneBufferGeometry

PlaneBufferGeometry表示一个矩形平面几何体,执行下面代码,你可以查看该几何体的相关顶点数据。

//创建一个矩形平面几何体
var geometry = new THREE.PlaneBufferGeometry(100, 100);
console.log(geometry);
console.log('几何体顶点位置数据',geometry.attributes.position);
console.log('几何体索引数据',geometry.index);

BoxBufferGeometryPlaneBufferGeometrySphereBufferGeometry等几何体类的基类是BufferGeometry,所以访问这些几何体的顶点数据,不知道具体属性名称,可以查问threejs文档BufferGeometry

案例

通过下面代码修改BoxGeometry的三角形顶点颜色的数据,可以渲染出来如下效果。

var geometry = new THREE.BoxGeometry(100, 100, 100); //创建一个立方体几何对象Geometry
// 遍历几何体的face属性
geometry.faces.forEach(face => {
  // 设置三角面face三个顶点的颜色
  face.vertexColors = [
    new THREE.Color(0xffff00),
    new THREE.Color(0xff00ff),
    new THREE.Color(0x00ffff),
  ]
});
var material = new THREE.MeshBasicMaterial({
  // color: 0x0000ff,
  vertexColors: THREE.FaceColors,
  // wireframe:true,//线框模式渲染
}); //材质对象Material

案例

你可以通过下面代码删除立方体部分三角形面,测试删除效果。

var geometry = new THREE.BoxGeometry(100, 100, 100); //创建一个立方体几何对象Geometry
// pop():删除数组的最后一个元素   shift:删除数组的第一个元素
geometry.faces.pop();
geometry.faces.pop();
geometry.faces.shift();
geometry.faces.shift();
var material = new THREE.MeshLambertMaterial({
  color: 0x0000ff,
  side: THREE.DoubleSide, //两面可见
}); //材质对象Material

访问外部模型几何体顶点数据

Threejs加载外部模型的时候,会把几何体解析为缓冲类型几何体BufferGeometry,所以访问外部模型几何体顶点数据,可以查看文档BufferGeometry。关于外部模型加载的讲解可以查看课程第14章。

3D建模学习工作室    

上一篇:Three.js教程:Face3对象定义Geometry的三角形面 (mvrlink.com)

下一篇:Three.js教程:几何体旋转、缩放、平移变换 (mvrlink.com)

标签:geometry,THREE,js,Three,顶点,100,几何体,BoxGeometry
From: https://www.cnblogs.com/mvrlink/p/17377251.html

相关文章

  • Module build failed (from ./node_modules/css-loader/dist/cjs.js): TypeError: thi
    Modulebuildfailed(from./node_modules/css-loader/dist/cjs.js):TypeError:this.getOptionsisnotafunctionModulebuildfailed(from./node_modules/css-loader/dist/cjs.js):TypeError:this.getOptionsisnotafunction 用了各种办法,没有解决问题,直接把node_m......
  • 快速上手UmiJs
    先找个地方建个空目录mkdirmyapp&&cdmyapp通过官方工具创建项目yarncreate@umijs/umi-app#或npx@umijs/umi-appCopy:.editorconfigWrite:.gitignoreCopy:.prettierignoreCopy:.prettierrcWrite:.umirc.tsCopy:mock/.gitkeepWrite:package.json......
  • web------JSF ----2
    JSF简介一、 什么是JSF:JavaServerFaces(JSF)是一种用于构建Web应用程序的新标准Java框架。它提供了一种以组件为中心来开发JavaWeb用户界面的方法,从而简化了开发。JavaServerFaces于2004年三月1.0版正式提出,清楚的将Web应用程序的开发者划分......
  • shell jq处理json字符串
    1.1工具介绍自己用shell处理json字符串的时候,开发输入格式的不通会导致解析字符串有问题,所以这里用到了jq工具jq是一款命令行下处理JSON数据的工具。其可以接受标准输入,命令管道或者文件中的JSON数据,经过一系列的过滤器(filters)和表达式的转后形成我们需要的数据结构并将......
  • 使用Node.js调用Sqlite3模块写的大数据查询接口
    使用Node.js调用Sqlite3模块写的大数据查询接口constsqlite3=require('sqlite3');consthttp=require('http');consturl=require('url');constSqliteDb=async(dbFile)=>{constpri={};pri.db=newsqlite3.Database(dbFile);......
  • Ganymed-SSH2和JSch的区别及优缺点
    Ganymed-SSH2和JSch都是Java中用于实现SSH客户端的库。下面是它们的区别及优缺点:区别:Ganymed-SSH2:Ganymed-SSH2是一款轻量级的SSH-2实现,它提供了简单易用的API,支持SSH客户端和服务器端的开发。Ganymed-SSH2主要使用纯Java编写,可以在所有支持Java的平台上运行,不需要任何本地库或......
  • struts2+Spring+Hibernate+Jquery (json)
          Struts2文件的上传和下载http://wing929.javaeye.com/blog/216118基于struts+spring+hibernate+jquery的jmesa的分页实现样例http://wing929.javaeye.com/blog/216292http://hi.baidu.com/angel_lishiwen/blog/item/cf266627fcb59327d4074288.html stru......
  • Struts2+extjs (Json)
            web开发过程中,经常需要使用Ajax进行数据的交互。ExtJs表单提交默认使用异步的方式,若使用Struts2的Action进行数据的处理,则需要返回一个Json数据客户端才会收到服务器的处理结果,我们使用jsonplugin插件从Action中返回结果给用户,下面我们就来实现这一方法: 1、下......
  • struts2 + extjs
     extjs整合struts2:要导入的包很重要,很多demo就是没有说清楚这个,导致无法安装他们的博文进行演示。那么接下去,就简单了。struts.xml的配置Xml代码1.<?xmlversion="1.0"encoding="UTF-8"?>2.<!DOCTYPEstrutsPUBLIC3."-//ApacheSoftwareFoundation//D......
  • servlet + Extjs + ext.ajax.request(亲测可用)
     1.js代码 Ext.onReady(function(){Ext.Ajax.request({url:"AjaxServlet.do?name=里杂谈",//url:"AjaxServlet.do",method:"get",//params:{name:"xxx"},suc......