threejs 绘制球体_Three.js基础探寻四——立方体、平面与球体
前面简单介绍了
1.立方体
虽然这一形状的名字叫立方体(CubeGeometry),但它其实是长方体,也就是长宽高可以设置为不同的值。其构造函数是:
THREE.CubeGeometry(width,height,depth,widthSegments,heightSegments, depthSegments)
width:x方向上的长度
height:y方向上的长度
depth:z方向上的长度
widthSegments:x方向上的分段数(可选,缺省值1)
heightSegments:y方向上的分段数(同上)
depthSegments:z方向上的分段数(同上)
未分段:
var material = newTHREE.MeshBasicMaterial({
color:0xffff00,
wireframe:true});
drawCube(scene, material);functiondrawCube(scene, material) {var cube = new THREE.Mesh(new THREE.CubeGeometry(1, 2, 3), material);
scene.add(cube);
}
物体的默认位置是原点,对于立方体而言,是其几何中心在原点的位置。
分段:
var cube = new THREE.Mesh(new THREE.CubeGeometry(1, 2, 3, 2, 2, 3), material);
为什么会有这么多邪线呢?版本问题。R73版本:
注意这个分段是对六个面进行分段,而不是对立方体的体素分段,因此在立方体的中间是不分段的,只有六个侧面被分段。
2.平面
这里的平面(PlaneGeometry)其实是一个长方形,而不是数学意义上无限大小的平面。其构造函数为:
THREE.PlaneGeometry(width, height, widthSegments, heightSegments)
width:x方向上的长度
height:y方向上的长度
widthSegments:x方向上的分段数(可选,缺省值1)
heightSegments:y方向上的分段数(同上)
new THREE.PlaneGeometry(2, 4);创建的平面在x轴和y轴所在平面内,效果如下:
3.球体
球体(SphereGeometry)的构造函数是:
THREE.SphereGeometry(radius,segmentsWidth,segmentsHeight,phiStart, phiLength, thetaStart, thetaLength)//radius:半径
//segmentsWidth:经度上的分段数
//segmentsHeight:纬度上的分段数
//phiStart:经度开始的弧度
//phiLength:经度跨过的弧度
//thetaStart:纬度开始的弧度
//thetaLength:纬度跨过的弧度
3.1 经纬度分段数
首先,我们来理解下segmentsWidth和segmentsHeight。使用var sphere = new THREE.SphereGeometry(3, 8, 6)可以创建一个半径为3,经度划分成8份,纬度划分成6份的球体,如下图所示。
segmentsWidth相当于经度被切成了几瓣,而segmentsHeight相当于纬度被切成了几层。
new THREE.SphereGeometry(3, 5, 4)的效果:
new THREE.SphereGeometry(3, 8, 6)的效果:
new THREE.SphereGeometry(3, 18, 12)的效果:
在图形底层的实现中,并没有曲线的概念,曲线都是由多个折线近似构成的。对于球体而言,当这两个值较大的时候,形成的多面体就可以近似看做是球体了。
3.2 经度弧度
new THREE.SphereGeometry(3, 8, 6, Math.PI / 6, Math.PI / 3)表示起始经度为Math.PI / 6,经度跨度为Math.PI / 3。效果如下:
注意,这里segmentsWidth为8意味着对于经度从Math.PI / 6跨过Math.PI / 3的区域内划分为8块,而不是整个球体的经度划分成8块后再判断在此经度范围内的部分。
3.3 纬度弧度
纬度弧度同理。new THREE.SphereGeometry(3, 8, 6, 0, Math.PI * 2, Math.PI / 6, Math.PI / 3)表示纬度从Math.PI / 6跨过Math.PI / 3。效果如下:
new THREE.SphereGeometry(3, 8, 6, Math.PI / 2, Math.PI, Math.PI / 6, Math.PI / 2)的效果:
4.源码
1
2
3
4
5
3.js测试四
6
7
8
9
10
11
12 functioninit() {13 varrenderer= newTHREE.WebGLRenderer({14 canvas: document.getElementById('mainCanvas')15 });16 renderer.setClearColor(0x000000);17 varscene= newTHREE.Scene();18
19 //camera
20 varcamera= newTHREE.OrthographicCamera(-5,5,3.75,-3.75,0.1,100);21 camera.position.set(25,25,25);22 camera.lookAt(newTHREE.Vector3(0,0,0));23 scene.add(camera);24
25 //材质
26 varmaterial= newTHREE.MeshBasicMaterial({27 color:0xffff00,28 wireframe:true
29 });30
31 drawCube(scene, material);//立方体
32 //drawPlane(scene, material); //平面
33 //drawSphere(scene, material); //球体
34
35 //render
36 renderer.render(scene, camera);37 }38
39 functiondrawCube(scene, material) {40 varcube= newTHREE.Mesh(newTHREE.CubeGeometry(1,2,3,2,2,3), material);41 scene.add(cube);42 }43
44 functiondrawPlane(scene, material) {45 varplane= newTHREE.Mesh(newTHREE.PlaneGeometry(2,4), material);46 scene.add(plane);47 }48
49 functiondrawSphere(scene, material) {50 varsphere= newTHREE.Mesh(newTHREE.SphereGeometry(3,18,12), material);51 //var sphere = new THREE.Mesh(new THREE.SphereGeometry(3, 8, 6, Math.PI / 6, Math.PI / 3), material);
52 //var sphere = new THREE.Mesh(new THREE.SphereGeometry(3, 8, 6, 0, Math.PI * 2, Math.PI / 6, Math.PI / 3), material);
53 //var sphere = new THREE.Mesh(new THREE.SphereGeometry(3, 8, 6, Math.PI / 2, Math.PI, Math.PI / 6, Math.PI / 2), material);
54 scene.add(sphere);55 }56
57
threejs 绘制球体_Three.js基础探寻四——立方体、平面与球体相关推荐
- (七)JS基础知识四(搞定异步)【三座大山之三,必考!!!】
JS基础知识四(异步) 提问 单线程 应用场景 callback hell和promise 提问 同步和异步的区别是什么 手写用Promise加载一张图片 前端使用的异步的场景有哪些 单线程 JS是单 ...
- Three.js基础探寻二——正交投影照相机
本篇主要介绍照相机中的正交投影照相机. 第一篇传送门:Three.js基础探寻一 1.照相机 图形学中的照相机定义了三维空间到二维屏幕的投影方式. 针对投影方式照相机分为正交投影照相机和透视投影照相机 ...
- three.js基础几何体:立方体,球,圆柱的绘制
学习交流欢迎加群:789723098,博主会将一些demo整理共享 作为three.js的学习入门,一直在思考要怎样写才可以更符合初学者,对于我自己来说,本身也不是资深的玩家,也是入门不久的菜鸟,但我 ...
- threejs 绘制球体_Three.js 第一篇:绘制一个静态的3D球体
第一篇就画一个球体吧 首先我们知道Three.js其实是一个3D的JS引擎,其中的强大之处就在于这个JS框架并不是依托于JQUERY来写的.那么,我们在写这一篇绘制3D球体的文章的时候,应该注意哪些地 ...
- json动画_three.js动画(四)
ThreeJS的动画系列分为:基础动画.相机控制.变形动画.用骨骼和蒙皮制作动画以及使用外部模型创建动画. 用骨骼和蒙皮制作动画 用骨骼来做动画时,移动一下骨骼,Three.js必须决定如何相应地迁移 ...
- threejs 形状几何体_Three.js模型几何体面积、体积计算
Three.js模型几何体面积.体积计算 在工作中通过Three.js开发项目的时候,一些特定的情况下你可能需要计算一个三维模型的表面积或者体积,比如在3D打印的Web项目中,你需要计算一个三维模型的 ...
- Three.js基础探寻七——Lamber材质与Phong材质
材质(Material)是独立于物体顶点信息之外的与渲染效果相关的属性.通过设置材质可以改变物体的颜色.纹理贴图.光照模式等. 本篇将介绍基本材质以及两种基于光照模型的材质(Lamber与Phong) ...
- threejs 纹理流动_Three.js纹理(一)
一.概念 3D世界的纹理由图片组成.将纹理以一定的规则映射到几何体上,一般是三角形上,那么这个几何体就有纹理皮肤了. 那么在threejs中,或者任何3D引擎中,纹理应该怎么来实现呢?首先应该有一个纹 ...
- React.js 基础入门四--要点总结
JSX语法,像是在Javascript代码里直接写XML的语法,实质上这只是一个语法糖,每一个XML标签都会被JSX转换工具转换成纯Javascript代码,React 官方推荐使用JSX, 当然你想 ...
最新文章
- 为什么晚上咳嗽很厉害
- 线程池与Callable更配哦
- 如何删除动态数组的指定元素 - 回复 Splendour 的部分问题
- bs和php,BSPHP - WEB源码|源代码 - 源码中国
- XML安全之Web Services
- SpreadJS:一款类Excel开发工具,功能涵盖Excel的 95% 以上
- WTL的CBitmapButton在MFC下完美使用
- opencv 修改图片尺寸
- Gazebo [Err] [REST.cc:205] Error in REST request 问题的解决
- 智能客服 | 5款绝佳客户服务聊天机器人推荐
- 2017CS231n李飞飞深度视觉识别笔记(二)——图像分类
- 我喜欢计算机作文300字,关于我喜欢作文300字
- XGBoost导读与实战阅读记录(一)——rabit和allreduce
- 快卫士是如何帮您保驾护航
- EL表达式处理字符串
- 【必备知识】:线激光条纹中心线提取算法导读
- 小熊派 移植TencentOS-tiny+EC20+MQTT对接腾讯云
- vue element-ui Tabs 标签页实现【更多】功能
- KDZD8119高压漏电起痕试验机
- 当ChatGPT遇上游戏引擎……