Threejs 学习记录:第一个三维立体场景

  • 第一个三维立体场景
    • 创建场景三要素:场景、相机、渲染器
    • 添加场景主体:旋转立方体
    • 渲染场景
    • 动画立方体

第一个三维立体场景

跟随官方示例创建一个带有旋转立方体的场景了解three.js基础知识。

创建场景三要素:场景、相机、渲染器

three.js 进行场景渲染需要三样东西:场景Scene、相机Camera和渲染器Renderer,即使用相机在渲染器上渲染场景。

既然是相机,就需要调整参数,官方示例中的PerspectiveCamera 接收四个参数:视野FOV(场景范围) 横纵比(相机渲染的宽高比例) 近剪切平面 远剪切平面 ,文档说明远近剪切屏幕,表示距离相机超出远近剪切平面值的对象不会被渲染。

渲染器即canvas中的画布,需要设置在应用程序中渲染的大小,并添加到HTML文档中。

    // 场景const scene = new THREE.Scene();// 相机const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000);// 渲染器const renderer = new THREE.WebGLRenderer();renderer.setSize(window.innerWidth,window.innerHeight);document.body.appendChild(renderer.domElement);

添加场景主体:旋转立方体

BoxGeometry: 立方体对象

MeshBasicMaterial:着色器

Mesh: 网格

    const geometry = new THREE.BoxGeometry( 1, 1, 1 );const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );const cube = new THREE.Mesh( geometry, material );scene.add( cube );camera.position.z = 5;

渲染场景

添加了以上内容后,应用程序仍无法渲染内容,实际渲染场景还需调用renderer方法:

render:渲染

requestAnimationFrame: 循环渲染 导致渲染器每次刷新屏幕时绘制场景 (一般默认保持60FPS的频率)

当用户导航到其他浏览器选项卡时 requestAnimationFrame 会暂停。

    function animate() {requestAnimationFrame( animate );renderer.render( scene, camera );}animate();

动画立方体

添加上述代码后,只能看到一个绿色的正方体,现在为这个正方体添加动画,从而看到一个旋转的立方体。

    cube.rotation.x += 0.01;cube.rotation.y += 0.01;

在渲染函数中添加立方体的旋转动画:修改立方体的横纵轴值。

在应用程序运行时想要移动或更改的任何内容都必须经过动画循环,因此,在场景中的动画渲染操作都需要放在渲染函数 animate 中。

整体代码

    <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>three.js</title><style>body {margin: 0;}</style></head><body><script src="https://unpkg.com/three@0.142.0/build/three.js"></script><script>const scene = new THREE.Scene();// 相机  paramter const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000);const renderer = new THREE.WebGLRenderer();renderer.setSize(window.innerWidth, window.innerHeight);document.body.appendChild(renderer.domElement);const geometry = new THREE.BoxGeometry( 1, 1, 1 );const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );const cube = new THREE.Mesh( geometry, material );scene.add( cube );camera.position.z = 5;function animate() {requestAnimationFrame( animate );cube.rotation.x += 0.01;cube.rotation.y += 0.01;renderer.render( scene, camera );};animate();</script></body></html>

Threejs 学习记录:初识 threejs相关推荐

  1. MIPI学习记录——初识mipi

    MIPI学习记录 1.初识mipi 2.MIPI框架 2.1 CSI (Camera Serial Interface) 2.2 CCI (Camera Control Interface) 1.初识 ...

  2. threejs学习记录

    1.第一个threejs程序 <!DOCTYPE html> <html lang="en"> <head><meta charset=& ...

  3. 【ThreeJS基础教程-初识Threejs】1.2掌控我们的物体和模型

    掌控我们的物体和模型 学习ThreeJS的捷径 引入帧数监控与调试时使用的GUI 案例解析 引入刷新率检测器stats和lil-gui Stats LIL.GUI (Dat.GUI) 学习ThreeJ ...

  4. 【ThreeJS基础教程-初识Threejs】1.ThreeJS的HelloWorld

    ThreeJS的HelloWorld 学习ThreeJS的捷径 杂项 第一个案例 案例效果 案例解析 引入threejs 创建一个场景(演出舞台) 创建相机(摄影师) 创建一个渲染器(相片处理) 创建 ...

  5. 【ThreeJS基础教程-初识Threejs】1.6各种各样的几何体

    各种各样的几何体 学习ThreeJS的捷径 常用内置几何体介绍 立方缓冲几何体BoxGeometry 分段数的意义(该部分仅建议了解即可,无需深入) 圆形缓冲几何体CircleGeometry 圆柱缓 ...

  6. 【ThreeJS基础教程-初识Threejs】1.5 选择合适的相机与相机切换

    选择合适的相机 学习ThreeJS的捷径 两种常用相机 案例分析 创建两种相机 透视相机 PerspectiveCamera 正交相机OrthographicCamera 切换相机 掌控相机 学习Th ...

  7. 【ThreeJS基础教程-初识Threejs】1.3 右手坐标系

    右手坐标系 学习ThreeJS的捷径 案例升级 右手坐标系与左手坐标系 右手坐标系旋转规则 可选学习内容推荐:欧拉角,四元数 学习ThreeJS的捷径 本段内容会写在0篇以外所有的,本人所编写的Thr ...

  8. threejs学习--vue-cli集成threejs后,加载gltf模型FPS很低问题解决(四)

    vue集成threejs后,web页面加载模型之后,FPS值在10以下:查阅资料是因为:声明的部分threejs的对象不可以放在data中:否则就会帧数特别低: 以下为修改之后代码 <templ ...

  9. C语言学习记录-----이 初识C语言(2)

    常量. 分类:字面常量,#define修饰的常量,const修饰的常量,枚举常量.字面常量也就是我们很熟悉的常量,比如5,g,这些都是常量,无法被改变,可以直接写出来.之前的int a = 5,a就是 ...

最新文章

  1. C#面向对象--继承
  2. QT5完成一个数据实时显示控制的Demo
  3. 对Web设计有用的10组免费漂亮的图标
  4. 闲话WPF之二一(WPF中的数据处理 [3])
  5. 毕业设计——第三章 开发方法及系统实现(6)(完结)
  6. 递归查找数组的最大值
  7. 新萝卜家园Ghost XP SP3电脑城装机版2013.08
  8. ORA-03113:通信通道的文件结尾-完美解决方案
  9. 思科计算机网络技术第一章,cisco思科网络技术教程第一章.ppt
  10. Unity 一种更为简洁明了的环绕相机方案
  11. linux c语言 修改mac地址,C语言根据MAC地址查找网卡并修改IP地址
  12. 算法设计与分析第七章习题解答与学习指导(第2版)屈婉婷 刘田 张立昂 王捍贫编著 清华大学出版社
  13. 中国各省的省会间距离(含港澳台)
  14. win7系统msi文件无法安装历程
  15. 直播倒计时android,直播代码,Android实现验证码倒计时
  16. java解析XML saxReader.read(xml) 错误:org.dom4j.DocumentException: no protocol
  17. eclipse的常用操作
  18. Word段落前面有黑点 Word段落黑点怎么去掉
  19. java虚拟机笔记—运行时数据区域
  20. 苹果更新提示:已接入无线局域网却提示需要接入

热门文章

  1. Android 深入实现基于socket套接字的即时聊天
  2. java短信判断长度_接收短信验证码条数限制(java发送短信验证码限制)
  3. SMTP邮件发送失败原因
  4. 19 网络端口地址转换NAPT配置
  5. 软件工程------面向对象建模
  6. 现金红包、催泪视频、过气明星……这是春节营销的门道
  7. 安装beanstalkd
  8. ICLR-17最佳论文作者Nicolas Papernot现场演讲:如何用PATE框架有效保护隐私训练数据?
  9. motionFX ST意法半导体X-MEMS运动融合库
  10. Asp.net 打印web 网页 如何不显示 网址 页码