首页 > 其他分享 >Three.js教程:阵列立方体和相机适配体验

Three.js教程:阵列立方体和相机适配体验

时间:2023-06-24 14:33:11浏览次数:51  
标签:set const 适配 Three js 相机 camera new THREE

推荐:将NSDT场景编辑器加入你的3D工具链

其他系列工具:NSDT简石数字孪生

阵列立方体和相机适配体验

本节课通过阵列一片立方体,进一步体验下透视投影相机的投影规律。

for循环创建一列模型

const geometry = new THREE.BoxGeometry(100, 100, 100);
//材质对象Material
const material = new THREE.MeshLambertMaterial({
    color: 0x00ffff, //设置材质颜色
    transparent: true,//开启透明
    opacity: 0.5,//设置透明度
});
for (let i = 0; i < 10; i++) {
    const mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
    // 沿着x轴分布
    mesh.position.set(i*200,0,0);
    scene.add(mesh); //网格模型添加到场景中
}

双层for循环创建阵列模型

//创建一个长方体几何对象Geometry
const geometry = new THREE.BoxGeometry(100, 100, 100);
//材质对象Material
const material = new THREE.MeshLambertMaterial({
    color: 0x00ffff, //设置材质颜色
    transparent: true,//开启透明
    opacity: 0.5,//设置透明度
});
for (let i = 0; i < 10; i++) {
    for (let j = 0; j < 10; j++) {
        const mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
        // 在XOZ平面上分布
        mesh.position.set(i * 200, 0, j * 200);
        scene.add(mesh); //网格模型添加到场景中  
    }
}

相机位置拉远,可以看到更大的观察范围

const camera = new THREE.PerspectiveCamera(30, width / height, 1, 3000);
// camera.position.set(292, 223, 185);
//在原来相机位置基础上拉远,可以观察到更大的范围
 camera.position.set(800, 800, 800);
 camera.lookAt(0, 0, 0);

超出视锥体远裁界面的范围的会被剪裁掉

// const camera = new THREE.PerspectiveCamera(30, width / height, 1, 3000);
const camera = new THREE.PerspectiveCamera(30, width / height, 1, 8000);
// camera.position.set(292, 223, 185);
// 超出视锥体远裁界面的范围的会被剪裁掉,不渲染  可以调整far参数适配
camera.position.set(2000, 2000, 2000);
camera.lookAt(0, 0, 0);

改变相机观察目标

// const camera = new THREE.PerspectiveCamera(30, width / height, 1, 3000);
const camera = new THREE.PerspectiveCamera(30, width / height, 1, 8000);
camera.position.set(2000, 2000, 2000);
// camera.lookAt(0, 0, 0);
// 改变相机观察目标点
camera.lookAt(1000, 0, 1000);

注意相机控件OrbitControls会影响lookAt设置,注意手动设置OrbitControls的目标参数

// 设置相机控件轨道控制器OrbitControls
const controls = new OrbitControls(camera, renderer.domElement);
// 相机控件.target属性在OrbitControls.js内部表示相机目标观察点,默认0,0,0
// console.log('controls.target', controls.target);
controls.target.set(1000, 0, 1000);
controls.update();//update()函数内会执行camera.lookAt(controls.targe)

远小近大投影规律

透视投影相机的投影规律是远小近大,通过相机观察阵列立方体大小变化,可以看到距离相机越远,立方体的渲染视觉效果越小。

fov改变

增加相机视角fov,视锥体范围更大,意味着可以看到渲染范围更大,远小近大的视觉效果更明显。

3D建模学习工作室    

上一篇:Three.js教程:stats性能监视器 (mvrlink.com)

下一篇:Three.js教程:Threejs常见几何体简介 (mvrlink.com)

标签:set,const,适配,Three,js,相机,camera,new,THREE
From: https://www.cnblogs.com/mvrlink/p/17501097.html

相关文章

  • js:codemirror实现在线代码编辑器代码高亮显示
    CodeMirrorisaversatiletexteditorimplementedinJavaScriptforthebrowser.Itisspecializedforeditingcode,andcomeswithanumberoflanguagemodesandaddonsthatimplementmoreadvancededitingfunctionality.译文:CodeMirror是一个多功能的文本编辑......
  • 基于 JSON 的 DSL 查询 - 实现步骤【ElasticSearch】
    ESDSL查询实现//todo2.准备Request-搜索哪个索引库SearchRequestsearchRequest=newSearchRequest("hotel");//todo4.所有的搜索条件封装对象searchSourceBuilderSearchSourceBuildersearchSourceBuilder=newSearchSourceBuild......
  • js 获取当前时间
    getNow(){letdate=newDate();lety=date.getFullYear();letm=date.getMonth()+1;letd=date.getDate();letH=date.getHours();letmm=......
  • 优雅地解析HTML文档-Jsoup
    一、介绍Jsoup是一个流行的JavaHTML解析器,它主要用于用于从Web页面中提取并解析HTML数据。它提供了一种简单而优雅的方式,使得开发人员可以快速解析HTML并从中提取数据。二、特性1.遵循HTML5标准。2.解析速度快,灵活性强。3.API易于使用,并提供了丰富的文档。4.......
  • CF1418G Three Occurrences 做题笔记
    题目链接题意是输出所有区间满足其内部每个数要么出现$3$次要么不出现的个数。因为是区间,数量很多,发现贡献是可以抵消的,直接无脑预处理前缀的桶。然后枚举左端点,统计答案,怎么处理呢?疯狂地向右扩展,直到区间内有数字出现了$3$次以上(这样是对的,待会儿证明,另外扩展到前一个就......
  • 【JS基础】instanceof 和 typeof
     instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。objectinstanceofconstructortypeof 运算符返回一个字符串,表示操作数的类型。typeofoperandconsole.log('--------------------instanceof-------------------')//t......
  • 【JS基础】hasOwnProperty 和 isPrototypeOf
    hasOwnProperty检查对象是否含有某个属性,无法检查其原型链上是否含有该属性isPrototypeOf检查一个对象是否存在于另一个对象的原型链上,比如parent.isPrototypeof(child)检查parent对象是否在child对象的原型链上 console.log('--------------------hasOwnProperty--......
  • 【js学习笔记二】innerHTML和innerText的使用
     目录前言导语代码部分 运行结果总结前言   我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语......
  • 【js学习笔记三】数组去重的第二种方式indexof
     目录前言导语代码部分 运行结果总结前言   我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语......
  • JS(运算符、流程控制)
    一运算符(操作符)1运算符的分类运算符(operator)也被称为操作符,是用于实现赋值、比较和执行算数运算等功能的符号。JavaScript中常用的运算符有:算数运算符递增和递减运算符比较运算符逻辑运算符赋值运算符2算数运算符算术运算符概述概念:算术运算使用的符号,用于执......