追求卓越一诺千金

蓝蓝设计,2011年成立,主创清华团队,专注软件和互联网ui设计开发。擅长企业信息化管理、监控、大数据软件UIUE咨询和设计开发服务。立足UI,好好学习,天天进步!


three.js 的简单实例

2019-9-26 释然 前端及开发文章及欣赏


three.js 的简单实例
三大主件: 渲染器、场景、相机

思想核心: 相机获取到场景内显示的内容, 然后再通过渲染器渲染到画布上面

渲染器: 实例化渲染器的同时生成的一个 Canvas 画布, 之后将这个画布添加到了 DOM 当中

场景: 场景只是一个容器, 显示的内容需要进行添加, 添加一个内容称作一个网格, 每个网格基本上包括几何体和材质, 网格也称之为模型

<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8" />
<title>three</title>
<style>
body {
margin: 0;
}

canvas {
width: 100%;
height: 100%;
display: block;
}
</style>
</head>

<body onload="init()">
<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
<script type="text/javascript" src="js/three.min.js"></script>
<script type="text/javascript" src="js/stats.min.js"></script>
<script type="text/javascript" src="js/dat.gui.min.js"></script>
<script>
//声明一些全局变量
var renderer, camera, scene, geometry, material, mesh, stats, rotate = true;

//初始化渲染器
function initRenderer() {
renderer = new THREE.WebGLRenderer(); //实例化渲染器
renderer.setSize(window.innerWidth, window.innerHeight); //设置宽和高
document.body.appendChild(renderer.domElement); //添加到dom
}

//初始化场景
function initScene() {
scene = new THREE.Scene(); //实例化场景
}

//初始化相机
function initCamera() {
camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 200); //实例化相机
camera.position.set(0, 0, 15); //初始化的坐标
}

//创建模型
function initMesh() {
geometry = new THREE.BoxGeometry(2, 2, 2); //创建几何体
material = new THREE.MeshNormalMaterial(); //创建材质
mesh = new THREE.Mesh(geometry, material); //创建网格
scene.add(mesh); //将网格添加到场景
}

//运行动画
function animate() {
requestAnimationFrame(animate); //循环调用函数

//判断是否可以旋转
if(rotate) {
mesh.rotation.x += 0.01; //每帧网格模型的沿x轴旋转0.01弧度
mesh.rotation.y += 0.02; //每帧网格模型的沿y轴旋转0.02弧度
}

stats.update(); //更新性能检测框
renderer.render(scene, camera); //渲染界面
}

//性能检测框
function initStats() {
stats = new Stats();
document.body.appendChild(stats.dom);
}

//创建调试框
function initGui() {

//控制参数初始值
controls = {
positionX: 0,
positionY: 0,
positionZ: 0,
rotate: true
};

gui = new dat.GUI(); //实例化对象
gui.add(controls, "positionX", -10, 10).onChange(updatePosition);
gui.add(controls, "positionY", -5, 5).onChange(updatePosition);
gui.add(controls, "positionZ", -10, 10).onChange(updatePosition);

function updatePosition() {
mesh.position.set(controls.positionX, controls.positionY, controls.positionZ);
}

gui.add(controls, "rotate").name("旋转").onChange(function(e) {
rotate = e;
});
}

//初始化函数,页面加载完成是调用
function init() {
initRenderer();
initScene();
initCamera();
initMesh();
initStats();
initGui();
animate();
}
</script>

</body>

</html>
蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计  cs界面设计  ipad界面设计  包装设计  图标定制  用户体验 、交互设计、 网站建设 平面设计服务
标签: three.js 的简单实例 « CSS3 终极布局指南 | JQUERY操作html--获取和设置内容、属性、回调函数»


订阅Rss