使用three.js绘制球体

实现思路:
1. 生成三大组件:场景、相机、渲染器;
2. 场景添加光源;
3. 场景添加球体,并为球体添加纹理贴图;
4. 循环渲染。


首先,初始化变量,包括用到的渲染器、场景、相机、球体、以及轨道控件。

let webGLRenderer, camera, scene, sphere, orbitControls;const windowWidth = window.innerWidth;
const windowHeight = window.innerHeight;

生成渲染器并添加到页面:

function initRenderer() {webGLRenderer = new THREE.WebGLRenderer({antialias: true,   // 抗锯齿});webGLRenderer.setSize(windowWidth, windowHeight);webGLRenderer.setClearColor(new THREE.Color(0x000000));  // color, alphadocument.getElementById('canvas-frame').appendChild(webGLRenderer.domElement);
}

创建相机,聚焦到 (0, 0, 0) 位置。

function initCamera() {camera = new THREE.PerspectiveCamera(45, windowWidth / windowHeight, 1, 1000);  // 创建透视相机camera.position.z = 400;camera.up.y = 1;camera.lookAt(new THREE.Vector3(0, 0, 0));
}

创建场景:

function initScene() {scene = new THREE.Scene();
}

场景中添加环境光以及平行光源:

function initLight() {const ambiLight = new THREE.AmbientLight(0x333333);scene.add(ambiLight);const direLight = new THREE.DirectionalLight(0xffffff, 1.0);  // 平行光 DirectionalLight (光源颜色的RGB数值, 光源强度数值) direLight.position.set(500, 500, 500);scene.add(direLight);
}

添加球体,使用TextureLoader纹理加载器加载纹理, 并使用材质的map属性设置纹理贴图:

function initObject() {const loader = new THREE.TextureLoader();loader.load("../textures/planets/earth.jpg", (texture) => {const mat = new THREE.MeshLambertMaterial();// const mat = new THREE.MeshPhongMaterial();mat.map = texture;sphere = new THREE.Mesh(new THREE.SphereGeometry(70, 60, 60), mat);scene.add(sphere);})
}

three.js 加载模型或者是纹理图片时需要一个本地的web服务器,可使用 nodeJs 的 HTTP Server 模块启动。

  • npm install -g http-server
  • http-server

添加轨道控件:

function initOrbit() {orbitControls = new THREE.OrbitControls(camera, webGLRenderer.domElement);
}

循环渲染函数:

function render() {// 使用requestAnimationFrame按照浏览器定义时间间隔调用函数,并保证动画尽量平滑、高效requestAnimationFrame(render);// 球体自动绕Y轴旋转if (sphere) sphere.rotation.y += 0.01;// 在对摄像机的转换进行任何手动更改之后,必须调用orbitControls.update()orbitControls.update();webGLRenderer.render(scene, camera);
}

最后,所有函数按顺序定义,完成绘制:

// 初始化函数
function init() {// 创建 WebGLobal 渲染器initRenderer();// 生成相机initCamera();// 生成场景initScene();// 添加光源initLight();// 添加物体initObject();// 添加轨道控件initOrbit();// 渲染webGLRenderer.render(scene, camera);render();
}

最终效果:

threeJS绘制球体相关推荐

  1. threejs 绘制球体_实战:用 threejs 创建一个地球

    原标题:实战:用 threejs 创建一个地球 提示: 讲座 前端大型免费公开课讲座 教程 从零基础学前端教程,都在这~ 上个月底,在朋友圈看到一个号称"这可能是地球上最美的h5" ...

  2. threejs 绘制球体_3D可视化库-Threejs调研及简单示例

    0 背景 WebGL是一种3D绘图协议,其允许JavaScript和OpenGL ES2.0结合在一起,为H5 Canvas提供硬件3D加速渲染,可以借助系统显卡在浏览器里更流畅地显示3D场景和模型. ...

  3. threejs 绘制球体_ThreeJs 绘制点、线、面

    所有的三位物体都是由点构成,两点构成线,三点构成面,ThreeJs又如何绘制出点.线.面呢 ? 在ThreeJs中: 模型由几何体和材质构成 模型以何种形式(点.线.面)展示取决于渲染方式 1. 几何 ...

  4. threejs 绘制球体_Three.js 第一篇:绘制一个静态的3D球体

    第一篇就画一个球体吧 首先我们知道Three.js其实是一个3D的JS引擎,其中的强大之处就在于这个JS框架并不是依托于JQUERY来写的.那么,我们在写这一篇绘制3D球体的文章的时候,应该注意哪些地 ...

  5. threejs 绘制球体_【webGl】threejs实现一个简单的动画-弹跳的小球

    在这里,我们将动态画面简称为动画(animation).正如动画片的原理一样,动画的本质是利用了人眼的视觉暂留特性,快速地变换画面,从而产生物体在运动的假象.而对于Three.js程序而言,动画的实现 ...

  6. threejs 绘制球体_web前端入门到实战:threejs 绘制地球、飞机、轨迹

    首先我们来看下要实现的效果 这个缩小后的图片,下面我们来看下近距离的动态效果.. 效果比较简陋,需要后期再处理... 下面进入主题,代码篇.. HTML部分: 全球航班 html{overflow: ...

  7. threejs 绘制球体_Three.js基础探寻四——立方体、平面与球体

    前面简单介绍了 1.立方体 虽然这一形状的名字叫立方体(CubeGeometry),但它其实是长方体,也就是长宽高可以设置为不同的值.其构造函数是: THREE.CubeGeometry(width, ...

  8. threejs 绘制球体_javascript – 使用ThreeJS获取球体纹理上的点击位置

    目前:我有一个球体,其上有一个围绕y轴旋转的纹理.我也有在3D空间中点击的位置,以及球体上的旋转位置(我认为). 目标:获取纹理上的位置,例如:我想获得我点击的图像的正方形. (参见下面的示例球体和图 ...

  9. threejs绘制风羽

    threejs绘制风羽 1. 引言 2. 什么是风羽 3. threejs绘制 3.1 threejs渲染流程概述 3.2 构建矩形 3.3 绘制风羽 3.3.1 实现思路 3.3.2 实现效果 3. ...

最新文章

  1. executeQuery,executeUpdate,execute区别
  2. python数据结构 树_python数据结构之二叉树的建立实例
  3. 在PropertyGrid中使用密码显示
  4. matlab中asix off_matlab中 hold on 与hold off的用法
  5. Linux的逻辑卷状态不可用,linux – 逻辑卷在引导时处于非活动状态
  6. Linux学习总结(55)——Linux 运维常用脚本
  7. 更改多个版本java_window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法...
  8. mq消息落地及业务处理踩坑记录
  9. 传智播客 魔法属性 学习
  10. 软件那么多,恢复数据还靠它
  11. Java——学生管理系统
  12. Delphi第三方控件大比拼(收费篇)
  13. 学堂在线android客户端,学堂在线学生登录入口app
  14. 2. 工业大数据的特点
  15. php生成二维码文字图片海报
  16. Android虚拟机、模拟器识别
  17. 线性表的顺序存储结构及基本操作
  18. 晒一波程序员的桌面,逼格超级高!
  19. 采购人员应该考什么证书?
  20. 高通cDSP介绍汇总

热门文章

  1. 小米推出最新“全家桶”,为上市献礼?
  2. 在手机便签上如何进行图片文字识别?
  3. PUPPET配置进阶
  4. 深度详解 Android 之 Context
  5. 网易博客居然要关了,我写的文章啊!
  6. 使用mklink连接文件夹
  7. 用Unity做一个萌萌哒游戏(附资源)
  8. rotate3d();
  9. 商业价值:谷歌娱乐影音之路上的硬件产品
  10. #####@@@#好好好好#####最全知识图谱介绍:关键技术、开放数据集、应用案例汇总