threejs创建平面几何形状

创建平面几何形状

平面几何形状有三种:点,线,面三种,下面说说用threejs创建这几种形状的方法。

创建点

创建点可以使用Points类。

function createPoints(){//创建一个Geometry,并添加点let geometry = new THREE.Geometry();geometry.vertices.push(new THREE.Vector3(0,0,0));geometry.vertices.push(new THREE.Vector3(15,15,0));geometry.vertices.push(new THREE.Vector3(-15,2,0));//使用PointsMaterial,记得加上size属性,用来设置点的大小let material = new THREE.PointsMaterial({color:0xff0000,size:4});let points = new THREE.Points(geometry,material);return points;
}

默认情况下,点是一个正方形,当然,也可以使用材质,改变点的形状,如下:

function createShapePoints(){//创建一个圆形的材质,记得一定要加上texture.needsUpdate = true;let canvas = document.createElement("canvas");canvas.width = 100;canvas.height = 100;let context = canvas.getContext("2d");context.fillStyle = "#ffff00";context.arc(50,50,45,0,2*Math.PI);;context.fill();let texture = new THREE.Texture(canvas);texture.needsUpdate = true;//创建点,是用PointsMaterial的map属性来设置材质let geometry = new THREE.Geometry();geometry.vertices.push(new THREE.Vector3(0,0,0));geometry.vertices.push(new THREE.Vector3(15,15,0));geometry.vertices.push(new THREE.Vector3(-15,2,0));let material = new THREE.PointsMaterial({color:0xff0000,size:4,map:texture});let points = new THREE.Points(geometry,material);return points;
}

效果如图:

注意,既然点可以使用材质,那么点其实可以表示任何形状,从这个意义上讲,点也是一个平面。

创建线

可以使用Line创建线:

function createLine(){let geometry = new THREE.Geometry();geometry.vertices.push(new THREE.Vector3(15,15,0));geometry.vertices.push(new THREE.Vector3(-15,2,0));let material = new THREE.LineBasicMaterial({color:0xff0000}); //注意这里使用的是LineBasicMateriallet line = new THREE.Line(geometry,material);return line;
}

使用LineSegments创建虚线:

function createDashedLine(){let geometry = new THREE.Geometry();geometry.vertices.push(new THREE.Vector3(15,15,0));geometry.vertices.push(new THREE.Vector3(-15,2,0));geometry.computeLineDistances();  //注意加上这句let material = new THREE.LineDashedMaterial({color:0xff0000,dashSize:3,gapSize:2,lineWidth:1 });let line = new THREE.LineSegments(geometry,material);return line;
}

其中,LineDashedMaterial的属性dashSize和gapSize分别制定线段的长度和间隔的长度。注意一开始不要设得太大,否则整条虚线就只有一个线段,那你看到的就是一条直线了。创建效果如图:

创建面

ShapeGeometry

要创建面可以使用ShapeGeometry。面的形状是可以任意的,threejs用路径来画形状,并且提供了shape类来帮助我们创建形状。下面使用ShapeGeometry来创建一个圆弧:

function createArc(){//通过Shape来创建圆弧这个形状,而Shape是通过定义路径来定义形状的let shape = new THREE.Shape();shape.absarc( 0, 0, 40, 0/180*Math.PI ,45/180*Math.PI, false );//做为ShapeGeometry的参数let arcGeometry = new THREE.ShapeGeometry(shape);let arcMaterial = new THREE.LineBasicMaterial({color:0xff0000});let arc = new THREE.Line(arcGeometry,arcMaterial);return arc;
}

效果如下:

注意,图中红色的部分才是我们创建的,其它是辅助线。

当然,也可以创建一个扇形,如下:

function createArc(){let shape = new THREE.Shape();shape.absarc( 0, 0, 40, 0/180*Math.PI ,45/180*Math.PI, false );shape.lineTo(0,0); //(1)做一条线到圆心let arcGeometry = new THREE.ShapeGeometry(shape);//(2)使用网格模型来表示arcMaterial = new THREE.MeshBasicMaterial({color:0xff0000});arc = new THREE.Mesh(arcGeometry,arcMaterial);return arc ;
}

效果如下:

shape 类还有很多方法,可以创建各种形状,请参考其父类【path对象】

CircleGeometry

threejs提供这个类用于创建2维的圆形或扇形。

function createArc(){let geometry = new THREE.CircleGeometry(30,10,0,45/180*Math.PI);let material = new THREE.LineBasicMaterial({color:0xff0000});let arc = new THREE.Line(geometry,material);return arc;
}

效果如下:

可以看到多了一条线,可以将Geometry的第一个点删掉即可:

function createArc(){let geometry = new THREE.CircleGeometry(30,80,0,360/180*Math.PI);** geometry.vertices.shift(); //添加这句**let material = new THREE.LineBasicMaterial({color:0xff0000});let arc = new THREE.Line(geometry,material);return arc;
}

PlaneGeometry

PlaneGeometry可以创建2维矩形:

function createRect(){let geometry = new THREE.PlaneGeometry(10,10);let material = new THREE.MeshBasicMaterial({color:0x00ff00});let rect = new THREE.Mesh(geometry,material);return rect;
}

效果如图:

总之,Geometry是点集,各种Geometry只是为了更方便的创建各种形状的点集。


持续更新,请看【这里】

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新建vue3项目(未完待续)

vite 官网 https://cn.vitejs.dev/ 使用 vite 创建项目 npm create vitelatest 进入目录后 执行 npm install 运行程序 npm run dev vscode 不要同时安装 vetur 和 volar 关于安装eslint 官网 :https://eslint.org 安装ESLINT npm install eslint …

wcf 返回图片_wcf http 返回图片

做项目时候用wcf 返回图片,从官网上找了找一次只能返回一张图片,但是一直查不到返回多个图片的方法,ios 可以异步加载看速度也可以,先记录一下等以后用解决了再发[ServiceContract]public interface IImageServer{[OperationContract, WebGet…

threejs精灵(Sprite)

Sprite精灵 Sprite叫精灵,计算机图形学中,精灵指包含于场景中的二维图像或动画(wiki)。在threejs中,这样说明Sprtite(doc) : A sprite is a plane that always faces towards the camera , ge…

Ubuntu更改鼠标灵敏度

需要命令:xinput 清自行用 man xinput 查询 xinput 帮助文档 1、插入鼠标,打开终端,输入命令:xinput 查询当前已挂在设备 2、拔出鼠标,打开终端,再输入命令:xinput 查询当前已挂在设备,发现缺少…

echarts 生成 迁徙图_echarts3 迁徙图 迁入迁出(示例代码)

geoCoordMap {‘上海‘: [121.4648,31.2891],‘佛山‘: [112.8955,23.1097],‘保定‘: [115.0488,39.0948],‘兰州‘: [103.5901,36.3043],‘包头‘: [110.3467,41.4899],‘北京‘: [116.4551,40.2539],‘天津‘: [117.4219,39.4189],‘常州‘: [119.4543,31.5582],‘广州‘: […

threejs骨架形状

骨骼动画 骨骼是什么?骨骼就是一个可以控制其它形状的对象。在threejs中,骨骼(Bone)就是一个空的Object3D对象,当然,也可以是任何Object3D对象的子类。 创建骨架 创建骨架总体来说就四步: 创…

.net 知识积累

日历模式: 可以使用按钮事件进行触发 ; 设置默认按钮: this.Form.DefaultButton"ID属性" ; 注意此功能只能应用于.net控键中,必须位于 ruant "Server"; DefaultButton 必须是 IButtonControl 类…

tx2无法识别网络_Jetson TX2开篇--网络配置

续接上文,硬件连接完毕后,接通电源,按开机按钮。系统开机首次进入的是以nvidia用户登录的Ubuntu 命令行界面。习惯使用图形界面的用户莫慌,首次开机通过startx 命令发现无法启动图形界面,解决办法见(Jetson TX2开篇--安…

threejs加载3D模型例子

加载3D模型 首先要引入ColladaLoader加载器,Collada是一个3D模型交换方案,即不同的3D模型可以通过Collada进行相互转换,言外之意,threejs可以使用Collada将3D模型的数据转换成自己支持的格式,从而在浏览器上渲染出来。…

snailsvn使用教程_mac下使用snailSVN的踩坑之旅

一个很心酸的故事,公司了使用苹果电脑的只有我一个人,然后刚开始使用苹果电脑,开启了我饿自闭之旅,网上查到的一些方法是不可以使用的,所以我把正确的方法记录下来,给大家指个路首先,说明下&…

bzoj 1083 繁忙的都市

题目链接&#xff1a;http://www.lydsy.com/JudgeOnline/problem.php?id1083 题解&#xff1a; 在bzoj里能遇到如此如此水的题真是不容易…… 乍一看好像有点吓人&#xff0c;其实是一道Kruskal模板题…… 1 #include<cstdio>2 #include<algorithm>3 using namesp…

threejs纹理

纹理 纹理用来表现物体的细节。理论上可以将物体的每个细节建模出来&#xff0c;但是这样时间成本和性能成本都太高&#xff0c;因此&#xff0c;将物体的一些细节用纹理来表示。 图片纹理 图片纹理直接在物体表面应用图片。可以使用TextureLoader类的load方法来加载纹理。 …

mysql 列换行 表设计 设计_今天来讲一下怎么利用MySql进行库表设计

今天来讲一下怎么利用MySql进行库表设计1 引擎选择在 mysql 5.1 中&#xff0c;引入了新的插件式存储引擎体系结构&#xff0c;允许将存储引擎加载到正在运新的 mysql 服务器中。使用 mysql 插件式存储引擎体系结构&#xff0c;允许数据库专业人员或者设计库表的软件开发人员为…

刷题向》一道逆向思维题(BZOJ1046)(NORMAL)

这道题对于一类题都有一个通用思路&#xff1a;反向递减序列即为正向字典序。 对于逆向思维的题还要多做才能培养这种对于逆向思维的感觉。 想到这种方法之后&#xff0c;就很简单了。 因为nm不会炸&#xff0c;所以反向LIS叠一个贪心就能过了。 直接甩题目&代码 Descripti…

threejs对象拾取

对象拾取 对象拾取也就是要获得鼠标事件发生位置的图形对象。在threejs中&#xff0c;是通过Raycaster 对象来拾取对象的&#xff0c;ray是射线&#xff0c;caster是投射器&#xff0c;从字面上即可理解其工作原理是&#xff1a;从某个方向发射一条射线&#xff0c;穿过鼠标所…

android webview权限申请_android - 在运行时向摄像机请求WebView权限 - 堆栈内存溢出...

我想在Android WebView的PWA中使用QR码扫描仪。PWA在chrome浏览器上可以正常工作。我确实有在“应用程序”->“应用程序名称”->“权限”下设置摄像机的权限minSdkVersion 26和targetSdkVersion 28在装有Android 9的华为手机上测试问题是似乎没有授予该权限。 另外&#…

threejs指定对象旋转中心

指定对象旋转中心 默认情况下&#xff0c;对象的旋转中心都是自身的中心。对于组对象而言&#xff0c;也是如此。因此&#xff0c;可以利用这个特点&#xff0c;实现对象绕任何点旋转&#xff0c;也就是指定旋转中心。比如我们想要下图的对象绕A点旋转 我们可以添加我们的对…

threejs设置对象层次

设置层次 threejs提供了层次的支持。和相机处于同一层次的对象可见&#xff0c;否则不可见。在threejs中&#xff0c;最多可以设置32层&#xff0c;默认的层次是1。层次在有些系统中很有用&#xff0c;可以将不同的模式的对象设成不同的层次&#xff0c;这样&#xff0c;切换模…

法那科机器人初始化启动_发那科机器人的控制方式和控制柜的启动方式

工业机器人能得到广泛应用&#xff0c;得益于它拥有有多种控制方式&#xff0c;按作业任务的不同&#xff0c;可主要分为点位控制方式、连续轨迹控制方式、力(力矩)控制方式和智能控制方式四种控制方式。1.点位控制方式(PTP)这种控制方式只对工业机器人末端执行器在作业空间中某…

Text段、Data段和BSS段

不同的compiler在编译的过程中对于存储的分配可能略有不同&#xff0c;但基本结构大致相同。 大体上可分为三段&#xff1a;Text段、Data段和BSS段。 text段用于存放代码&#xff0c;通常情况下在内存中被映射为只读&#xff0c;但data和bss是可写的。 数据存放通常分成如下几个…