1,首先我们应该知道 three.js是做什么的?
hree.js是JavaScript编写的WebGL第三方库。提供了非常多的3D显示功能。Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包括了摄影机、光影、材质等各种对象。
说白了,他就是基于WebGL 规范的一个可以直接在浏览器呈现3D效果的一个第三方类库,类似于Javascript的Jquery插件。
下面我们通过一个简单的入门事例来具体说明一下通过three.js在浏览器上呈现一个3D效果的基本流程。
创建之前:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Lesson1</title> <script type="text/javascript" src="../js/threeJs/three.min.js"></script> <style type="text/css"> div#canvas-frame { border: none; cursor: move; width: 1400px; height: 600px; background-color: #EEEEEE; } </style> </head> <body onload="threeStart();"> <!--盛放canvas的容器--> <div id="canvas3d"></div> </body>
我们需要几个基本步骤:
真正能够显示有three.js,我们需要三件事:一个场景,一个相机,一个渲染器,所以我们可以用摄像机渲染场景。
创建一个场景:
var width = document.getElementById('canvas3d').clientWidth;//获取画布「canvas3d」的宽
var height = document.getElementById('canvas3d').clientHeight;//获取画布「canvas3d」的高
//创建一个场景
var scene = new THREE.Scene();
//创建Three相机 three.js提供了 有几种不同的摄像机 这里使用的是THREE.PerspectiveCamera
// 参数说明 :
//1,视野
//2,长宽比
//接下来的两个属性是远近剪裁平面。
//意味着什么,是物体远离相机比远比附近或接近的价值不会呈现。
//你现在不需要担心这个,但是你可能想要使用其他值在你的游戏来获得更好的性能。
//var camera = new THREE.PerspectiveCamera(75, width/height, 0.1, 1000);
var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);
//渲染器 除了WebGLRenderer我们用在这里 three.js提供了其他
var renderer = new THREE.WebGLRenderer();
//renderer.setSize(width, height); //指定渲染器的高宽(和画布框大小一致)
renderer.setSize(window.innerWidth, window.innerHeight)
//document.getElementById('canvas3d').appendChild(renderer.domElement);//追加 【canvas】 元素到 【canvas3d】 元素中。
//renderer.setClearColorHex(0xFFFFFF, 1.0);//设置canvas背景色(clearColor)
renderer.setSize(window.innerWidth, window.innerHeight)
//要创建一个多维数据集,我们需要一个CubeGeometry。
//这是一个对象,其中包含所有的点(顶点)和填充(面临)的多维数据集
var geometry = new THREE.CubeGeometry(1,1,1);
//除了CubeGeometry,我们需要一个材料颜色
//three.js附带一些材料,但目前我们将使用MeshBasicMaterial
var material = new THREE.MeshBasicMaterial({color: 0x00ff00});
//第三件事,我们需要的是一个Mesh。Mesh是一个对象,
//参数是一个CubeGeometry、材料(material ),
var cube = new THREE.Mesh(geometry, material);
//然后我们可以插入到我们的场景中,
scene.add(cube);
//默认情况下,当我们调用scene.add(),
//我们将添加到坐标(0,0,0)。这将导致相机和cube。为了避免这种情况,我们只是将镜头移出一点。
camera.position.z = 5;
//渲染场景
//呈现
var render = function () {
requestAnimationFrame(render);
//旋转
cube.rotation.x += 0.1;
cube.rotation.y += 0.1;
renderer.render(scene, camera);
};
render();
以上就是一个简单的three.js在浏览器渲染的一个基本的操作过程。本人也是初学者希望对大家有帮助,那里不正确,希望大家共同学习哈。。。
效果图如下:(不过没有动画效果)
相关推荐
《学习Three.js——用于WebGL的JavaScript 3D库》第二版不仅是一本优秀的入门指南,也是Three.js开发者进阶不可或缺的参考资料。通过本书的学习,读者将能够全面掌握Three.js的各项功能,并学会如何利用这些技术创建...
python学习资源
jfinal-undertow 用于开发、部署由 jfinal 开发的 web 项目
基于Andorid的音乐播放器项目设计(国外开源)实现源码,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。
python学习资源
python学习资源
python学习一些项目和资源
【毕业设计】java-springboot+vue家具销售平台实现源码(完整前后端+mysql+说明文档+LunW).zip
HTML+CSS+JavaScarip开发的前端网页源代码
python学习资源
【毕业设计】java-springboot-vue健身房信息管理系统源码(完整前后端+mysql+说明文档+LunW).zip
成绩管理系统C/Go。大学生期末小作业,指针实现,C语言版本(ANSI C)和Go语言版本
1_基于大数据的智能菜品个性化推荐与点餐系统的设计与实现.docx
【毕业设计】java-springboot-vue交流互动平台实现源码(完整前后端+mysql+说明文档+LunW).zip
内容概要:本文主要探讨了在高并发情况下如何设计并优化火车票秒杀系统,确保系统的高性能与稳定性。通过对比分析三种库存管理模式(下单减库存、支付减库存、预扣库存),强调了预扣库存结合本地缓存及远程Redis统一库存的优势,同时介绍了如何利用Nginx的加权轮询策略、MQ消息队列异步处理等方式降低系统压力,保障交易完整性和数据一致性,防止超卖现象。 适用人群:具有一定互联网应用开发经验的研发人员和技术管理人员。 使用场景及目标:适用于电商、票务等行业需要处理大量瞬时并发请求的业务场景。其目标在于通过合理的架构规划,实现在高峰期保持平台的稳定运行,保证用户体验的同时最大化销售额。 其他说明:文中提及的技术细节如Epoll I/O多路复用模型以及分布式系统中的容错措施等内容,对于深入理解大规模并发系统的构建有着重要指导意义。
基于 OpenCV 和 PyTorch 的深度车牌识别
【毕业设计-java】springboot-vue教学资料管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
此数据集包含有关出租车行程的详细信息,包括乘客人数、行程距离、付款类型、车费金额和行程时长。它可用于各种数据分析和机器学习应用程序,例如票价预测和乘车模式分析。
把代码放到Word中,通过开发工具——Visual Basic——插入模块,粘贴在里在,把在硅基流动中申请的API放到VBA代码中。在Word中,选择一个问题,运行这个DeepSeekV3的宏就可以实现在线问答