最新要闻
- 观点数字化大会 | 德信集团胡一平:一定要积极拥抱数字化改革
- 世界关注:非会员看剧遇3000多秒广告 优酷回应:确实会有 属极个别情况
- 世界今日讯!小米长焦之王!13 Ultra塞进两颗长焦镜头
- 专家称北京打车太便宜应涨价 崔东树曾任汽车销售
- 环球快看:女子疯狂网上购物确诊帕金森:过度伤害性冲动行为
- 世界最资讯丨自研大模型图片生成被质疑 商汤回应:秒画也有第三方开源模型
- 今日热门!叶一茜当众骂森碟“心机”,她就这么恨女儿?
- 沙尘跨过长江一路向南!直击江皖沪多地沙尘现场
- 要闻:GT Neo5 SE 1TB版只卖2599 真我喊话:现货才是硬道理
- RTX 4070今晚发布 结果遭AMD背刺了:显存越大越好、4K至少16GB
- 全球头条:史上最挤”五一档来了!王一博《长空之王》等17部影片扎堆上映
- 网传明年中旬上海绿牌蓝牌要合并?官方回应来了
- 当前速读:梯田为“布” 光影为“沙” 点亮乡村“夜经济”
- 环球最资讯丨不怕有味儿 比毛巾划算:云南白药洗脸巾0.06元/张狂促
- 天天热点评!“回锅沙”要来了!部分地方要注意
- 全球短讯!果粉最期待的大屏MacBook Air来了!苹果史上第一款
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
每日短讯:Three.js教程:第一个3D场景
推荐:将NSDT场景编辑器加入你3D工具链
其他工具系列:https://nsdt.cloud/
下面的代码完整展示了通过three.js引擎创建的一个三维场景,在场景中绘制并渲染了一个立方体的效果,为了大家更好的宏观了解three.js引擎, 尽量使用了一段短小但完整的代码实现一个实际的三维效果图。
(相关资料图)
学习建议
刚一开始学习,不需要完全看懂下面的代码,能够修改增删部分代码就可以,随着时间的推移就能够很好的使用三维引擎three.js。
本课程风格和大多数课程风格不同,注意一定要结合案例代码学习,在案例代码的基础上调试体验总结,就像做化学实验一样,不要仅仅阅读文字。
.html文件引入three.js引擎
在.html文件中引入three.js就像前端经常使用的jquery.js一样引入即可。
<script src="./three.js"></script>
我已经把three.js文件上传到了我的博客服务器, 可以通过下面的URL地址去加载。
<script src="http://www.yanhuangxueyuan.com/versions/threejsR92/build/three.js"></script>
案例源码
第一个Three.js案例,麻雀虽小,五脏俱全,整体展示了Three.js的整套渲染系统。
第一个three.js文件_WebGL三维场景 <script src="http://www.yanhuangxueyuan.com/versions/threejsR92/build/three.js"></script> <script> /** * 创建场景对象Scene */ var scene = new THREE.Scene(); /** * 创建网格模型 */ // var geometry = new THREE.SphereGeometry(60, 40, 40); //创建一个球体几何对象 var geometry = new THREE.BoxGeometry(100, 100, 100); //创建一个立方体几何对象Geometry var material = new THREE.MeshLambertMaterial({ color: 0x0000ff }); //材质对象Material var mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh scene.add(mesh); //网格模型添加到场景中 /** * 光源设置 */ //点光源 var point = new THREE.PointLight(0xffffff); point.position.set(400, 200, 300); //点光源位置 scene.add(point); //点光源添加到场景中 //环境光 var ambient = new THREE.AmbientLight(0x444444); scene.add(ambient); // console.log(scene) // console.log(scene.children) /** * 相机设置 */ var width = window.innerWidth; //窗口宽度 var height = window.innerHeight; //窗口高度 var k = width / height; //窗口宽高比 var s = 200; //三维场景显示范围控制系数,系数越大,显示的范围越大 //创建相机对象 var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000); camera.position.set(200, 300, 200); //设置相机位置 camera.lookAt(scene.position); //设置相机方向(指向的场景对象) /** * 创建渲染器对象 */ var renderer = new THREE.WebGLRenderer(); renderer.setSize(width, height);//设置渲染区域尺寸 renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色 document.body.appendChild(renderer.domElement); //body元素中插入canvas对象 //执行渲染操作 指定场景、相机作为参数 renderer.render(scene, camera); </script>
体验测试
直接看上面的代码大家可能不太理解,如果是第一次接触会比较陌生,可以尝试更改代码的参数看看有什么效果,代码的功能都有注释, 看着注释也能大概猜出一个参数的含义。通过修改代码,同时刷新浏览器查看效果形成一个互动来提高自己学习的驱动力。
几何体Geometry
//创建一个立方体几何对象Geometryvar geometry = new THREE.BoxGeometry(100, 100, 100);
代码var box=new THREE.BoxGeometry(100,100,100);
通过构造函数THREE.BoxGeometry()
创建了一个长宽高都是100的立方体,通过构造函数名字BoxGeometry也能猜出这个构造函数的意义,利用new关键字操作构造函数可以创建一个对象, 这都是Javascript语言的基本知识,至于THREE.BoxGeometry()
构造函数具体是什么可以不用关心, 就像你使用前端使用JQuery库一样查找官方文档就可以,你可以把代码THREE.BoxGeometry(100,100,100)
中的第一个参数更改为为50,刷新浏览器查看数据更改后长方体的效果图,可以看到已经不是长宽高一样的立方体, 而是普通的长方体。
你也可以用下面一段代码代替上面的长方体代码,你会发现会渲染出来一个球体效果。
//创建一个球体几何对象var geometry = new THREE.SphereGeometry(60, 40, 40);
材质Material
代码var material=new THREE.MeshLambertMaterial({color:0x0000ff});
通过构造函数THREE.MeshLambertMaterial()创建了一个可以用于立方体的材质对象, 构造函数的参数是一个对象,对象包含了颜色、透明度等属性,本案例中只定义了颜色color
,颜色属性值0x0000ff
表示蓝色,可以把颜色值改为0x00ff00
,可以看到是绿色的立方体效果, 这里使用的颜色值表示方法是16进制RGB三原色模型。使用过渲染类软件、设计过网页或者学习过图形学应该能知道RGB三原色模型,这里就不再详述。
光源Light
代码var point=new THREE.PointLight(0xffffff);
通过构造函数THREE.PointLight()创建了一个点光源对象,参数0xffffff
定义的是光照强度, 你可以尝试把参数更改为为0x444444
,刷新浏览器你会看到立方体的表面颜色变暗,这很好理解,实际生活中灯光强度变低了,周围的景物自然暗淡,three.js引擎对WebGL光照模型算法都进行了封装,不需要你了解计算机图形学, 可以直接使用调用three.js光源相关API直接创建一个光源对象,就像你使用普通的三维建模渲染软件一样,只是这里多了一个Javascript编程语言而已。
相机Camera
代码var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);
通过构造函数THREE.OrthographicCamera()创建了一个正射投影相机对象, 什么是“正射投影”,什么是“相机对象”,每个人的基础不一样,或许你不太理解,或许你非常理解,如果不清楚还是那句话,刚一开始不用深究,改个参数测试一下看看视觉效果你就会有一定的感性认识。 比如把该构造函数参数中用到的参数s,也就是代码var s = 200;
中定义的一个系数,可以把200更改为300,你会发现立方体显示效果变小,这很好理解,相机构造函数的的前四个参数定义的是拍照窗口大小, 就像平时拍照一样,取景范围为大,被拍的人相对背景自然变小了。camera.position.set(200, 300, 200);
和camera.lookAt(scene.position);
定义的是相机的位置和拍照方向,可以更改camera.position.set(200,300,200);
参数重新定义的相机位置,把第一个参数也就是x坐标从200更改为250, 你会发现立方的在屏幕上呈现的角度变了,这就像你生活中拍照人是同一个人,但是你拍照的位置角度不同,显示的效果肯定不同。这些具体的参数细节可以不用管, 至少你知道相机可以缩放显示三维场景、对三维场景的不同角度进行取景显示。
整个程序的结构
场景——相机——渲染器
从实际生活中拍照角度或是使用三维渲染软件角度理解本节课的案例代码,立方体网格模型和光照组成了一个虚拟的三维场景,相机对象就像你生活中使用的相机一样可以拍照,只不过一个是拍摄真实的景物,一个是拍摄虚拟的景物,拍摄一个物体的时候相机的位置和角度需要设置,虚拟的相机还需要设置投影方式,当你创建好一个三维场景,相机也设置好,就差一个动作“咔”,通过渲染器就可以执行拍照动作。
对象、方法和属性
从面向对象编程的角度理解上面的程序,使用three.js和使用其它传统前端Javascript库或框架一样,通过框架提供的构造函数可以创建对象,对象拥有方法和属性,只不过three.js是一款3D引擎, 如果你对HTML、Javascript语言、三维建模渲染软件都能够理解应用,即使你不懂计算机图形学和WebGL,也能够学习three.js引擎,创建可以在线预览的三维场景。
案例源码分别使用构造函数THREE.Scene()
、THREE.OrthographicCamera()
、THREE.WebGLRenderer()
创建了场景、相机、渲染器三个最顶层的总对象,然后通过总对象的子对象、方法和属性进行设置, 相机对象和渲染对象相对简单,最复杂的是场景对象,new THREE.Mesh(box,material);
使用构造函数Mesh()
创建了一个网格模型对象,该对象把上面两行含有顶点位置信息的几何体对象和含有颜色信息的材质对象作为参数,网格模型创建好之后, 需要使用场景对象的方法.add()
把三维场景的子对象添加到场景中,new THREE.PointLight(0xffffff);
、new THREE.AmbientLight(0x444444);
定义了两个点光源、环境光对象,然后作为场景的子对象插入场景中。 场景、相机、渲染器设置完成后,设置代码renderer.render(scene,camera)
把场景、相机对象作为渲染器对象方法render()
的参数,这句代码的意义相当于告诉浏览器根据相机的放置方式拍摄已经创建好的三维场景对象。
WebGL封装
如果你有WebGL基础,可以通过下面介绍了解Three.js对WebGL的封装,如果不了解WebGL或计算机图形学,随便阅读一下或者直接跳过。
从WebGL的角度来看,three.js提供的构造函数基本是对原生WebGL的封装,如果你有了WebGL的基础,在学习three.js的很多对象、方法和属性是很容易理解的。在three.js入门教程中不会去过多讲解WebGL的基础知识, 但是为了大家更好的理解three.js的很多命令,与three.js相关的WebGL API知识、GPU渲染管线的知识。图形学可能很多人会觉得比较难,其实主要是算法部分,大家先可以学习一些基本的WebGL知识,初学的时候尽量不关注算法,主要了解顶点数据处理的过程,GPU渲染管线的基本功能单元。实际的工作中如果不是开发3D引擎可能不会使用原生WebGL API,但是学习了这些之后,对于three.js的深度开发学习很有好处,如果你了解你WebGL知识,可以联系绘制函数drawArrays()
来理解渲染器的渲染操作方法render()
。
下一篇:Three.js教程:旋转动画、requestAnimationFrame周期性渲染 (mvrlink.com)
关键词:
-
【天天时快讯】pymysql操作数据库入门
1 python操作数据库pymysqlPyMSQL是一个纯的python的MySQL客户端。pipinstallPyMySQL使用步骤创建连接(...
来源: 每日短讯:Three.js教程:第一个3D场景
【天天时快讯】pymysql操作数据库入门
快看点丨高数上复习
辽宁发行150亿元专项债补充盛京银行资本金
【环球聚看点】《信托大家谈——信托业转型发展对大众意味着什么》
观点数字化大会 | 德信集团胡一平:一定要积极拥抱数字化改革
世界关注:非会员看剧遇3000多秒广告 优酷回应:确实会有 属极个别情况
世界今日讯!小米长焦之王!13 Ultra塞进两颗长焦镜头
专家称北京打车太便宜应涨价 崔东树曾任汽车销售
环球快看:女子疯狂网上购物确诊帕金森:过度伤害性冲动行为
世界最资讯丨自研大模型图片生成被质疑 商汤回应:秒画也有第三方开源模型
关于数智融合,看看这20位专家都聊了什么
热文:在.NET Core使用 HttpClient 的正确方式
看!前端新人如何用ChatGPT开发APP
JMeter-BeanShell预处理程序和BeanShell后置处理程序的应用
当前速读:智能指针基本原理,简单实现,常见问题
今日热门!叶一茜当众骂森碟“心机”,她就这么恨女儿?
【新华500】新华500指数(989001)12日窄幅震荡跌0.10%
沙尘跨过长江一路向南!直击江皖沪多地沙尘现场
要闻:GT Neo5 SE 1TB版只卖2599 真我喊话:现货才是硬道理
RTX 4070今晚发布 结果遭AMD背刺了:显存越大越好、4K至少16GB
全球头条:史上最挤”五一档来了!王一博《长空之王》等17部影片扎堆上映
网传明年中旬上海绿牌蓝牌要合并?官方回应来了
当前速读:梯田为“布” 光影为“沙” 点亮乡村“夜经济”
世界热消息:C#使用Elasticsearch入门
plist文件格式转换器
观速讯丨T-SQL基础教程Day1
天天微头条丨云图说|云数据库GaussDB如何做到卓越性能
环球最资讯丨不怕有味儿 比毛巾划算:云南白药洗脸巾0.06元/张狂促
天天热点评!“回锅沙”要来了!部分地方要注意
全球短讯!果粉最期待的大屏MacBook Air来了!苹果史上第一款
世界视点!首款骁龙8+平板中兴Axon Pad来了:12.1寸超大屏
新动态:4月14日State of Play:将展示超20分钟《最终幻想16》
全球看热讯:电商平台商品详情接口的应用场景
热点!二级指针创建二叉树节点与一级指针创建二叉树节点
身体很诚实!马斯克加入AIGC大战:抢购1万张GPU、挖Deepmind墙角
当前视讯!曾被誉为最靠谱!又一家造车新势力发不出工资了
全球微速讯:火山引擎 DataLeap 推出全链路智能监控报警平台
有病了还能买哪种保险?隐瞒健康告知带病投保会怎么样?
理想汽车全系车型电器真实功率再公开:空调果然是耗电大户!
小米13 Ultra样张首亮相:虚化堪比单反 夜拍效果惊人
《龙之家族》新季开拍
罕见超级激励!东方甄选奖励154员工8.83亿港元
【世界独家】00后网红骑摩托车遇车祸身亡 劝不住:网友感慨年轻 有必要全面禁摩?
易基因:METTL3介导的m6A甲基化谱调控肌肉干细胞成肌细胞状态转换|发育分化
全球快资讯丨中骏集团称已备好即将到期美元债兑付资金 拟发行第二支中债增全额担保中票
3月物价数据透露哪些经济变化?促消费政策获得较大空间
天天报道:iPhone 15 Pro颠覆式设计取消了!郭明錤:苹果因技术问题放弃固态按键
丫丫将通过温控卡车运至机场:即将飞赴上海
又有新品牌了!长安启源A07亮相:颜值超高碾压一众国产
报道:推特突然“死亡”!马斯克正式启动打造美版微信
走过别错过!红蜻蜓126款休闲鞋/运动鞋/皮鞋清仓:79元绝世好价
h3c路由器如何恢复出厂设置?h3c路由器配置命令大全
小米手机卡顿反应慢是什么原因?小米手机卡顿反应慢怎么解决?
ssd极速固态硬盘怎么样?ssd极速固态硬盘排名前十
iphone4的显示屏分辨率是多少?iphone4版本太低怎么下载软件?
AMD速龙QL64CPU性能怎么样?amd速龙系列cpu天梯图
Zabbix“专家坐诊”第187期问答汇总
每日报道:数据开发提效有秘诀!离线开发BatchWorks 六大典型场景拆解
全球观天下!公司入职一个阿里大佬,把 Spring Boot 系统启动时间从 7 分钟降到了 40 秒!
HTML中的pre-load 和 pre-fetch
全球最资讯丨京准GPS北斗卫星网络授时服务器助力高速智慧交通
环球观热点:三月三拜轩辕 | 全球华人同根同源——强月新
世界今亮点!雷军:小米13 Ultra将摆脱手机成片的“塑料味”
头条:淄博老板娘为赶高铁小伙1V1烤串!完美诠释“好客山东”
天天观察:苹果智能戒指专利首曝:VR场景交互只需动下手指
当前速读:1TB仅529元!致态TiPlus 7100固态硬盘新史低 选它还是选三星?
全球视讯!机构一致唱多金价 贵金属板块表现亮眼
世界热议:全网最详细中英文ChatGPT-GPT-4示例文档-场景问题智能生成从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/
世界速讯:记一次kvm虚机mysql数据库磁盘扩容操作步骤及其问题小坑
每日视点!第八批国家组织药品集采中选结果公布
天天新资讯:公开叫停ChatGPT的马斯克暗渡陈仓玩得6 网友:他是懂中国兵法的
越野也不费油!坦克300 PHEV实车亮相:动力大增
实测RTX 4090平均20帧!《赛博朋克2077》成新一代“显卡危机”
每公里造价2.1亿!中国最贵高速公路预计2025年建成
全球观热点:被国产车打怕韩系车拼了 起亚新SUV赛图斯预售:仅9.19万元起
【独家】昆明部分店外增设“一米线”:商户可在线内摆摊
环球今日报丨中国国债期货收益指数今日发布
今日精选:比五菱MINI EV还便宜?奇瑞“棒棒糖”亮相:油门到底时速能到100km
重点聚焦!小米成中国市场周销量安卓第一!高端旗舰小米13 Ultra本月发布
焦点速讯:你达标了吗?国内人均存款增加1.2万:人民币存款继续增长
天天视点!初代跑男重聚引热议:邓超李晨王宝强等合照引回忆杀
32岁婆孙恋爆红网络!日本61岁奶奶交往29岁男子 网友感叹相貌绝了
新动态:让你脑洞大开的MySQL优化技巧
多地超前谋划专项债项目 “早发快用”加力稳投资
微速讯:女生在冬季剪什么发型好看呢?
天天热头条丨行业首款卫星通信5G手机!中兴Axon 50 Ultra吴京代言图公布:背部外观揭晓
【独家】韩国4月前10天芯片出口下降近40%:1TB SSD三星降599没人买 国产崛起
环球热点评!中老铁路国际旅客列车明日开通:万象到昆明南二等座470元
全球信息:大疆8K航拍无人机明天发 悟3真机亮相:个头感受下
天天观察:97版三兄弟代言!《天龙八部2:飞龙战天》4月14日公测:完美世界发行
每日看点!女子没开会员追剧需看50多分钟广告:遇到了BUG是个例
环球热议:酒也分贵贱? 专家:洋酒就没文化含量 中国酒文化才叫源远流
世界微动态丨图赫尔:0比3输球的结果很苦涩,但今天我爱上了我的球队
环球观点:CSS杂谈——flex布局里面的auto到底多长
光栅化算法-中点画圆算法
Win无敌二十多年后 微软又抓到了AI风口:印度裔CEO立大功
环球关注:“小号Mate 50 Pro”!华为畅享60X来了:骁龙680、又一技术行业首发
全球观点:这株极品牡丹居然有“带刀侍卫”!24小时守护
当前关注:地表能效第一!锐龙9 7950X3D深入测试:i9-13900K无言以对