html5网站后台管理系统,网站排名技巧,公司企业模板,中国国建设监理协会网站Three 学习日志#xff08;九#xff09;—— 阵列立方体和相机适配体验
一、双层for循环创建阵列模型
//创建一个长方体几何对象Geometry
const geometry new THREE.BoxGeometry(100, 100, 100);
//材质对象Material
const material new THREE.MeshLambertMaterial({col…Three 学习日志九—— 阵列立方体和相机适配体验
一、双层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(800, 800, 800);camera.lookAt(0, 0, 0);三、超出视锥体远裁界面的范围的会被剪裁掉不渲染可以调整far参数适配
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
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)五、完整代码
!DOCTYPE html
html langenheadmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0titleLearn Three/title!-- 引入three下载地址参考http://www.webgl3d.cn/pages/aac9ab/#%E7%89%B9%E5%AE%9A%E7%89%88%E6%9C%ACthree-js%E6%96%87%E4%BB%B6%E5%8C%85%E4%B8%8B%E8%BD%BD --script src../build/three.js/script!-- 引入相机控件 --script typeimportmap{imports: {three: ../build/three.module.js,three/addons/: ../examples/jsm/}}/script
/headbodyscript typemodule// 引入轨道控制器扩展库OrbitControls.jsimport { OrbitControls } from three/addons/controls/OrbitControls.js;// 创建3D场景对象Sceneconst scene new THREE.Scene();const axesHelper new THREE.AxesHelper(150);scene.add(axesHelper);//创建一个长方体几何对象Geometryconst geometry new THREE.BoxGeometry(100, 100, 100);//材质对象Materialconst 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); //网格模型添加到场景中 }}// //环境光强度调整为0.8const ambient new THREE.AmbientLight(0xffffff, 0.4);scene.add(ambient);const width window.innerWidth; // 窗口宽度const height window.innerHeight; // 窗口高度// const camera new THREE.PerspectiveCamera();// camera.position.set(200, 200, 200);// camera.lookAt(0, 0, 0);// const camera new THREE.PerspectiveCamera(30, width / height, 1, 3000);// //在原来相机位置基础上拉远可以观察到更大的范围// 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);// // 改变相机观察目标点camera.lookAt(1000, 0, 1000);const renderer new THREE.WebGLRenderer();renderer.setSize(width, height);renderer.render(scene, camera); //执行渲染操作document.body.appendChild(renderer.domElement);// 设置相机控件轨道控制器OrbitControlsconst 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)/script
/body
stylebody {overflow: hidden;margin: 0px;}
/style
/html