Three.js学习1_快速入门
快速上手, 搭建第一个3D场景
最重要的一步, 先下载three.js, 引入网页中 <script src="./three.js"></script>
效果图:

1. 五大因素
搭建一个场景必须要的五大因素, 场景, 相机, 光源, 物体, 渲染器
结合生活, 场景就是我们身处的环境, 相机是我们的眼睛, 光源和物体见名知意, 渲染器是将我们看到的渲染到网页上, 五大因素也就这样, 那开始搭建环境吧!
2. 开始搭建环境
在搭建环境前, 为了使图像渲染在整个网页上, 需要设置
body{
margin:;
/* 消除body外间距 */
overflow: hidden;
/* 作用是消除网页右方滚动条*/
}
第一步, 创建场景
let scene = new THREE.Scene();
第二步, 创建光源
let light = new THREE.AmbientLight(0x666666);
scene.add(light);
注意点: 光源, 相机, 物体都是需要放进场景中, 结合实际更容易想
第三步, 创建相机
let camera = new THREE.PerspectiveCamera(
45,
window.innerWidth / window.innerHeight,
1, 1000 );
scene.add( camera );
camera.position.set(2, 2, 2);
camera.lookAt(scene.position);
注意点:
1-4行创建相机, 5行将相机添加至场景中, 6行表示将相机放在坐标(2,2,2)处, 场景坐标为(0,0,0), 7行表示相机看向原点
第四步, 创建物体
let cube = new THREE.Mesh(
new THREE.BoxGeometry( 1, 1, 1 ),
new THREE.MeshLambertMaterial( {
color: 0xf00ff0,
// wireframe: true
} )
);
scene.add(cube);
注意点:
1-7行创建一个长宽高为1的正方体 (这里提个问题, 在three.js中, 是以什么为一个单位, m, dm, cm?)
第五步, 创建渲染器
let renderer = new THREE.WebGLRenderer();
renderer.setClearColor(0xffffff);
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
解释:
1行创建渲染器, 4行, 将渲染器表示为一个元素加入到网页中, 之后渲染位置, 从这个元素开始. 23两行分别设置背景颜色和渲染尺寸
第六步, 创建刷新函数
想象一下游戏, 每一秒场景都会不同, 某个时刻的场景对应一张图片, 也就是一帧, 浏览器也需要不停刷新图片, 不停刷新帧, 这样才能看到动画效果
render();
function render() {
renderer.render(scene, camera);
requestAnimationFrame(render);
}
解释:
1行调用函数, 2行定义函数, 3行渲染一帧图像(一张图像), 4行向浏览器发起重新执行render函数的请求, 不断反复
OK! 代码完成
完整代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body{
margin: 0;
/* 消除body外间距 */
overflow: hidden;
/* 作用是消除网页右方滚动条*/
}
</style>
<script src="../build/three.js"></script>
</head>
<body>
<script>
let scene = new THREE.Scene(); let camera = new THREE.PerspectiveCamera(
45,
window.innerWidth / window.innerHeight,
1, 1000 );
scene.add( camera );
camera.position.set(2, 2, 2);
camera.lookAt(scene.position); let light = new THREE.AmbientLight(0x666666);
scene.add(light); let cube = new THREE.Mesh(
new THREE.BoxGeometry( 1, 1, 1 ),
new THREE.MeshLambertMaterial( {
color: 0xf00ff0,
// wireframe: true
} )
);
scene.add(cube); let renderer = new THREE.WebGLRenderer();
renderer.setClearColor(0xffffff);
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement); render();
function render() {
renderer.render(scene, camera);
requestAnimationFrame(render);
}
</script> </body>
</html>
Three.js学习1_快速入门的更多相关文章
- Vue.js学习 Item1 --快速入门
我们以 Vue 数据绑定的快速导览开始.如果你对高级概述更感兴趣,可查看这篇博文. 尝试 Vue.js 最简单的方法是使用 JSFiddle Hello World 例子.在浏览器新标签页中打开它,跟 ...
- Vue.js 60 分钟快速入门
Vue.js 60 分钟快速入门 转载 作者:keepfool 链接:http://www.cnblogs.com/keepfool/p/5619070.html Vue.js介绍 Vue.js是当下 ...
- 不会几个框架,都不好意思说搞过前端: Vue.js - 60分钟快速入门
Vue.js——60分钟快速入门 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理 ...
- 前端学习 node 快速入门 系列 —— 初步认识 node
其他章节请看: 前端学习 node 快速入门 系列 初步认识 node node 是什么 node(或者称node.js)是 javaScript(以下简称js) 运行时的一个环境.不是一门语言. 以 ...
- 前端学习 node 快速入门 系列 —— npm
其他章节请看: 前端学习 node 快速入门 系列 npm npm 是什么 npm 是 node 的包管理器,绝大多数 javascript 相关的包都放在 npm 上. 所谓包,就是别人提供出来供他 ...
- 前端学习 node 快速入门 系列 —— 模块(module)
其他章节请看: 前端学习 node 快速入门 系列 模块(module) 模块的导入 核心模块 在 初步认识 node 这篇文章中,我们在读文件的例子中用到了 require('fs'),在写最简单的 ...
- 前端学习 node 快速入门 系列 —— 简易版 Apache
其他章节请看: 前端学习 node 快速入门 系列 简易版 Apache 我们用 node 来实现一个简易版的 Apache:提供静态资源访问的能力. 实现 直接上代码. - demo - stati ...
- 前端学习 node 快速入门 系列 —— 服务端渲染
其他章节请看: 前端学习 node 快速入门 系列 服务端渲染 在简易版 Apache一文中,我们用 node 做了一个简单的服务器,能提供静态资源访问的能力. 对于真正的网站,页面中的数据应该来自服 ...
- 前端学习 node 快速入门 系列 —— 报名系统 - [express]
其他章节请看: 前端学习 node 快速入门 系列 报名系统 - [express] 最简单的报名系统: 只有两个页面 人员信息列表页:展示已报名的人员信息列表.里面有一个报名按钮,点击按钮则会跳转到 ...
随机推荐
- ARC 062 F - Painting Graphs with AtCoDeer 割点 割边 不动点 burnside引理
LINK:Painting Graphs with AtCoDeer 看英文题面果然有点吃不消 一些细节会被忽略掉. 问每条边都要被染色 且一个环上边的颜色可以旋转. 用c种颜色有多少本质不同的方法. ...
- Workerman学习笔记(一)初步认识
本文只是概念性的知识,内容比较零散,下篇文章再进行代码分析. Workerman是什么,他的优势在哪? 官方给的解释是高性能socket框架,我的个人理解是实现多进程的通讯的服务框架. 与传统的PHP ...
- AutoMapper 9.0的改造(续)
上一篇有一个读者,有疑问,如何自动化注册Dto 我开篇,做了一个自动化注册的 public sealed class AutoInjectAttribute : Attribute { public ...
- DataGrip,一款数据库客户端工具,IDEA的兄弟是真香!
DataGrip 是一款数据库管理客户端工具,方便的连接到数据库服务器,执行sql语句.创建表.创建索引以及导出数据等. DataGrip 支持几乎所有主流的关系数据库产品,如 DB2.Derby.H ...
- 024_go语言中的缓冲通道
代码演示 package main import "fmt" func main() { messages := make(chan string, 2) messages < ...
- linxu系统安装WordPress
确保在安装wordpress之前,安装了nginx,php,mysql 没有安装的翻我之前的博文有安装方法 进入官网下载压缩包 wget https://wordpress.org/latest.ta ...
- CSRF 学习笔记
1:什么是CSRF: 假设有一个支付网站:www.xx.com 向小明同学付款1000元数据包: www.xx.com/pay.php?name=xiaoming&account=xxxx@q ...
- RabbitMQ 基础概念进阶
上一篇 RabbitMQ 入门之基础概念 介绍了 RabbitMQ 的一些基础概念,本文再来介绍其中的一些细节和其它的进阶的概念. 一.消息生产者发送的消息不可达时如何处理 RabbitMQ 提供了消 ...
- TortoiseGit的使用(一)
博客园换了新颜,立刻给我的感觉就是还不如原来的老古董界面呢.没办法呀,毕竟主要是习惯了.咱也不吐槽了,慢慢地,习惯就好,博客园也在逐步改善. 目录 Git和TortoiseGit下载安装 稍微笼统地介 ...
- Vuex mapMutation的基本使用
mapMutation-store中的同步方法 import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default n ...